STM32实验4:按键中断
扫描二维码
随时随地手机看文章
端口配置
#include"stm32f10x.h"//PA13PA15voidKEY_Init(void){GPIO_InitTypeDefGPIO_InitStructure;EXTI_InitTypeDefEXTI_InitStructure;NVIC_InitTypeDefNVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//使能外设置时钟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设置为中断输入EXTI_InitStructure.EXTI_Line=EXTI_Line15;//中断线EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//中断请求EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;//下降沿触发EXTI_InitStructure.EXTI_LineCmd=ENABLE;//使能中断EXTI_Init(&EXTI_InitStructure);NVIC_Configuration();//设置中断优先级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
中断服务函数
voidEXTI15_10_IRQHandler(void){if(EXTI_GetITStatus(EXTI_Line15)==1)//按键是否按下{LED0=!LED0;}EXTI_ClearITPendingBit(EXTI_Line15);//清除中断标识}12345678
主函数
#include"stm32f10x.h"intmain(void){SystemInit();//系统时钟初始化为72MSYSCLK_FREQ_72MHzdelay_init(72);LED_Init();KEY_Init();while(1){;}}123456789101112
知识点
1.STM32的所有GPIO都可以用作外部中断源的输入端
2.STM32的中断向量具有两个属性,一个为抢占属性,一个为响应属性,其属性编号越小,表明它的优先级别越高。高抢占优先级可以打断低抢占优先级。当两个中断向量的抢占优先级相同时,如果两个中断同时到达,则先处理响应优先级别高的中断。
3.NVIC优先级组有5种分配方式。
4.STM32的所有GPIO都引入到EXTI中断线上。
5.可以配置成上升沿触发,下降沿触发和双边沿触发三种触发方式。
6.当GPIO用作EXTI外部中断或者使用重映射功能时,必须开启AFIO,同时也要开启外设时钟。
7.stm32f10x_it.c文件是专门用来存放中断服务函数的,中断服务函数的名字必须要与启动文件startup_stm32f10x_hd.s中的中断向量表定义一致。
8.NVIC_InitStructure.NVIC_IRQChannel的值可以在stm32f10x.h中搜寻。