
Disable中断之后再Enable无法正常运行,这是中断函数: void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin==GPIO_PIN_3) { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET); HAL_NVIC_DisableIRQ(EXTI2_3_IRQn); EXIT_Sign=1; } } 这是while循环 while (1) { / USER CODE END WHILE / if(EXIT_Sign==1) { HAL_Delay(2000); MX_GPIO_Init(); HAL_NVIC_EnableIRQ(EXTI2_3_IRQn); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET); EXIT_Sign=0; } / USER CODE BEGIN 3 / } 这样是可以实现功能的,但是只要注释掉if里面的 MX_GPIO_Init(); 或者 HAL_NVIC_EnableIRQ(EXTI2_3_IRQn); 这两个注释掉一个就无法实现功能。我的问题是:MX_GPIO_Init();函数里面有使能中断语句了HAL_NVIC_EnableIRQ(EXTI2_3_IRQn); 为啥在if里面还得再重复一遍这个使能函数呢。不知道我有没有说明白,请各位大佬们帮忙解答一下。 |
STM32CubeProgrammer 安装错误,请帮忙解决,谢谢
STM32CubeMX 配置STM32G070RBT6TR时无法使能PVD中断
STM32G070RBT6TR STM32CubeMX ADC配置后使用的是内部参考电压且零点的读数太大了
测评在哪里发?
Group Study vs. Solo Study: What Works Best?
STM32G070CBT6使用硬件SPI无法读出W25Q128的ID
STM32G0B0CET6的usb的时钟只能用48MHz的晶振来实现吗?
STM32G070RET6,中断优先级配置没有效果
如图:STM32F437的TIM10支持从模式吗?
STM32G070 UART串口,低波特率传送数据时,TIMER出现严重延时现象,如何解决?
要不把你的主循环的代码稍微改成这样看看:
if(EXIT_Sign==1)
{
HAL_NVIC_EnableIRQ(EXTI2_3_IRQn);
HAL_Delay(xxxx);
//MX_GPIO_Init();
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
EXIT_Sign=0;
}
我刚才找了STM32开发板就你的问题快速验证了 下,没有什么异常。实现的就是每按键一次,计数变量Count_Keypressed加1.
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
HAL_NVIC_DisableIRQ(EXTI0_IRQn);
KeyPressed=0xff; //按键检测标志
Count_Keypressed++;//统计按键次数
}
while (1) {
/* USER CODE BEGIN 3 */
if (KeyPressed)
{
HAL_Delay(500);
KeyPressed=0x0;
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
}
}
不过,一般来讲,这个中断的使能没有啥必要开来关去的。
正常来说MX_GPIO_Init重新开启了外部中断配置,后续不需要操作。没有看到具体的代码,无法判断配置的过程。可以仿真模式下,执行玩MX_GPIO_Init后,看一下中断的配置状态。
你好 现在问题是,我不在main程序里面调用HAL_NVIC_EnableIRQ(EXTI2_3_IRQn);在MX_GPIO_Init(void)里面HAL_NVIC_EnableIRQ(EXTI2_3_IRQn);调用一次不起作用,得再重复一遍相同的代码。我不明白为什么相同的代码写两遍就好了
/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI2_3_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI2_3_IRQn);
HAL_NVIC_EnableIRQ(EXTI2_3_IRQn);
重复一遍,就能起作用了吗?
一次就行了。这个就需要看你配置的触发方式,还有外部中断在配置时的状态。这个是关联的。