一、背景
在STM32中的AD的單通道采樣中可以設置成單次轉換模式和連續轉換模式,如何理解這兩個轉換模式的區別,通過程序又是怎樣實現的?
二、正文
首先理解單次轉換模式,即ADC進行單次轉換(單樣本)的單通道X(參見圖1。)並停止轉換完成后。
連續轉換模式,即ADC在常規信道轉換中連續地、無限地轉換單信道,如下圖所示。
在STM32的ADC庫函數中主要由 ADC_InitStructure.ADC_ScanConvMode = DISABLE; 來決定AD采集工作在單次轉換模式(DISABLE)或者是連續轉換模式(ENABLE)。而我在程序中是設置單次轉換模式,按照單次轉換模式的理解應該只轉換一次,但運行主程序后卻一直可以采集出數據。
//設置指定ADC的規則組通道,一個序列,采樣時間
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADC通道,采樣時間為239.5周期
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的軟件轉換啟動功能
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待轉換結束
return ADC_GetConversionValue(ADC1); //返回最近一次ADC1規則組的轉換結果
經過看數據手冊ADC的寄存器如下所示,
發現主程序每次循環后AD采集都會進行開始轉換通道的開啟,即這個函數ADC_SoftwareStartConvCmd(ADC1, ENABLE); 所以是采集結束后循環一次之后又開始采集。當我把這個函數ADC_SoftwareStartConvCmd(ADC1, ENABLE); 放到ADC的初始化中就到發現只采集一次。
另外,當我把這個函數ADC_SoftwareStartConvCmd(ADC1, ENABLE); 放到ADC的初始化中,並且把AD采集工作模式更改為連續轉換模式,
即是
ADC_InitStructure.ADC_ContinuousConvMode =ENABLE;可在主程序中看到AD一直是連續采集的。
以上分析在程序中可明顯區分出單次和連續轉換模式。
----2017-2-9 深圳Aplex—Yang