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库会不会造成运行不稳定有待于继续测试。
项目做到一半,碰到个尴尬问题: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库会不会造成运行不稳定有待于继续测试。
举报
更多回帖
rotate(-90deg);
回复
相关问答
中断
中断函数
请问cube的
HAL_UART_Receive_IT
函数
是每次进入
中断
接收
一个字节吗?
2019-02-20
10142
请问
HAL_UART_Receive_IT
和
HAL_UART_Receive
的区别是什么?
2021-11-25
3361
HAL_SPI_Receive
_IT()/
HAL_UART_Receive_IT
() 的size=10那么实际对方只发了9个字节的数据,还会进
中断
吗?
2024-04-16
100
HAL
库串口
中断
接收
的回掉
函数
没起作用
2019-01-28
5644
HAL_UART_Receive_IT
- 启动
函数
前如何清理?
2022-12-06
200
如果TX未完成时RX,
HAL_UART
_Transmit() 和
HAL_UART_Receive_IT
() 失败怎么处理?
2022-12-02
226
HAL_UART_Receive_IT
和
HAL_UART
_Transmit一起用进不到
中断
里
2019-03-14
12787
HAL
库
函数
串口
中断
接收
只能收到第一个字节
2018-11-26
12484
请问用STM32CubeMX怎么配置串口的
接收
中断
?
2018-10-15
4450
HAL
UART
发送
接收
死锁
2019-01-02
6251
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分