单片机串口模块调试方法

控制/MCU

1883人已加入

描述

技巧一:

笔者在调试某Cortex-M3内核单片机时遇到一个问题,此单片机不具备在线仿真功能,因此调试代码时只能使用UART输出Log的方式调试。调试过程中发现串口模块会影响单片机启动,进入死机状态,没有任何响应。

取下串口模块,然后给单片机加电可以正常启动,看来是串口模块引入了某种干扰。使用排除法,依次拔掉TX、RX,发现RX不会导致死机,拔下TX时可以正常启动,插上TX启动失败(TX和RX指的串口模块)。如果先给单片机供电,然后插入串口TX则正常运行。思来想去,应该是串口模块的TX驱动能力较强,当单片机没有供电时,串口模块的TX给单片机提供了部分电力,这部分电力不能使单片机正常工作,但是使他进入某异常状态,此时即使给单片机加电也不能正常工作。UART的TX在没有数据传输的时候输出高电平,有一定的驱动能力,有时候不可小觑。

Cortex-M3

为了解决此问题增加一个二极管,预留一个上拉电阻,如下图所示:

Cortex-M3

当串口模块的TX输出0时,二极管导通,二极管正极被拉低,也就是单片机的RX拉低,单片机收到0。当串口模块的TX输出1时,二极管截止,单片机的RX被内部上拉电阻拉高,二极管正极最好预留一个上拉电阻。二极管最好选择正向压降小,开关速度快的肖特基二极管。

技巧二:

我司某款产品使用串口进行芯片间通讯,通讯协议采用一问一答的方式,即双方不会同时发出数据。我们在调试某项功能时需要监听记录串口数据包,然后通过数据包分析问题,通常情况使用两个串口模块分别监听TX和RX,可是这次数据量有点大,使用两个串口模块截取数据,组合到一起很困难,于是乎设计了以下小电路,使两条串口线的数据转移到一条线上去,然后使用串口模块接收。两个二极管相当于一个“与门”,预留一个上拉电阻。

Cortex-M3

这种方式只适合一问一答的通讯方式,即双方不会同时发出数据,如果双方同时发出数据,接收就会混乱。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分