STM32F4 adc dma多通道採集

2021-08-28 08:13:43 字數 3459 閱讀 6308

這裡使用stm32f407實現adc的多通道採集,使用的感測器為灰度感測器與紅外感測器,在面放出**,具體的解釋在注釋中都寫的很詳細。

感測器的io口配置

void dma_gpio_config()

adc初始化配置

void dma_adc_config()

dma各通道配置

//dmax的各通道配置

//這裡的傳輸形式是固定的,這點要根據不同的情況來修改

//從儲存器->外設模式/8位資料寬度/儲存器增量模式

//dma_streamx:dma資料流,dma1_stream0~7/dma2_stream0~7

//chx:dma通道選擇,@ref dma_channel dma_channel_0~dma_channel_7

//par:外設位址

//mar:儲存器位址

//ndtr:資料傳輸量

void dma_config(dma_stream_typedef *dma_streamx, u32 chx, u32 par, u32 mar, u16 ndtr)

else

dma_deinit(dma_streamx);

while (dma_getcmdstatus(dma_streamx) != disable){} //等待dma可配置

/* 配置 dma stream */

dma_initstructure.dma_channel = chx; //通道選擇

dma_initstructure.dma_peripheralbaseaddr = par; //dma外設位址

dma_initstructure.dma_memory0baseaddr = mar; //dma 儲存器0位址

dma_initstructure.dma_dir = dma_dir_peripheraltomemory; //儲存器到外設模式

dma_initstructure.dma_buffersize = ndtr; //資料傳輸量

dma_initstructure.dma_peripheralinc = dma_peripheralinc_disable; //外設非增量模式

dma_initstructure.dma_memoryinc = dma_memoryinc_enable; //儲存器增量模式

dma_initstructure.dma_peripheraldatasize = dma_peripheraldatasize_halfword; //外設資料長度:8位

dma_initstructure.dma_memorydatasize = dma_memorydatasize_halfword; //儲存器資料長度:8位

dma_initstructure.dma_mode = dma_mode_circular; //使用普通模式

dma_initstructure.dma_priority = dma_priority_medium; //中等優先順序

dma_initstructure.dma_fifomode = dma_fifomode_disable;

dma_initstructure.dma_fifothreshold = dma_fifothreshold_full;

dma_initstructure.dma_memoryburst = dma_memoryburst_single; //儲存器突發單次傳輸

dma_initstructure.dma_peripheralburst = dma_peripheralburst_single; //外設突發單次傳輸

dma_init(dma_streamx, &dma_initstructure); //初始化dma stream

dma_clearflag(dma2_stream0,dma_it_tc);

dma_itconfig(dma2_stream0,dma_it_tc,enable);

nvic_initstructure.nvic_irqchannel=dma2_stream0_irqn;

nvic_initstructure.nvic_irqchannelpreemptionpriority=0x01; //搶占優先順序

nvic_initstructure.nvic_irqchannelsubpriority=0x01; //響應優先順序

nvic_initstructure.nvic_irqchannelcmd=enable;

nvic_init(&nvic_initstructure);

while (dma_getcmdstatus(dma2_stream0) != disable){}

dma_cmd(dma2_stream0, enable);

}

整體的配置函式

void mydma_config(dma_stream_typedef *dma_streamx, u32 chx, u32 par, u32 mar, u16 ndtr)

將採集到的adc值放入陣列中儲存

#define   per      12        //外設數量

#define num 10 //採集次數

u16 res[per];

u16 fir[num][per];

extern u16 res[per];

extern u16 fir[num][per];

void filter(void)

}

最後在主函式中呼叫以下兩句即可開啟傳輸

mydma_config(dma2_stream0, dma_channel_0, (u32)&adc1->dr, (u32)fir, num*per);

adc_softwarestartconv(adc1); //開啟dma

stm32下f4的adc dma採集

網上有很多關於stm32f103的資料,甚至在網上買各種模組商家給你提供的資料都是f103和51的,但是f4的資料相比之下就 比較可憐,當初我寫這個程式也是廢了不少時間翻了好多資料才寫成的,特此拿出來和大家分享一下。首先是 找到adc的位址,define adc1 dr address uint32...

基於stm32f407建立stm32F427工程

分為三個部分 1.啟動檔案 2.fwilib 包含兩個資料夾inc和src。src裡面是stm32資源的c檔案,inc則是32資源的h檔案 3.user這也是我不太理解的部分 ddbugconfig只包含了用於debug的初始化,則是f4的系統檔案。我是在f407的基礎上改的 總的來說 1.改了晶元...

STM32F4與STM32F1的區別

作為cortex m3市場的最大佔有者,st公司在2011年又推出基於cortex m4核心的stm32f4系列產品,相對與stm32f1 f2等cortex m3產品,stm32f4最大的優勢,就是新增了硬體fpu單元以及dsp指令,同時,stm32f4的主頻也提高了很多,達到168mhz 可獲得...