UART接收异常
用uart2与移远的EC20模块通讯,打log发现初始化失败。
将TTL转USB工具的RX口接到uart2的RX口监控,发现初始化正常了!!!
将uart2的RX引脚由浮空输入改为上拉输入后,一切都正常了!
默认接收引脚为浮空输入
/* rx pin initialize */
GPIO_InitStruct.Pin = rx_pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(rx_port, &GPIO_InitStruct);
更改接收引脚为上拉输入
/* rx pin initialize */
GPIO_InitStruct.Pin = rx_pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(rx_port, &GPIO_InitStruct);
原因分析
因为RX不上拉,悬空的话,电路的某些信号影响(比如射频,大功率器件),就容易误触发,进入接收中断。改成上拉就可以解决。
而当RX脚转USB接到电脑的时候,RX再也不是悬空状态,也就不容易误触发接收中断。