STM32外部中斷實驗

2021-10-25 06:13:49 字數 3437 閱讀 6994

使用藍橋杯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...