freertos作业day2

发布于:2024-04-18 ⋅ 阅读:(172) ⋅ 点赞:(0)

1.总结串口的发送和接收功能使用到的函数

1.)

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart,

        const uint8_t *pData,

        uint16_t Size,

        uint32_t Timeout);

osThreadId_t:返回创建任务的ID

osThreadFunc_t:void (*osThreadFunc_t) (void *argument):函数指针类型,任务的入口函数

void *argument:传递给任务入口函数的参数

const osThreadAttr_t *attr:用于描述任务的属性

eg:HAL_UART_Transmit(&huart1, "Hello World\r\n", sizeof("Hello World\r\n") - 1, 1000);

2.)

int fputc(int ch, FILE* f)//将printf串口重定向

{ unsigned char HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 1000);//重新实现fputc发送一个字符的功能

return ch; }

3.)

HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

UART_HandleTypeDef *huart:从哪个串口中接收数据

uint8_t *pData:数据保存的地址

uint16_t Size:一次需要接收多少个字节数据

HAL_StatusTypeDef:是否成功开启串口接收

调用该函数接收到数据后会进入中断处理函数执行相关操作代码

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)//中断处理函数原型

2.总结DMA的作用,和DMA+空闲中断的使用方式

DAM是受CPU指令来处理数据的控制器,调用DAM后,相关功能由DMA控制器实现,CPU只有执行这条代码的消耗而无需进行数据处理,可以直接继续执行下面的代码

HAL_UART_Transmit_DMA(&huart1, "dwa", 10000);

HAL_UARTEx_ReceiveToIdle_DMA(&huart1, Rx_data, 100);//DMA的中断处理函数

void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)//DMA的接受函数,接收后空隙触发空闲中断,空闲中断后要再次调用本函数,才能继续接受串口数据,触发空闲终端。


3.使用PWM+ADC光敏电阻完成光控灯的实验

      double a=0;

      HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_3);
      while (1)
      {
		

		HAL_ADC_Start(&hadc);//打开ADC采样
		//获取adc采样值
		ADC_Value= HAL_ADC_GetValue(&hadc);
		a=999-(ADC_Value/4095.0f*999.0f);
		TIM3->CCR3=a;
		printf("adc:%d,%lfv\r\n",ADC_Value,((double)ADC_Value/4096*3.3));
		HAL_Delay(50);
      }


网站公告

今日签到

点亮在社区的每一天
去签到