二.问题排查与锁定
首先确认下利用环境:在调试测试的时候,产品链接着JLINK,因此经由反复测试,创造几个征象:
1.数据较短时不去世机,比如只读5个寄存器,少量写入也不去世机;一次性读取较多寄存器100%去世机。
2.给产品供电的开关电源换成带接地线的不去世机,调试的时候连接了JLINK共地,因此也没去世机。

总结起来便是:只要电源不接地,一次性读取大量寄存器就去世机,该产品用ST的芯片大批量生产利用了5年以上,从未涌现过此类问题。
三.问题剖析:从各个方面来看,这个问题都该当是硬件的问题,问题该当和电源以及485通信有关,但无法调试,由于不论是在线调试,还是用示波器查看,都要首先公地,电脑和示波器都是接地的,因此连接后,不会涌现任何问题。
因此打算直接改利用哀求,采取带接地线的开关电源,本钱有一定增加,但也相对更安全。但我以为改硬件并不是最优解,尤其是涉及到利用现场重新布线;最优解该当是软件上来优化。
根据前面测试创造的问题以及履历来推断,这个问题更多的是通信滋扰导致,比如非常多的串口中断,导致MCU无法退出中断;如果是此问题,那该当跟串口的输入输出配置关系比较大,排查到的IO口配置函数如下:
该函数由官方示例程序移植过来,只调度了波特率,整体配置与ST相似。
下面是ST的串口配置
IO口的上拉设置均为启用,那如果启用上拉电阻提高IO口的抗滋扰能力,能不能避免骚扰旗子暗记的影响呢?
我试着把
gpio_config_struct.gpio_pull = GPIO_PULL_NO_PULL;
改为
gpio_config_struct.gpio_pull = GPIO_PULL_PULL_UP;
编译测试OK。
超长数据读取测试OK。
电源不接地也不去世机。
到此终于办理了这个小问题,想在国际芯片大厂断货,大量工程师开始转用海内的MCU,虽然很多号称100%兼容ST,但真正落实到项目,还是要多加测试,很多方法在ST上没问题,在国产MCU上却不一定。