在用單片機做電源控制時不得不提ADC采集,離散系統(tǒng)是有固定的執(zhí)行周期的,所以我們采樣也是要固定時間去采樣。然后就是我希望pwm波(定時器1產(chǎn)出)的頻率與采樣頻率一致。
我下面演示的是G431CBU6,當然其他芯片也大差不差了。
說一下大致流程,TIM1觸發(fā)ADC采樣,然后DMA把數(shù)據(jù)搬出來,在ADC中斷里處理DMA搬出來的數(shù)據(jù)。
ADC配置
首先口都是這個signal的。
這里記得用循環(huán)。不然你第一次數(shù)據(jù)才出來DMA搬完你還要再次使能DMA,太麻煩了。
Scan Conversion Mode:就是多通道模式。這里你要先完成下面的選擇轉(zhuǎn)換口數(shù)量才能enable。
一定不要使能連續(xù)轉(zhuǎn)換。我們的目的就是定時器觸發(fā),確定采樣周期,你用連續(xù)的話就是定時器觸發(fā)一次然后他就擱那一直轉(zhuǎn)了。
DMA肯定是要連續(xù)請求的。
這個轉(zhuǎn)換通道數(shù)目設(shè)定了你上面的scan(掃描模式)就是enable了。
觸發(fā)的話我這里選了捕獲,上升沿觸發(fā)。也就是tim1的通道1它輸出PWM波,它就會在pwm波的每個上升沿觸發(fā)ADC轉(zhuǎn)換。
就像上面這樣,我們是上升沿觸發(fā),也就是前面的地方觸發(fā),每個周期觸發(fā)一次。
然后就是下面的通道選擇了,它是默認都是channl1的,我經(jīng)常忘了選,導致我其他通道采不出來,檢查半天才發(fā)現(xiàn),其他通道沒配。
這里說一下其他的觸發(fā)。像上面的定時器1的三個捕獲就是分別對應tim1的三個通道。
tim3 trigger out event是下面的選擇。
update就是定時器計數(shù)滿后溢出產(chǎn)生觸發(fā)信號。
定時器配置
這里選輸出也行,不過記得是PWM,如果用輸出比較也行,但不好配置(為了方便直接PWM).
其他就是常規(guī)配置。那個觸發(fā)選擇就是上面說的,你看需要選擇。
如果要用那個觸發(fā),這里就要選這兩個觸發(fā)源了。
啟動?。。?/h3>
初始化文章來源:http://www.zghlxwxcb.cn/news/detail-789603.html
unsigned short AD_Value[3]; //存儲ad原始數(shù)據(jù)
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)AD_Value, 3);
TIM1->CCR1=1000; //50%
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); //用來觸發(fā)adc采樣
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,600);調(diào)占空比用這個也行。本質(zhì)都是操作寄存器。
中斷函數(shù)文章來源地址http://www.zghlxwxcb.cn/news/detail-789603.html
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
if(hadc->Instance==ADC1)
{
}
}
到了這里,關(guān)于【STM32】定時器1觸發(fā)ADC多(規(guī)則)通道采樣+DMA(CUBEMX配置)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!