打印
[应用相关]

STM32HAL学习

[复制链接]
185|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-11-25 07:58 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2028

主题

15904

帖子

14

粉丝