一个台湾某32位MCU的奇葩串口调试过程

来源:互联网 发布:产业地产盈利 知乎 编辑:程序博客网 时间:2024/06/17 13:29

近期,设计了一个基于台湾某32位MCU的带蓝牙功能的PCB,其它的部分都搞定了,唯独这个串口死活不通。我使用的蓝牙模块与MCU之间以串口通信。编写了一个简单的测试程序,然后仿真,发现只要运行到设置串口参数的语句(该语句使用了库函数的)处,再执行就跑飞了。WHY?确认看门狗已经关闭。然后怎么都无法运行正常。将改行程序屏蔽,再次仿真,没有串口时,运行OK,确认是这条语句的问题,可是,为什么是这条语句呢?经过仔细检查,发现有时能运行到串口中断程序中,可是,我没有开启串口中断和总中断!检查发现串口的RXD引脚是低电平。我就哔了狗了,玩过这么多单片机,没有见过哪个的RXD引脚的IDLE状态是低电平的!串口是低电平,表示有数据,难怪一直进入接收中断,由于串口与输入输出接口复用,我启动了内部上拉电阻,可是这个电阻太大,75K,导致输入电压达不到高电平,0.7*VDD。无奈,我禁止了内部上拉电阻,在RXD和TXD引脚外部各接了一个4.7K的上拉电阻,再次运行程序,不会跑到中断程序了。又仔细看了手册,发现这个串口的中断触发条件是可以设置的。默认是发送和接收缓存为空时执行中断服务程序。我把它设置成发送完一个字节或者接收到一个字节后才能触发中断。现在程序不会乱跑了。可是还有一个问题,就是波形不标准,导致逻辑分析仪识别数据帧错误。这个估计只能先换个比较准确的晶振试验下了。

官方提供的资料也很奇葩,库函数中有使用指南中没有提到的函数,使用指南中也有库函数中没有的函数。使用的开发环境和不知道从哪里整的一个垃圾仿真器,动不动就掉线,卡死。我也是醉了



原创粉丝点击