项目场景:

当使用gd32开发产品。当串口0、1、2、3无法满足,就需要使用拓展串口3和4了。


问题描述

       当使用gd32开发的时候,发现串口0、1、2都没问题。但如果使用了串口3,并且打开了中断,当串口3收到数据的时候,神奇的事情发生了:软件自动重启复位,然后跑了一遍后就飞了。调试工具也调不出来


原因分析:

我的猜测如下:

1.  uart和usart的初始化方法不一样

2.  uart的tx要禁用掉,否则影响rx

3.  外部未接上拉和滤波

4. 编不下去了,反正我试了很多方式都没成功,也忘记猜了多少种了


解决方案:

将rx修改为软件读取标志位,是可以的。不要打开中断

终极方案:

我的芯片是GD21F103VET6,属于HD产品。但之前的工程是CT型号,属于MD产品,所以启动文件startup_gd32f10x_xd.s这里就选错了,md的文件没定义uart3和4的中断,当然跑飞了。换成HD文件就好了。

期间被一篇文章点醒了一下
STM32移植RISC-V常见中断向量表配置错误_编程语言-CSDN问答

总结:

不能太粗心,也不能全移植了,要看一下合不合适。这个bug找了两天才发现。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐