Stm32定時器中斷觸發AD取樣

2021-08-02 18:46:48 字數 1130 閱讀 7126

stm32的adc有dma功能這都毋庸置疑,也是我們用的最多的!然而,如果我們要對乙個訊號(比如脈搏訊號)進行定時取樣(也就是隔一段時間,比如說2ms),有三種方法:

1)使用定時器中斷每隔一定時間進行adc轉換,這樣每次都必須讀adc的資料暫存器,非常浪費時間!

2)把adc設定成連續轉換模式,同時對應的dma通道開啟迴圈模式,這樣adc就一直在進行資料採集然後通過dma把資料搬運至記憶體。但是這樣做的話還得加乙個定時中斷,用來定時讀取記憶體中的資料!

3)使用adc的定時器觸發adc轉換的功能,然後使用dma進行資料的搬運!這樣只要設定好定時器的觸發間隔,就能實現adc定時取樣轉換的功能,然後可以在程式的死迴圈中一直檢測dma轉換完成標誌,然後進行資料的讀取,或者使能dma轉換完成中斷,這樣每次轉換完成就會產生中斷,

最終選取第二種方法。這裡使用的單通道:

//定時器初始化

void tim2_configuration(void)

//adc_dma初始化配置

void adc_dma_config(void)

//adc初始化

void pulsesenosrinit(void)

//中斷處理函式

void dma1_channel1_irqhandler(void)

}//中斷配置

nvic_inittypedef nvic_initstructure;

nvic_prioritygroupconfig(nvic_prioritygroup_1);

nvic_initstructure.nvic_irqchannel =dma1_channel1_irqn;

nvic_initstructure.nvic_irqchannelpreemptionpriority = 0;

nvic_initstructure.nvic_irqchannelsubpriority = 0;

nvic_initstructure.nvic_irqchannelcmd = enable;

nvic_init(&nvic_initstructure);

void adc_gpio_configuration(void) //adc配置函式

STM32定時器中斷

本實驗的目的是通過定時器中斷控制led燈的亮滅。筆者所用ide為iar,採用標準庫 3.5韌體庫 通過定時器產生中斷來控制led。ifndef led h define led h include stm32f10x gpio.h include stm32f10x.h include stm32f...

stm32 定時器中斷

stm32f1的定時器非常多,由2個基本定時器 tim6 tim7 4個通用定時器 tim2 tim5 和2個高階定時器 tim1 tim8 組成。基本定時器的功能最為簡單,類似於51微控制器內定時器。通用定時器是在基本定時器的基礎上擴充套件而來,增加了輸入捕獲與輸出比較等功能。高階定時器又是在通用...

stm32 定時器中斷實驗

led.h ifndef led h define led h include sys.h void led init void define led0 pbout 5 紅燈 define led1 peout 5 綠燈 endif led.c include led.h include stm32...