這裡使用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 可獲得...