问题17:串口通信实验无法收发数据
最后更新时间:2024.6.8
问题原因
一般是接线或者程序错误
解决方法
请按照以下流程依次排查问题。
1. 首先直接下载视频资料里提供的现成程序,不要用自己对照视频写的程序,排除程序问题的影响。
这里以“9-2 串口发送+接收”这个程序为例进行演示,这个程序包括串口的发送和接收,可以测试硬件是不是正常。
![img](img/p1-17-1.jpg)
“9-2 串口发送+接收” 程序
下载“9-2 串口发送+接收”这个程序到STM32中,之后打开视频资料里提供的串口助手(尽量用视频资料提供的串口助手,因为这个串口助手功能比较简单,不容易出现配置问题)。按照下图的配置(串口号可能不同,波特率为9600,发送和接收区均配置为HEX模式),发送一个数据,检查接收区能不能正常收到。
![img](img/p1-17-2.jpg)
串口助手使用流程
如果视频里的程序没问题,自己对照写的程序有问题,那就明确了是程序的问题。这时可以用替换测试的方法检查,也就是将有问题的程序分块替换为没问题的程序,直至完全一样。每替换一部分,都下载验证一下,在这个过程中,肯定能定位问题的位置。之后检查此位置,一般就能发现问题。
如果视频资料里提供的现成程序也不行,那就说明是硬件的问题,再进行后续的排查。
2. 对照下图,检查硬件接线是不是正确。
![img](img/p1-17-3.jpg)
串口通信接线注意事项
3. 如果排除了以上描述的程序问题和接线问题,还是无法进行串口通信,则可以单独检查STM32和CH340串口模块两部分电路是不是正常。
首先单独测试CH340串口模块,按照下图方法,将TXD和RXD直接短接在一起(一定要带线测试,防止杜邦线断路的情况)。然后,电脑端打开串口助手,随便发一个数据,进行自发自收测试。如果CH340串口模块没问题,则串口接收区会显示发送区发出的数据。如果测试不成功,可以换3根杜邦线继续测试,看看是不是杜邦线断路。
![img](img/p1-17-4.jpg)
TXD和RXD短接,自发自收单独测试CH340模块的好坏
之后单独测试STM32部分,按照下图,修改“9-2 串口发送+接收”的程序,在while循环里,不断发出测试数据,如果STM32能收到自己发的测试数据,则会将其显示在屏幕上。
![img](img/p1-17-5.jpg)
修改“9-2 串口发送+接收”的程序
按照下图,将STM32的PA9和PA10直接短接在一起,对STM32的串口也进行自发自收的测试。如果STM32能成功自发自收,则屏幕上会显示收到的测试数据。
![img](img/p1-17-6.jpg)
PA9和PA10短接,自发自收单独测试STM32的好坏
如果CH340串口模块和STM32都能自发自收测试成功,那么再将两者接到一起,应该就能够进行串口通信了。
4. 最后额外说明,“9-4 串口收发文本数据包”这个程序,在串口助手发送时,一定要注意操作。有很多同学都是操作不对,导致STM32不能正确收到数据包。注意事项如下图所示。
![img](img/p1-17-7.jpg)
“9-4 串口收发文本数据包” 程序测试注意事项
< 返回