STM32實(shí)驗(yàn)4:按鍵中斷
端口配置
#include"stm32f10x.h"http://PA13PA15voidKEY_Init(void){GPIO_InitTypeDefGPIO_InitStructure;EXTI_InitTypeDefEXTI_InitStructure;NVIC_InitTypeDefNVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//使能外設(shè)置時(shí)鐘GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15;//PA15上拉輸入GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource15);//將PA15設(shè)置為中斷輸入EXTI_InitStructure.EXTI_Line=EXTI_Line15;//中斷線EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//中斷請(qǐng)求EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;//下降沿觸發(fā)EXTI_InitStructure.EXTI_LineCmd=ENABLE;//使能中斷EXTI_Init(&EXTI_InitStructure);NVIC_Configuration();//設(shè)置中斷優(yōu)先級(jí)NVIC_InitStructure.NVIC_IRQChannel=EXTI15_10_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);}1234567891011121314151617181920212223242526272829
中斷服務(wù)函數(shù)
voidEXTI15_10_IRQHandler(void){if(EXTI_GetITStatus(EXTI_Line15)==1)//按鍵是否按下{LED0=!LED0;}EXTI_ClearITPendingBit(EXTI_Line15);//清除中斷標(biāo)識(shí)}12345678
主函數(shù)
#include"stm32f10x.h"intmain(void){SystemInit();//系統(tǒng)時(shí)鐘初始化為72MSYSCLK_FREQ_72MHzdelay_init(72);LED_Init();KEY_Init();while(1){;}}123456789101112
知識(shí)點(diǎn)
1.STM32的所有GPIO都可以用作外部中斷源的輸入端
2.STM32的中斷向量具有兩個(gè)屬性,一個(gè)為搶占屬性,一個(gè)為響應(yīng)屬性,其屬性編號(hào)越小,表明它的優(yōu)先級(jí)別越高。高搶占優(yōu)先級(jí)可以打斷低搶占優(yōu)先級(jí)。當(dāng)兩個(gè)中斷向量的搶占優(yōu)先級(jí)相同時(shí),如果兩個(gè)中斷同時(shí)到達(dá),則先處理響應(yīng)優(yōu)先級(jí)別高的中斷。
3.NVIC優(yōu)先級(jí)組有5種分配方式。
4.STM32的所有GPIO都引入到EXTI中斷線上。
5.可以配置成上升沿觸發(fā),下降沿觸發(fā)和雙邊沿觸發(fā)三種觸發(fā)方式。
6.當(dāng)GPIO用作EXTI外部中斷或者使用重映射功能時(shí),必須開啟AFIO,同時(shí)也要開啟外設(shè)時(shí)鐘。
7.stm32f10x_it.c文件是專門用來(lái)存放中斷服務(wù)函數(shù)的,中斷服務(wù)函數(shù)的名字必須要與啟動(dòng)文件startup_stm32f10x_hd.s中的中斷向量表定義一致。
8.NVIC_InitStructure.NVIC_IRQChannel的值可以在stm32f10x.h中搜尋。