stm32几乎每个管脚都可以配置为中断,然后每组IO中的管脚号就是中断线号,首先
配置时钟和管脚,然后配置中断向量,配置优先级,然后使能就可以了:
/* Configure one bit for preemption priority */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
/* Enable the EXTI15_10 Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
然后配置外部中断:
/* Connect Key Button EXTI Line to Key Button GPIO Pin */
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);
/* Configure Key Button0 EXTI Line to generate an interrupt on falling edge */
EXTI_InitStructure.EXTI_Line = EXTI_Line13;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
就是设置中断线号,中断模式,触发模式,使能对应中断就可以了;
最后填充中断函数如下:
void EXTI15_10_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line13) != RESET)
{
Delaytime(0xF000);
if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13))
{
//此处填写需要处理的内容
}
/* Clear the Key Button EXTI line pending bit */
EXTI_ClearITPendingBit(EXTI_Line13);
}
}
这样中断就可以执行了
配置时钟和管脚,然后配置中断向量,配置优先级,然后使能就可以了:
/* Configure one bit for preemption priority */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
/* Enable the EXTI15_10 Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
然后配置外部中断:
/* Connect Key Button EXTI Line to Key Button GPIO Pin */
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);
/* Configure Key Button0 EXTI Line to generate an interrupt on falling edge */
EXTI_InitStructure.EXTI_Line = EXTI_Line13;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
就是设置中断线号,中断模式,触发模式,使能对应中断就可以了;
最后填充中断函数如下:
void EXTI15_10_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line13) != RESET)
{
Delaytime(0xF000);
if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13))
{
//此处填写需要处理的内容
}
/* Clear the Key Button EXTI line pending bit */
EXTI_ClearITPendingBit(EXTI_Line13);
}
}
这样中断就可以执行了
这篇博客详细介绍了STM32如何配置中断,包括设置时钟、管脚、中断向量、优先级以及使能中断。通过示例代码展示了NVIC和EXTI的配置,以及如何处理EXTI15_10中断,最后提供了一个中断服务函数的实现,用于在中断发生时执行特定操作。
1347

被折叠的 条评论
为什么被折叠?



