一、问题现象
由于前面STM32f103c8t6缺货,项目上的单片机临时替换为GD32,但是库函数什么的用的还是STM32的。项目中使用了ADC+DMA对氧气传感器进行采样,后来发现氧浓度在80%时,氧浓度会出现偶尔卡顿十几秒的情况,但是在90%,50%浓度测试就没有这个问题。
二、问题解决
网上搜索类似问题,发现有网友提到是GD32 ADC设计缺陷导致,将ADC时钟频率调低(即预分频改为DIV8)问题就解决了。经过测试问题确实得到了解决。
参考链接https://blog.csdn.net/world9999/article/details/131880773
三、问题原因分析
根据资料https://blog.csdn.net/zhoucheng97/article/details/105887153所述,STM32的ADC转换时钟不能大于14MHz。STM32F103c8t6最高时钟频率为72MHz,而GD32为108MHz。
72MHz进行6分频小于14MHz,而108MHz进行6分频大于14MHz,进行8分频之后就满足小于14MHz。
据此猜测,大概率是由于GD32的速度比STM32高,而两者内核又是一样的,从而导致了这个问题。