最近在调板子的时候又遇到了单片机MCU检测不到的问题,之前百度了一堆驱动问题,已经可以正常烧写程序,但是昨天又写不了了,连单片机都检测不到,将驱动器的RxD与TxD短接,使用串口助手自己给自己发送数字,是可以接收到的,证明仿真器没有问题,交换驱动器与单片机的RxD与TxD,从顺接改为交叉连接,还是不行。后来在一哥们的指导下解决了该问题。然后发 现一个小小的串口通信其实门道很多,特别是对于对单片机不熟悉的初级选手是个不小的挑战,所以今天跟小伙伴们聊聊我的感受。
我的问题概而论之就是对于CH340驱动不了解,这个USB转串口的小板直接百度就能有一堆东西,原理图芯片资料等一应俱全,这里就不做赘述。需要注意的其实是它上面的指示灯,它会加强你对类似问题的判断。一般来说仿真器指示灯有三个:PWR、TxD、RxD,当TxD或RxD给低电平时,对应的指示灯亮,高电平时不亮。
当单片机与仿真器进行通信时(烧写程序或者检测MCU),二者会完成一收一发。按下检测MCU时,TxD的指示灯会亮,此时仿真器的TxD在给单片机的RxD发送一个低电平,单片机检测到电源的断电和上电后(我的理解是下降沿上升沿双触发),会在单片机的TxD先拉高,再给低,仿真器的RxD检测到以后,TxD与RxD又恢复高电平。在进行MCU检测时的表现就是:仿真器的TxD指示灯会亮,此时断电上电触发后,仿器的RxD指示灯会闪一下,随即TxD和RxD指示灯都灭。
我当时的问题是仿真器的RxD常亮,从插上USB后的一系列操作都是亮的,这说明单片机的TxD一直就是给的低电平,而没有被拉高过,我调的板子里是有modbus模块的,modbus对应的RxD与TxD是与单片机接在一起的,而当时连接用的跳线帽是插着的,所以最后的结果就是modbus模块在捣鬼,它把单片机TxD本该给仿真器RxD的高电平给夺走了,导致仿真器的RxD无法被拉高,因此检测MCU总是失败,也就无法烧写程序,去掉跳线帽后MCU检测成功完成。
在我解决这个问题的过程中遇到的第二个问题就是单片机和仿真器的RxD和TxD接反了。现在市面上有些仿真器是考虑到了对接问题,标记的时候就是仿真器的RxD对应单片机的RxD,仿真器的TxD对应单片机的TxD,而有些则是要交叉连接的,这个问题主要看标记RxD和TxD的时候是站在什么角度标记的,百度也是一大堆资料,这里就不做赘述了。至于实际中,我怎么知道这个仿真器RxD和TxD应该顺着接还是交叉接,前面的内容已经可以解答你了:单独插上仿真器,点击检测MCU,看哪个灯亮,那么这个灯对应的就是TxD,另一个不亮的就是RxD咯,至于常亮的红色灯PWR忽略掉就可以咯。
这么看来我遇到的问题很简单,但是在这个过程中,我认为这种排除故障的思路是很值得学习的,一开始我根本就没有没有注意到去看仿真器的指示灯,也不知道这几个灯是干嘛使的,所以一头雾水,也不知道从何查起。相信每一个有过调板子经历的人都知道下载软件驱动器光是版本就能折腾地人想自杀,所以就更不应该在硬件问题上浪费时间和精力,希望我的精力能够对大家有所帮助。