使用藍橋杯ct117e板子
exti:外部中斷/事件控制器,可實現對每個中斷/事件線進行單獨配置,可以單獨配置為中斷或事件,以及觸發事件的屬性。
使用外部中斷一定要使能afio時鐘
用外部中斷實現四種led走馬燈(用按鍵選擇模式)
gpio_inittypedef gpio_inittypeexti;
//gpio結構體
exti_inittypedef exti_inittypeexti;
//exti結構體
nvic_inittypedef nvic_inittypeexti;
//nvic結構體
1:時鐘使能
rcc_apb2periphclockcmd
(rcc_apb2periph_gpioa | rcc_apb2periph_gpiob | rcc_apb2periph_afio,enable)
;
2:初始化與按鍵對應的gpio口
gpio_inittypeexti.gpio_mode = gpio_mode_ipu;
//上拉輸入
gpio_inittypeexti.gpio_pin = gpio_pin_0 | gpio_pin_8;
gpio_inittypeexti.gpio_speed = gpio_speed_50mhz;
gpio_init
(gpioa,
&gpio_inittypeexti)
;gpio_inittypeexti.gpio_mode = gpio_mode_ipu;
gpio_inittypeexti.gpio_pin = gpio_pin_1 | gpio_pin_2;
gpio_inittypeexti.gpio_speed = gpio_speed_50mhz;
gpio_init
(gpiob,
&gpio_inittypeexti)
;
3:設定中斷線與io口的對映關係
gpio_extilineconfig
(gpio_portsourcegpioa,gpio_pinsource0)
;gpio_extilineconfig
(gpio_portsourcegpioa,gpio_pinsource8)
;gpio_extilineconfig
(gpio_portsourcegpiob,gpio_pinsource1)
;gpio_extilineconfig
(gpio_portsourcegpiob,gpio_pinsource2)
;
//此處不可或運算
4:初始化exti
exti_inittypeexti.exti_line = exti_line0 | exti_line8 | exti_line1 | exti_line2;
//指定要配置的中斷線
exti_inittypeexti.exti_linecmd = enable;
//使能
exti_inittypeexti.exti_mode = exti_mode_interrupt;
//模式:中斷或事件(這裡是中斷)
exti_inittypeexti.exti_trigger = exti_trigger_rising;
//觸發方式:上公升沿,下降沿,雙沿觸發,(這裡是下降沿)
exti_init
(&exti_inittypeexti)
;
5:配置中斷分組
nvic_inittypeexti.nvic_irqchannel = exti0_irqn;
//0,8,1,2中斷通道設定
nvic_inittypeexti.nvic_irqchannelcmd = enable;
nvic_inittypeexti.nvic_irqchannelpreemptionpriority =0;
//搶占優先順序
nvic_inittypeexti.nvic_irqchannelsubpriority =1;
//響應優先順序
nvic_init
(&nvic_inittypeexti)
;nvic_inittypeexti.nvic_irqchannel = exti9_5_irqn;
nvic_inittypeexti.nvic_irqchannelcmd = enable;
nvic_inittypeexti.nvic_irqchannelpreemptionpriority =
0;
nvic_inittypeexti.nvic_irqchannelsubpriority =2;
nvic_init
(&nvic_inittypeexti)
;nvic_inittypeexti.nvic_irqchannel = exti1_irqn;
nvic_inittypeexti.nvic_irqchannelcmd = enable;
nvic_inittypeexti.nvic_irqchannelpreemptionpriority =
0;
nvic_inittypeexti.nvic_irqchannelsubpriority =3;
nvic_init
(&nvic_inittypeexti)
;nvic_inittypeexti.nvic_irqchannel = exti2_irqn;
nvic_inittypeexti.nvic_irqchannelcmd = enable;
nvic_inittypeexti.nvic_irqchannelpreemptionpriority =
0;
nvic_inittypeexti.nvic_irqchannelsubpriority =4;
nvic_init
(&nvic_inittypeexti)
;
6:四個按鍵對應的中斷服務函式
void
exti0_irqhandler()
}}void
exti9_5_irqhandler()
}}void
exti1_irqhandler()
}}void
exti2_irqhandler()
}}
stm32外部中斷實驗
外部中斷0服務程式 void extix init void 外部中斷0服務程式 void exti0 irqhandler void exti clearitpendingbit exti line0 清除line0上的中斷標誌位 外部中斷2服務程式 void exti2 irqhandler v...
STM32外部中斷
一 基本概念 arm coetex m3核心共支援256個中斷,其中16個內部中斷,240個外部中斷和可程式設計的256級中斷優先順序的設定。stm32目前支援的中斷共84個 16個內部 68個外部 還有16級可程式設計的中斷優先順序的設定,僅使用中斷優先順序設定8bit中的高4位。stm32可支援...
stm32外部中斷
外部中斷程式配置流程 rcc 時鐘配置 void rcc configuration void 時鐘配置 開啟各路時鐘 rcc apb2periphclockcmd rcc apb2periph usart1 rcc apb2periph gpioa rcc apb2periph afio,enab...