记录一次串口通信过程遇到的问题,接上USB转串口调试,单片机数据接收就正常,不接数据就不正常
1.【场景描述】
单片机和模组通过串口通信,二者的连线如下图图一所示;模组发送数据给单片机时,单片机的数据接受不全
2.【问题复现】
当通过串口调试助手的Rx引脚接入到电路中,如下图图2所示,模组发送的数据单片机能正常接收
或者直接通过USB转串口的Tx给单片机发送数据,单片机接收也无误
3.【问题定位】
- 通过万用表测试,USB转串口的的Rx引脚,默认值为 3v3 高电平
- 是不是上拉能起到作用?
4.【问题解决】
如下图图3所示,将二者的Tx和Rx连线出用3V3和电阻上拉,经测试问题得以已解决
5.【问题分析】
怀疑是模组的Tx引脚输出的电平不足,从而单片机提前认为是停止位到来导致数据接受不全
净接示波器测试,模组Tx引脚的输出数据的电平值在2V2左右
6.【最终问题定位】
问题出现的原因是:模组和MCD串口引脚电平不匹配
6.1 模组引脚驱动电平
首先,单片机和模组的都是3V3供电,模组的数据手册中描述如下:
模块的 UART 电平为 1.8 V。若 MCU 电平为 1.8 V, MAIN_TXD 与 MCU 的 RXD 直连时,模块的
MAIN_TXD 需接 10 kΩ 电阻上拉至 1.8 V,防止在模块处于休眠模式时 MCU 收到误码信息。
若 MCU 电平为 3.3 V,则需在模块和 MCU 的 UART 连接中增加电平转换电路。
电平转换电路参考设计:
6.2 单片机引脚驱动电平
单片机的硬件设计手册中如下图所示,单片机端口识别高电平的最小值为 0.7VCC
即:3.3*0.7 = 2.31 V
然而模组的引脚驱动电平为1.8V,实测用示波器显示2.2V左右。
因此当模组输出1时,电平在1.8V左右,而单片机的识别高电平的最小值为 2.31V,二者驱动电平不匹配,造成了上述问题