当前位置:   article > 正文

freertos作业day2

freertos作业day2

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光敏电阻完成光控灯的实验

  1. double a=0;
  2. HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_3);
  3. while (1)
  4. {
  5. HAL_ADC_Start(&hadc);//打开ADC采样
  6. //获取adc采样值
  7. ADC_Value= HAL_ADC_GetValue(&hadc);
  8. a=999-(ADC_Value/4095.0f*999.0f);
  9. TIM3->CCR3=a;
  10. printf("adc:%d,%lfv\r\n",ADC_Value,((double)ADC_Value/4096*3.3));
  11. HAL_Delay(50);
  12. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/479748
推荐阅读
  

闽ICP备14008679号