stm32L496, 串口字节中断接受,遇到的问题的是,每次上电串口初始化后,还没有接受到数据的时候,中断就进入,接受一个0x00的数据。
解决办法:
将RX引脚上拉就可以了。
原因:我们设计的电路是:

推荐的电路:

你的 USART3 RX 引脚在初始化完成到真正开启接收中断之间,处于浮空或弱下拉状态 。一旦外部有轻微噪声或 RS485 芯片输出不稳定,这个引脚就可能被拉低,UART 硬件检测到下降沿就认为是一个起始位,从而"接收"到一个 0x00。
改成上拉后:
-
RX 引脚在空闲时被强制拉高到
3.3V -
UART 检测到高电平 = 空闲状态,不会误触发起始位
-
上电后的第一个"假"
0x00因此消失
这个问题的本质是 STM32 的 UART 对 RX 引脚电平非常敏感,只要空闲时不是确定的高电平,就有可能误触发。解决方案优先级:
-
软件上拉(你已实现)------ 最简单,零成本
-
硬件上拉电阻(如 4.7k~10kΩ 接 VCC)------ 更可靠,抗干扰更强