STM32F030F4P6多通道ADC DMA采样数值为4095问题总结
[复制链接]
本帖最后由 zhouguoping 于 2020-1-15 10:55 编辑
最近调试STM32F030F4P6多通道ADC DMA定时触发采样时,碰到鬼了!此鬼折腾了我2天多的时间总算得出结论。
电路原理图:
现象描述:
PA0,PA1外接2路模拟量,PA2,PA3当UART TTL电平使用,然后启用DMA 2通道定时器1的TRGO触发采样。第一版板子都调试成功了,第二版稍微修改了一下板子尺寸,元器件布局之类的,总之,原理上就将LED从PA4移到了PA5,其他都没有动。然后焊接板子调试,奶奶的,见鬼了!PA0接了其他传感器,PA1接了个TMP36,DMA缓存数组0的值(接其他传感器的值)正确,1的值(TMP36)为4095。
捉鬼过程:
1、测硬件,VCCA=3.28,VCC=3.28,REST=3.3V。么发现问题,因为板子元器件密度比较大,怀疑是不是底线没接好?因地线是走线加覆铜,而电源线专门走的20mil的线,么得怀疑。然后地线飞了两个线后问题依旧!
2、查代码,没发现啥问题。因使用IAR开发,FLASH的15扇区留作存参数,FLASH容量不够用了,将优化级别设置为Medium,怀疑是不是程序优化带来的问题?然后精简程序,想将优化级别改为Low,但是怎么折腾还是没达到目的,最后将串口部分功能注视掉,优化级别设置为Low,问题依旧!
3、修改代码中的怪相:将ADC_ChannelConfig(ADC1, ADC_Channel_0, ADC_SampleTime_55_5Cycles);中的ADC_SampleTime_55_5Cycles改为ADC_SampleTime_1_5Cycles,通道1的值不再是4095,但还是与外部测量的电压值对不上,比如0.8V的输入,缓存数组1里面的值是1600左右,后来发现,将通道转换时间或者是ADC的CLK调整的越高,采样值越低,越慢采样值越大。
4、因之前代码板子都是好的,并且之前的板子上的元器件已经拆到新板子上了,也就没法对比?第二天早上再搜网页,发现一网友也见过此鬼!“STM32F030的ADC严重问题”。原文连接 https://bbs.eeworld.com.cn/thread-464556-1-1.html 豁然想起也用示波器测测看,发现TMP36的信号线上叠加了一个2us的方波,而且将与电脑的RX拔掉就没了,再测RX线是5V的TTL电平,问题应该就在于这个5V的TTL电平吧?然后给5V的RX线中串接一个10K的电阻,一切正常了。这就是问题的结局。
问题回顾:
第一版用的是自制的3.3V TTL与电脑通信,故一切OK!第二版直接采用USB转232 TTL(TTL为5V电平,未测,之前不知)
疑惑:
PA4管脚的电平不对?为什么影响到了PA1?为什么么有影响到PA0?再说PA4都配置为UART管脚了,怎么又牵扯到芯片内部的模拟量的东东(当然完全没关系估计是不可能的!)?这么说来,那通信之类的干扰岂不是对模拟量影响很大?难道不是芯片的BUG?
|