HAL_Delay
该函数延时的时间为设置的参数+1,即HAL_Delay(99)是延时100ms
多加了1ms
注意
STM32CubeIde输入中文注释乱码可以在系统下添加下列环境变量解决
采用中断IT或者DMA模式下发送数组时,需要将数组设置为static(如果是局部数组)
原因是:IT和DMA都是非阻塞模式,调用函数后即刻返回,因此如果不加static定义数组,会导致数据被释放,而发送了错误的数据到从机。
串口中断
1. 当采用HAL_UART_Receive_IT接收到串口数据后进行中断后,需要在中断中重新执行一次
HAL_UART_Receive_IT语句,打开串口接收中断,否则后续无法通过中断接收串口数据
2. 当采用HAL_UART_Receive_DMA(&huart1,Receive, 2)语句进行DMA接受中断
当接受到所需的字节数后(当前例子为2字节),会与HAL_UART_Receive_IT语句一样触发HAL_UART_RxCpltCallback串口接收回调,并在串口接收中断回调中处理该数据
3. 当需要接收不定长的串口数据时,可以采用串口空闲中断HAL_UARTEx_ReceiveToIdle_DMA(普通模式/中断模式/DMA模式均可,这里展示DMA模式)来接收,此中断的触发条件与接收的字节数无关,只有当RX引脚上无后续数据进入,也就是串口接收从忙碌转为空闲时才会触发,因此可以认为空闲中断发生时,就是一帧数据包接收完成了。
注:HAL_UARTEx_ReceiveToIdle_DMA接收完成后不是触发HAL_UART_RxCpltCallback回调函数,而是触发HAL_UARTEx_RxEventCallback回调函数。
注:HAL_UARTEx_ReceiveToIdle的DMA模式(普通模式和IT模式不会)下有个注意事项:
DMA的传输过半中断(接收的数据量达到我们设置的最大值一半的时候)也会触发HAL_UARTEx_RxEventCallback回调函数,关闭DMA传输过半中断的语句为__HAL_DMA_DISABLE_IT(&hdma_usart1_rx,DMA_IT_HT);需要在while循环前面调用,以及HAL_UARTEx_RxEventCallback回调中调用。
注:STM32 的 DMA 通道一次只能处理一个传输任务。如果调用 HAL_UART_Transmit_DMA 两次,且是同一个 UART 外设,这样就会导致第二次调用失败,因为前一次的 DMA 传输尚未完成。
打印浮点数
如果不使能这个选项的话,无法通过串口打印浮点数,同时需要在无报错的情况下下载。
下载:不需要点击小锤子编译,直接点击Run进行编译下载,因为先点击小锤子会报错。
定时器
定时器在初始化MX_TIM2_Init的时候会将定时器的更新中断标志位置一,因此此当启动定时器HAL_TIM_Base_Start_IT时,会自动调用定时器中断服务函数,如果不想要这个效果,可在启动定时器之前清除中断标志位。
从模式
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/m0_68300980/article/details/143859404
|