|
最近在學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
|
|