(资料图片)
技巧一:
笔者在调试某Cortex-M3内核单片机时遇到一个问题,此单片机不具备在线仿真功能,因此调试代码时只能使用UART输出Log的方式调试。调试过程中发现串口模块会影响单片机启动,进入死机状态,没有任何响应。
取下串口模块,然后给单片机加电可以正常启动,看来是串口模块引入了某种干扰。使用排除法,依次拔掉TX、RX,发现RX不会导致死机,拔下TX时可以正常启动,插上TX启动失败(TX和RX指的串口模块)。如果先给单片机供电,然后插入串口TX则正常运行。思来想去,应该是串口模块的TX驱动能力较强,当单片机没有供电时,串口模块的TX给单片机提供了部分电力,这部分电力不能使单片机正常工作,但是使他进入某异常状态,此时即使给单片机加电也不能正常工作。UART的TX在没有数据传输的时候输出高电平,有一定的驱动能力,有时候不可小觑。
为了解决此问题增加一个二极管,预留一个上拉电阻,如下图所示:
当串口模块的TX输出0时,二极管导通,二极管正极被拉低,也就是单片机的RX拉低,单片机收到0。当串口模块的TX输出1时,二极管截止,单片机的RX被内部上拉电阻拉高,二极管正极最好预留一个上拉电阻。二极管最好选择正向压降小,开关速度快的肖特基二极管。
技巧二:
我司某款产品使用串口进行芯片间通讯,通讯协议采用一问一答的方式,即双方不会同时发出数据。我们在调试某项功能时需要监听记录串口数据包,然后通过数据包分析问题,通常情况使用两个串口模块分别监听TX和RX,可是这次数据量有点大,使用两个串口模块截取数据,组合到一起很困难,于是乎设计了以下小电路,使两条串口线的数据转移到一条线上去,然后使用串口模块接收。两个二极管相当于一个“与门”,预留一个上拉电阻。
这种方式只适合一问一答的通讯方式,即双方不会同时发出数据,如果双方同时发出数据,接收就会混乱。
标签: