昨天碰到一个UART0的发送和接收失效问题:http://www.wch.cn/bbs/thread-73671-1.html
今天我终于搞明白UART0失效的原因了,我的板子上带USB接口,用USB取电的然后通过USB的5V电源给锂电池充电IC充电,整个系统靠单节4.2V锂电池供电,4.2V通过LDO被降压到3.3V给CH573供电(内置DCDC未启动,VSW短接到VDCID,同时我把RST脚复用成PWM输出了)
因为当前是测试阶段所以犯懒根本没接锂电池,直接靠着USB到锂电池充电IC的电连接到LDO,然后LDO输出3.3V给CH573(这种状态肯定是不太稳定,但是讨论当前遇到的硬件问题应该可以当做特殊情况分析)
我发现只要把板子的USB接在某个特定的手机充电器上,CH573可以启动,蜂鸣器,一路PWM,USB协议层全都正常,偏偏就是UART0的TX和RX失效了
如果不用那个充电器换示波器上的USB口给这个板子供电,那么CH573的UART0发送和接收就正常了。(我的手机充电器供电时到示波器接地接好了,因为只要用这个手机充电器供电,板子上的PWM输出波形可以用示波器测试到,但是UART0的TX脚拉高没输出)
感觉应该是上电不稳定导致573内部乱了,我强制加了延迟,然后在UART0的模块程序初始化时再次开启UART0电源PWR_PeriphClkCfg (ENABLE, BIT_SLP_CLK_UART0)但是依旧不能解决问题
虽然我这样使用芯片肯定是不太靠谱的,次项目后续产品插上电池后应该也不会存在这种情况。但是希望厂家重视这个问题,这应该是上电不稳定导致芯片内部彻底全都乱了,部分模块根本没有运行起来,但是其他部分却是正常运行,这种状态很可怕。希望厂家后续更新内核的上电引导程序/或者增加BOR监视程序,解决这个问题。
这个问题不仅出现在特殊充电器,连某一台笔记本的USB口同样会导致仅仅UART0失效,但是USB的HID,PWM,ADC采样其他功能全正常。
=====================================
刚才发现个特别奇葩的问题,我用锂电池给板子上电,测试UART0的TX正常输出,只要USB插上那个搞事的充电器,TX立刻拉高,再也没有数据输出了