完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1.在一个简单的按键试验中,我在xxit.c的EXti2_IRQHandler中调用了一个函数KEY_BUZ_LED():
void KEY_BUZ_LED(void) { /****************************************************************/ HAL_GPIO_WritePin ( GPIOD, GPIO_PIN_1, GPIO_PIN_RESET);//低有效 HAL_GPIO_WritePin ( GPIOD, GPIO_PIN_3, GPIO_PIN_RESET);//低有效 // H_delayMS(250000); //自定义延时函数 HAL_Delay(300); HAL_GPIO_WritePin ( GPIOD, GPIO_PIN_1, GPIO_PIN_SET); HAL_GPIO_WritePin ( GPIOD, GPIO_PIN_3, GPIO_PIN_SET); /***************************************************************/ } 但是我按下按键后,能按下降沿正常进入EXTI2_IRQHandler里面的HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2)函数,但是接下来执行KEY_BUZ_LED()时一直卡在了 HAL_Delay(300),此时单步执行也无效了。 后来我就使用了自定义的延时函数 H_delayMS(),发现正常实现按键后蜂鸣器和LED的响、亮。 请问,各位大侠,这是什么情况?还有就是HAL_Delay函数的延时是怎么计算的,麻烦详解,感激不尽! |
|
相关推荐
15个回答
|
|
楼主,你是新手吧?
中断里面延时,新手才这么干的。 HAL_Delay()函数,是在systick中断中改变计数值。你的EXTI2_IRQHandler()中断 处理函数不退出,估计systick中断也不一定会执行得到,所以....... |
|
|
|
嘿嘿,新手哈,但是我是在另外一个源文件定义的KEY_BUZ_LED()啊,是不是在中断里面调用到的所有函数都不能有这个HAL_Delay |
|
|
|
|
|
|
|
|
|
|
|
我觉得你的EXTI2配置有问题。。。
|
|
|
|
|
|
|
|
同样都是定时中断, 要看谁的级别高,如果滴答定时器低于当前级别,会死里不出来了
|
|
|
|
恩,我查了哈我的滴答时钟抢占和响应优先级均设置为0,0(应该最高了),就是一直没能查到EXTI2这个中断是个什么优先级啊!
|
|
|
|
你的中断高于定时的中断优先级.
|
|
|
|
|
|
|
|
|
|
|
|
定时的优先级调高
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1339 浏览 0 评论
STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
1162 浏览 0 评论
2602 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2378 浏览 3 评论
5030 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-6 18:03 , Processed in 0.891636 second(s), Total 101, Slave 85 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号