你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于HAL_Delay问题

[复制链接]
hithfy 提问时间:2015-9-8 15:10 /
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 发布时间:2015-9-8 15:10

举报

15个回答
wuzhujian 回答时间:2015-9-8 15:15:57
楼主,你是新手吧?

中断里面延时,新手才这么干的。
HAL_Delay()函数,是在systick中断中改变计数值。你的EXTI2_IRQHandler()中断 处理函数不退出,估计systick中断也不一定会执行得到,所以.......


hithfy 回答时间:2015-9-8 15:26:17
wuzhujian 发表于 2015-9-8 15:15
楼主,你是新手吧?

中断里面延时,新手才这么干的。

嘿嘿,新手哈,但是我是在另外一个源文件定义的KEY_BUZ_LED()啊,是不是在中断里面调用到的所有函数都不能有这个HAL_Delay
hithfy 回答时间:2015-9-8 15:28:08
wuzhujian 发表于 2015-9-8 15:15
楼主,你是新手吧?

中断里面延时,新手才这么干的。

我感觉也是这样的,但是就是不确定,所以献丑了哈。
wyxy163@126.com 回答时间:2015-9-8 17:28:14
提示: 作者被禁止或删除 内容自动屏蔽
wyxy163@126.com 回答时间:2015-9-8 17:28:34
提示: 作者被禁止或删除 内容自动屏蔽
hithfy 回答时间:2015-9-8 21:32:02
数码小叶 发表于 2015-9-8 17:28
我觉得你的EXTI2配置有问题。。。

但是我使用自定义的那个延时函数时,就是没有问题,麻烦你详解哈
chifen 回答时间:2015-9-8 22:27:13
同样都是定时中断, 要看谁的级别高,如果滴答定时器低于当前级别,会死里不出来了
hithfy 回答时间:2015-9-8 22:31:53
chifen 发表于 2015-9-8 22:27
同样都是定时中断, 要看谁的级别高,如果滴答定时器低于当前级别,会死里不出来了 ...

恩,我查了哈我的滴答时钟抢占和响应优先级均设置为0,0(应该最高了),就是一直没能查到EXTI2这个中断是个什么优先级啊!
mark0668 回答时间:2015-9-8 22:34:04
你的中断高于定时的中断优先级.
hithfy 回答时间:2015-9-8 22:48:51
mark0668 发表于 2015-9-8 22:34
你的中断高于定时的中断优先级.

那这个中断的优先级在哪里修改A?
mark0668 回答时间:2015-9-9 00:42:36
hithfy 发表于 2015-9-8 22:48
那这个中断的优先级在哪里修改A?

1.jpg

这个就是滴答定时器的优先级,你的中断不能比他高.
netlhx 回答时间:2015-9-9 09:11:33
定时的优先级调高
hithfy 回答时间:2015-9-9 10:38:42
netlhx 发表于 2015-9-9 09:11
定时的优先级调高

恩,好的,谢谢提醒哈
hithfy 回答时间:2015-9-9 10:45:19
mark0668 发表于 2015-9-9 00:42
这个就是滴答定时器的优先级,你的中断不能比他高.

这个滴答已经是0,0了,EXTI2的中断优先级还没找到
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版