完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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){/[i] 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;} /[i] USER CODE BEGIN 3 /} 这样是可以实现功能的,但是只要注释掉if里面的 MX_GPIO_Init(); 或者 HAL_NVIC_EnableIRQ(EXTI2_3_IRQn); 这两个注释掉一个就无法实现功能。我的问题是:MX_GPIO_Init();函数里面有使能中断语句了HAL_NVIC_EnableIRQ(EXTI2_3_IRQn); 为啥在if里面还得再重复一遍这个使能函数呢。不知道我有没有说明白,请各位大佬们帮忙解答一下。 |
|
相关推荐
1个回答
|
|
从你给出的代码来看,似乎也没啥问题。如果使用cubeMx配置的话,MX_GPIO_Init()里的确有使能相关中断的函数。
要不把你的主循环的代码稍微改成这样看看: 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); } } 不过,一般来讲,这个中断的使能没有啥必要开来关去的。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
871 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
658 浏览 1 评论
413 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
324 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
725 浏览 2 评论
1470浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
143浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
180浏览 3评论
164浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
165浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-6-26 22:10 , Processed in 1.310287 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191