关于STM32EXTI中断的一个小疑问
时间:10-02
整理:3721RD
点击:
以下为代码
main.c:
int main(void)
{
HAL_Init();
SystemClock_Config(); /* Configure the system clock to 64 MHz */
/* Add your application code here */
gpio_init();
nvic_init();
while(1)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2,GPIO_PIN_RESET);
}
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == GPIO_PIN_2)
{
// HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_2);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2,GPIO_PIN_SET);
HAL_Delay(10);
}
}
中断部分:
void EXTI2_IRQHandler(void)
{
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2);
}
EXTI初始化部分:
#include"exti0.h"
void gpio_init()
{
GPIO_InitTypeDef GPIO_InitStruct;
// SystemInit();
__HAL_RCC_GPIOE_CLK_ENABLE(); //ê1?ü???úAμ?íaéèê±?ó
__HAL_RCC_GPIOC_CLK_ENABLE(); //ê1?ü???úAμ?íaéèê±?ó
__HAL_RCC_AFIO_CLK_ENABLE();
// ????GPIOC_2×÷?aLEDμ?áá?ú
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Pin = GPIO_PIN_2;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
// é?éy??2úéú?D?? PA0
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Pin = GPIO_PIN_2;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
}
void nvic_init()
{
// HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_1); //éè??1???à????£?3???±ó??è??
HAL_NVIC_SetPriority(EXTI2_IRQn,0,0); //éè??EXTI0?a×?????μ??à??ó??èoí?±ó??è
HAL_NVIC_EnableIRQ(EXTI2_IRQn); //ê1?üIRQ?D??
}
*******************************************************************
但是就是在下载仿真的过程中,发现只要摁下开关,触发中断,然后控制闪灯,但是等就永远的熄灭了,这是为什么
main.c:
int main(void)
{
HAL_Init();
SystemClock_Config(); /* Configure the system clock to 64 MHz */
/* Add your application code here */
gpio_init();
nvic_init();
while(1)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2,GPIO_PIN_RESET);
}
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == GPIO_PIN_2)
{
// HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_2);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2,GPIO_PIN_SET);
HAL_Delay(10);
}
}
中断部分:
void EXTI2_IRQHandler(void)
{
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2);
}
EXTI初始化部分:
#include"exti0.h"
void gpio_init()
{
GPIO_InitTypeDef GPIO_InitStruct;
// SystemInit();
__HAL_RCC_GPIOE_CLK_ENABLE(); //ê1?ü???úAμ?íaéèê±?ó
__HAL_RCC_GPIOC_CLK_ENABLE(); //ê1?ü???úAμ?íaéèê±?ó
__HAL_RCC_AFIO_CLK_ENABLE();
// ????GPIOC_2×÷?aLEDμ?áá?ú
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Pin = GPIO_PIN_2;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
// é?éy??2úéú?D?? PA0
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Pin = GPIO_PIN_2;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
}
void nvic_init()
{
// HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_1); //éè??1???à????£?3???±ó??è??
HAL_NVIC_SetPriority(EXTI2_IRQn,0,0); //éè??EXTI0?a×?????μ??à??ó??èoí?±ó??è
HAL_NVIC_EnableIRQ(EXTI2_IRQn); //ê1?üIRQ?D??
}
*******************************************************************
但是就是在下载仿真的过程中,发现只要摁下开关,触发中断,然后控制闪灯,但是等就永远的熄灭了,这是为什么
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶