打印
[STM32L4]

请问STM32L432 UART帧错误是什么?

[复制链接]
1229|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
两只袜子|  楼主 | 2023-10-16 10:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一个奇怪的问题,使用STM32L432的UART通信,如果使能了uart的错误中断,代码如下:/* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */        SET_BIT(UartHandle.Instance->CR3, USART_CR3_EIE);
则程序会一直在串口中断中出不来,程序就跑步起来了。
在中断中如果清除了帧错误(Frame error)中断标志位,则程序可正常运行了。
由此说明了,是帧错误导致的,
问题是,什么是帧错误,是软件错误还是硬件错误呢?

使用特权

评论回复
沙发
duo点| | 2023-10-16 10:41 | 只看该作者
STM32L432的UART模块在发生帧错误时,可以通过清零中断标志位的方式,使得程序从串口中断中跳出,恢复正常执行。

使用特权

评论回复
板凳
lzmm| | 2023-10-17 10:37 | 只看该作者
数据传输错误导致的错误              

使用特权

评论回复
地板
jtracy3| | 2023-10-17 14:07 | 只看该作者
在STM32L432中,UART帧错误通常可以通过UART的中断标志位检测到。

使用特权

评论回复
5
mikewalpole| | 2023-10-17 14:36 | 只看该作者
在数据寄存器 (USART_DR) 位1上当检测到同步错位、过多的噪声或者检测到断开符时,该位会被硬件置位。

使用特权

评论回复
6
jkl21| | 2023-10-17 16:00 | 只看该作者
在处理这种情况时,建议使用__HAL_UART_CLEAR_FLAG()函数来清除标志位。例如,当检测到帧错误时,可以使用huart->ErrorCode |= HAL_UART_ERROR_FE; 来标记错误。

使用特权

评论回复
7
dspmana| | 2023-10-17 16:14 | 只看该作者
这种状态被标记为UART_FLAG_FE。如果发生帧错误,那么需要通过软件序列将该位清零,即先读USART_SR,然后再读USART_DR。

使用特权

评论回复
8
mollylawrence| | 2023-10-17 17:35 | 只看该作者
通知应用程序发生了UART帧错误,应用程序可以根据具体情况决定如何处理这个错误。

使用特权

评论回复
9
lzmm| | 2023-10-17 18:04 | 只看该作者
如果在程序中启用了UART错误中断 ,并且存在帧错误,那么程序可能会卡在串口中断中无法继续运行。

使用特权

评论回复
10
dspmana| | 2023-10-18 22:52 | 只看该作者
需要清除中断标志位              

使用特权

评论回复
11
gygp| | 2023-10-22 10:33 | 只看该作者
当发生UART帧错误时,相应的UART中断标志位会被置位,用户可以在中断服务程序中处理这个错误。

使用特权

评论回复
12
kkzz| | 2023-10-22 11:27 | 只看该作者
调整UART的通信参数,例如波特率,数据长度,停止位等,以减少UART帧错误的发生。

使用特权

评论回复
13
BullTalented| | 2023-10-23 10:42 | 只看该作者
发生帧错误时,可以通过清零中断标志位的方式,使得程序从串口中断中跳出,恢复正常执行

使用特权

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

本版积分规则

2035

主题

7339

帖子

10

粉丝