STM32
直播中

手托初梦

9年用户 831经验值
擅长:可编程逻辑 嵌入式技术
私信 关注
[问答]

中断接收HAL_UART_RECEIVE_IT函数有何优缺点呢

PWM使用的DMA通道与串口接收的DMA通道撞车了咋办?
中断接收HAL_UART_RECEIVE_IT函数有何优缺点呢?

回帖(1)

逯荣荣

2021-12-7 14:22:13
项目做到一半,碰到个尴尬问题:PWM使用的DMA通道与串口接收的DMA通道撞车了,咋办?
考虑一下,决定放弃idle中断+dma的串口不定长数据接收方案,回到中断接收去。
中断接收函数HAL_UART_RECEIVE_IT函数是个定长接收函数,除非把接收长度设为1。由于我使用freertos系统,打断系统的时间应尽可能少,频率尽可能低。每个字节都进一次hal库的接收处理函数,进行各种判断实在是不友好,因此考虑跳过hal的串口处理部分,直接判断uart_flag_rxne标志位与uart_flag_idle标志位,存入接收缓冲。触发idle中断后认为不定长数据接收完毕,进行处理。
代码:
中断使能与初始化,不启用hal_uart_receive_it。





中断处理部分,跳过hal中断处理函数





注意:__hal_uart_clear_flag函数不能清除idle标志位,需要用古老的读取方法清空。否则会卡死在中断处理结束之后。
优点:中断处理内容尽可能简化,降低对系统内核的打断;
缺点:只适用于8位数据位,无校验位等最常规通信方式,对于更复杂参数的串口通信有待测试,省掉的hal库会不会造成运行不稳定有待于继续测试。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分