关于STM32F030K6T6用DMA传输ADC采样值问题

2019年02月20日 15:38    发布者:xunavc

  最近在学STM32F0芯片,在网上看到一个网友用DMA传输ADC采样值,并用tiM15间隔触发ADC的思路,觉得不错想把他的代码移植一下,由于我用的是STM32F030K6T6,与网友的芯片不一样,网友做的是三路连续采样,而我的硬件电路采样点只有一个,就是采样外部锂电池电压,锂电池电压约4.1v,用两个10K电阻串联分压,PA3采样分压电压(,图片上是两个100K,由于ADC采样电流的问题后将100K调整成10K),于是准备将通道17(Vref)加进来,也就是用DMA传输2路,后串口打印仿真发现采样值不正确,看规格书发现这句代码配置ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward 的解释是:向前扫描 ( 从 CHSEL0 到 CHSEL16)  ,那这样可能采样不到通道17上面,将采样2路的想法放弃,于是又只单采样一路再打印值为97,为简单验证是否正确,用芯片供电电压3.3V加到采样通道PA3上,打印值为255,这样肯定采样不对,因我配置的是12位采样(DC_InitStructure.ADC_Resolution =   ADC_Resolution_12b),理论值应该在4095左右,反复查询代码找不到问题,后来发现255这个参数好是配置8位采样的理论值,于是又将采样配置成8位,串口打印150,在PA3上加3.3v也是255,这样3.3V*150/255的结果是1.92V,至此排除误差,感觉ADC采样正确。
  做这个实验我已经花了很多时间和精力,我不知道是不是因为只有一个ADC通道还配置DMA传输的问题,如果多几个通道(0-16)可能不会这样,能成功配置成12位采样,能力有限,请大神们帮忙指导一下,谢谢!
    芯片STM32F030K6T6 http://www.dzsc.com/ic-detail/9_450.html的特点
  系列:STM32 F0
  核心处理器:ARM Cortex-M0
  核心尺寸:32-位
  速度:48MHz
  连接性:IC,SPI,UART/USART
  外设:DMA,POR,PWM,WDT
  I/O数:26
  程序存储容量:32KB(32K x 8)
  程序存储器类型:闪存
  RAM容量:4K x 8
  电压-电源(Vcc/Vdd):2.4 V ~ 3.6 V
  数据转换器:A/D 12x12b
  振荡器类型:内部
  工作温度:-40°C ~ 85°C(TA)
  湿气敏感性等级(MSL):3(168 小时)
  封装/外壳:32-LQFP