日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

STM32 ADC 同步规则模式 ADC1与ADC2同用一个DMA

發(fā)布時間:2025/4/5 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32 ADC 同步规则模式 ADC1与ADC2同用一个DMA 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

STM32 ADC?支持同步規(guī)則模式 ,其官方解釋為:


大致意思就是通道組的 ADC1 的多路開關(guān)(由 ADC1_CTLR2寄存器的 ETSRC[2:0]決定), ADC2 被同步觸發(fā)。在 ADC1 或 ADC2 的轉(zhuǎn)換事件結(jié)束時,即 ADC1 或 ADC2 的規(guī)則通道轉(zhuǎn)換完畢,會產(chǎn)生一個 EOC 中斷。32 位 ADC1_RDTR 寄存器包含上半字(由 ADC2 轉(zhuǎn)換的數(shù)據(jù)構(gòu)成)和下半字(由 ADC1 轉(zhuǎn)換的數(shù)據(jù)構(gòu)成), 32 位的 DMA 被用來將 ADC_RDTR 中的數(shù)據(jù)傳送到 SRAM。

注意: 1, 不要在兩路 ADC 上轉(zhuǎn)換相同的通道(兩路 ADC 在同一通道轉(zhuǎn)換時采樣時間不可重疊)。

2.在同步模式下, ADC1 和 ADC2 同步采樣的兩個通道的需要設(shè)置為準(zhǔn)確的相同采樣時間


來個應(yīng)用例子吧:

// ADC1 做電流檢實時檢測
ADC_DeInit(ADC1,&ADC_InitStructure);
ADC_InitStructure.ADC_Mode = ADC_MODE_REGSIMULT;
? ? ADC_InitStructure.ADC_Mode_Scan = ENABLE; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 開啟多通道掃描模式
? ? ADC_InitStructure.ADC_Mode_Continuous = ENABLE;? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 連續(xù)模式
? ? ADC_InitStructure.ADC_Trig_External = ADC_EXTERNAL_TRIGGER_MODE_NONE;??
? ? ADC_InitStructure.ADC_Data_Align = ADC_DATAALIGN_RIGHT;
? ? ADC_InitStructure.ADC_Channel_Number = 4;??
? ? ADC_Init(ADC1,&ADC_InitStructure);?
ADC_RegularChannel_Config (ADC1,ADC_CHANNEL_2, 1, ADC_SAMPLETIME_7POINT5 );? // I
ADC_RegularChannel_Config (ADC1,ADC_CHANNEL_2, 2, ADC_SAMPLETIME_7POINT5 );? // I
ADC_RegularChannel_Config (ADC1,ADC_CHANNEL_2, 3, ADC_SAMPLETIME_7POINT5 );? // I
ADC_RegularChannel_Config (ADC1,ADC_CHANNEL_2, 4, ADC_SAMPLETIME_7POINT5 );? // I




// ADC2 做電流峰值,位置,溫度,電壓等檢測
? ? ADC_DeInit(ADC2,&ADC_InitStructure);
ADC_InitStructure.ADC_Mode = ADC_MODE_REGSIMULT;
? ? ADC_InitStructure.ADC_Mode_Scan = ENABLE; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 開啟多通道掃描模式
? ? ADC_InitStructure.ADC_Mode_Continuous = ENABLE;? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 連續(xù)模式
? ? ADC_InitStructure.ADC_Trig_External = ADC_EXTERNAL_TRIGGER_MODE_NONE;??
? ? ADC_InitStructure.ADC_Data_Align = ADC_DATAALIGN_RIGHT;
? ? ADC_InitStructure.ADC_Channel_Number = 4;??
? ? ADC_Init(ADC2,&ADC_InitStructure);??
ADC_RegularChannel_Config (ADC2,ADC_CHANNEL_1, 1, ADC_SAMPLETIME_7POINT5 );? // I-PEAK
ADC_RegularChannel_Config (ADC2,ADC_CHANNEL_3, 2, ADC_SAMPLETIME_7POINT5 );? // POS?
ADC_RegularChannel_Config (ADC2,ADC_CHANNEL_4, 3, ADC_SAMPLETIME_7POINT5 );? // NTC

ADC_RegularChannel_Config (ADC2,ADC_CHANNEL_5, 4, ADC_SAMPLETIME_7POINT5 );? // VDC


DMA_DeInit(DMA1_CHANNEL1);?
? DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_RDTR_ADDRESS;?
? ? DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)(Adc12Result);?
? ? DMA_InitStructure.DMA_DIR = DMA_DIR_PERIPHERALSRC;??
? ? DMA_InitStructure.DMA_BufferSize = BuffSize;
? ? DMA_InitStructure.DMA_PeripheralInc = DMA_PERIPHERALINC_DISABLE;
? ? DMA_InitStructure.DMA_MemoryInc = DMA_MEMORYINC_ENABLE;
? ? DMA_InitStructure.DMA_PeripheralDataSize = DMA_PERIPHERALDATASIZE_WORD;?
? ? DMA_InitStructure.DMA_MemoryDataSize = DMA_MEMORYDATASIZE_WORD;?
? ? DMA_InitStructure.DMA_Mode = DMA_MODE_CIRCULAR;?
? ? DMA_InitStructure.DMA_Priority = DMA_PRIORITY_MEDIUM;
? ? DMA_InitStructure.DMA_MTOM = DMA_MEMTOMEM_DISABLE;
? ? DMA_Init(DMA1_CHANNEL1, &DMA_InitStructure); ?

。。。。

ADC_SoftwareStartConv_Enable(ADC1,ENABLE);?
ADC_SoftwareStartConv_Enable(ADC2,ENABLE);

這樣DMA就直接讀取到兩個ADC同步轉(zhuǎn)換的結(jié)果了。



《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的STM32 ADC 同步规则模式 ADC1与ADC2同用一个DMA的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。