外部中斷程式配置流程
//rcc
時鐘配置
void rcc_configuration(void)
/*時鐘配置*/
//開啟各路時鐘
rcc_apb2periphclockcmd(rcc_apb2periph_usart1|rcc_apb2periph_gpioa|rcc_apb2periph_afio, enable);
}// rcc_apb2periph_afio
為復用功能時鐘開啟,基本上都要開啟,比如埠作為輸入
/ad/txrx
等均屬於復用功能
//gpio配置
void gpio_configuration(void)
/*定義gpio初始化結構體 gpio_initstructure */
gpio_inittypedef gpio_initstructure;
/* 設定pa.0,pa.1,pa.2為上拉輸入(extiline0)*/
gpio_initstructure.gpio_pin = gpio_pin_0 |gpio_pin_1 | gpio_pin_2;
gpio_initstructure.gpio_mode =gpio_mode_in_floating;
gpio_init(gpioa , &gpio_initstructure);
/*設定 usart1 的tx腳(pa.9)為第二功能推挽輸出功能 */
gpio_initstructure.gpio_pin = gpio_pin_9;
gpio_initstructure.gpio_mode =gpio_mode_af_pp;
gpio_initstructure.gpio_speed =gpio_speed_50mhz;
gpio_init(gpioa , &gpio_initstructure);
/* 設定 usart1 的rx腳(pa.10)為浮空輸入腳 */
gpio_initstructure.gpio_pin = gpio_pin_10;
gpio_initstructure.gpio_mode =gpio_mode_in_floating;
gpio_init(gpioa , &gpio_initstructure);
外部中斷配置
void exit_configuration(void)
//總結:從外到內 1
要確定哪個引腳作為外部中斷輸入eg:
gpioa的第0
個引腳
2確定了引腳之後,對應開啟中斷線。讓引腳和中斷線連線上 3
設定上公升沿、下降沿、還是上下公升沿觸發 4
設定中斷模式:為事件還是中斷掛起 5
使能該中斷 6
初始化上述配置
// 定義exit初始化結構體exti_initstructure
exti_inittypedefexti_initstructure;
// 定義pa.0為外部中斷0輸入通道(exit0)
gpio_extilineconfig(gpio_portsourcegpioa, gpio_pinsource0);
// 定義pa.1為外部中斷1輸入通道(exit1)
gpio_extilineconfig(gpio_portsourcegpioa, gpio_pinsource1);
// 定義pa.2為外部中斷2輸入通道(exit2)
gpio_extilineconfig(gpio_portsourcegpioa, gpio_pinsource2);
//選擇外部中斷的通道 共有exti_line0到exti_line18(0-15 16rtc17pvd 18usb)
//比如:這裡選擇了3個通道
exti_initstructure.exti_line = exti_line0 |exti_line1 | exti_line2;
///這裡設定exti中斷模式 :2種---事件中斷和中斷掛起
exti_initstructure.exti_mode =exti_mode_interrupt;
//選擇中斷觸發方式3種:下降沿觸發、上公升沿觸發、上下公升沿都觸發
//這裡選擇下降沿觸發
exti_initstructure.exti_trigger =exti_trigger_falling;
//使能中斷
exti_initstructure.exti_linecmd = enable;
//初始化上述中斷配置
exti_init(&exti_initstructure);
//外部中斷處理函式
void exti_irqhandler(void)
if(exti_getitstatus(exti_line0) != reset) //確保是否產生了extiline0中斷
exti_clearitpendingbit(exti_line0); //清除中斷標誌位
if(exti_getitstatus(exti_line1) != reset)//確保是否產生了exti line1中斷
exti_clearitpendingbit(exti_line1); //清除中斷標誌位
if(exti_getitstatus(exti_line2) != reset)//確保是否產生了exti line2中斷
exti_clearitpendingbit(exti_line2); //清除中斷標誌位
如下圖:這裡pa0連線到exti0
這裡pa1連線到exti1
這裡pa2連線到exti2
STM32外部中斷
一 基本概念 arm coetex m3核心共支援256個中斷,其中16個內部中斷,240個外部中斷和可程式設計的256級中斷優先順序的設定。stm32目前支援的中斷共84個 16個內部 68個外部 還有16級可程式設計的中斷優先順序的設定,僅使用中斷優先順序設定8bit中的高4位。stm32可支援...
stm32外部中斷
好久沒玩微控制器了,最近閒著沒事想拿出來玩玩,沒想到乙個stm32的外部中斷讓我花費了兩天時間,好的的挫折啊!終於下午除錯成功,下面來說一下我的除錯之路吧!硬體就是兩個按鍵,四個led,led事共陽極接法,按鍵一端接地一端接gpio口,通過按鍵中斷控制led。程式寫好以後發現始終無法進入中斷,開始查...
STM32外部中斷
1.中斷的原理 cpu正在執行,此時外部裝置發出請求,引發中斷,cpu暫停正在執行的程序,進行上下文切換,匯入引發終端的外部請求訊號,並執行需要該中斷的程序,執行完後,再切換其他程序繼續執行。2.新增外部中斷檔案 a.exti.h 檢視外部中斷與各管腳之間的對應關係 b.exti.c i.編寫管腳初...