总结一下今天在调试UART的时候,遇到的问题和解决过程。
在工作中使用了两路UART,一路用于Debug,一路用于通信。
通信UART接的是Sub板,通信UART配置为:TX推挽输出,RX浮空输入,在中断里接收和发送,按照这样的配置,UART也能够正常的进行数据的数据的收发;按照此配置来配置UART2,然后使用USB转串口模块连接板子和PC,结果发现程序有时候可正常运行,有时候不能正常运行,这就玄了,起初怀疑是仿真器下载出错、复位电路异常等原因。结果一一排查也得不到事情的原委,后来在KEIL里仿真查询得知程序不能正常运行是因为一直跑到Debug串口中断里出不来了。
在配置完Debug和通信的UART后,在程序中查看断点,发现Debug的UART的RX脚为低电平,而通信UART的RX脚为高电平,两个UART一样的配置,为啥初始化后引脚电平不一致呢?经过仔细查看,原来在Sub板端,将UART的两个引脚上拉了,因此可以正常通信;而用于Debug的UART的两个引脚并没有外部电路,而是直接接在USB转串口模块上。原来如此,Debug的UART的RX脚设为浮空输入状态,在连接了USB转串口模块以后,还能正常通信,当拔掉USB转串口模块时,由于RX脚为浮空输入,电平状态为低,而UART又是在中断里收发数据的,由于RX状态的不稳定使得UART的接收中断被误触发,一直跑到UART中断里去了。
得知原因之后,统一把UART的RX引脚配置为上拉输入状态,按照此配置后,UART终于可以正常工作了,软件也不会跑异常了。终于明白了在硬件设计中给UART的两根线加上拉电阻的我必要性了。