项目场景:

当使用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

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐