打印
[STM32F4]

STM32F407串口接受多了几个字符

[复制链接]
475|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
封存into|  楼主 | 2025-2-26 22:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 封存into 于 2025-2-26 23:00 编辑

用STM32F407通过USART1收发数据。在接受中断中判读数据并逐个接收并放在一个数组中。PC发送的每个字符都能正确接收,问题是在数组的第一个字节或最后一个字节收到了一个随机字符。
这个字符有时是00,有时是0F或其他数据,没有规律。
程序中使能接受中断__HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE)
串口配置为115200
多出来的字符是哪里来的?

使用特权

评论回复
沙发
江河千里| | 2025-3-23 01:12 | 只看该作者
UART接收中断中,如果没有正确清除接收标志位(如RXNE),可能会导致重复读取数据或读取错误数据

使用特权

评论回复
板凳
一秒落纱| | 2025-3-23 02:41 | 只看该作者
一般需要清楚标志位的,在接收中断服务函数中,确保读取数据寄存器(USARTx->DR)以清除RXNE标志位

使用特权

评论回复
地板
远山寻你| | 2025-3-23 03:13 | 只看该作者
如果使用HAL库,HAL_UART_IRQHandler会自动处理标志位,但如果你自己编写中断服务函数,需要手动清除

使用特权

评论回复
5
暖了夏天蓝了海| | 2025-3-23 04:35 | 只看该作者
如果数组索引未正确管理,可能会导致写入数组时越界,从而覆盖其他内存区域或读取到随机数据

使用特权

评论回复
6
光辉梦境| | 2025-3-23 05:38 | 只看该作者
建议啊,确保数组索引在每次接收后正确递增,并在达到数组长度时重置或停止接收

使用特权

评论回复
7
三生万物| | 2025-3-23 06:15 | 只看该作者
如果数组未初始化,可能会包含随机数据。当接收数据未完全覆盖数组时,未覆盖的部分会显示为随机值。在定义数组时初始化所有元素为0,这样就好了

使用特权

评论回复
8
淡漠安然| | 2025-3-23 07:16 | 只看该作者
如果硬件电路存在噪声或干扰,可能会导致UART接收到错误数据。其实你这边可以查硬件电路,确保UART信号线(RX/TX)没有受到干扰

使用特权

评论回复
9
别乱了阵脚| | 2025-3-23 08:26 | 只看该作者
建议可以使用示波器观察UART信号,确保信号质量良好。这样就可以知道是干扰还是程序问题了

使用特权

评论回复
10
夜阑风雨| | 2025-3-23 09:17 | 只看该作者
如果STM32的波特率与PC端波特率不匹配,可能会导致接收错误数据

使用特权

评论回复
11
冰春彩落下| | 2025-3-23 10:46 | 只看该作者
我觉得,如果接收数据过快,而中断处理不及时,可能会导致接收缓冲区溢出,从而丢失数据或接收到错误数据

使用特权

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

本版积分规则

23

主题

60

帖子

0

粉丝