中断的使用
Day4
void Button_Init()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//配置GPIOB时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//配置AFIO时钟
GPIO_InitTypeDef A;
A.GPIO_Mode = GPIO_Mode_IPU;//触发引脚可以选上拉输入
A.GPIO_Pin = GPIO_Pin_14;//B14脚
A.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&A);//初始化GPIO
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);//EXTI有关的。PinSourse后加引脚号
EXTI_InitTypeDef E;
E.EXTI_Line = EXTI_Line14;//后加引脚号,多个用 | 或
E.EXTI_LineCmd = ENABLE ;
E.EXTI_Mode =EXTI_Mode_Interrupt ;
E.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发
EXTI_Init(&E);//初始化EXTI
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断分组。默认,一个程序里面只用一个
/*下面设置中断优先级 多个引脚要单独设置*/
NVIC_InitTypeDef I;
I.NVIC_IRQChannel = EXTI15_10_IRQn;//这个要看引脚号,如果0,1脚要改成EXTI0_IRQn EXTI_1_IRQn
I.NVIC_IRQChannelCmd =ENABLE;
I.NVIC_IRQChannelPreemptionPriority=1;
I.NVIC_IRQChannelSubPriority=1;
NVIC_Init(&I);//初始化NVIC
}
在startup_stm32f10x_md.s里面可以看到中断函数的声明
然后自己写中断函数
void EXTI15_10_IRQHandler()
{
if(EXTI_GetITStatus(EXTI_Line14)==SET)//判断是不是set了
{
Bnum++;
EXTI_ClearITPendingBit(EXTI_Line14);//清除中断标志位
}
扫描二维码,在手机上阅读