[其他ST产品] STM32使用__disable_irq()后就无法使用HAL_Delay(xx),这是为什么?

[复制链接]
 楼主| cr315 发表于 2023-12-20 11:01 | 显示全部楼层 |阅读模式
单片机STM32F103,用STM32CubeMX生成初始代码,使用HAL库。
从网上得知HAL库中有两个函数分别是控制中断的关闭和开启的:
__disable_irq(); //关闭所有中断
__enable_irq();//打开所有中断
但实际应用中发现,当使用__disable_irq(); 关闭所有中断后,再用__enable_irq();打开所有中断,
就会出现HAL_Delay(xx)不能再使用,所以直接用上述方式也不可取。
那么,究竟该如何正确地的关闭和开启Systick的中断呢?
tpgf 发表于 2024-1-18 18:38 | 显示全部楼层
这个延时函数的原理并不涉及到中断啊
wakayi 发表于 2024-1-18 19:17 | 显示全部楼层
按理说开启和关闭中断并不能影响时钟的工作啊
paotangsan 发表于 2024-1-19 08:08 | 显示全部楼层
楼主使用的这个延时函数的函数体里边都涉及到什么代码啊
renzheshengui 发表于 2024-1-19 08:52 | 显示全部楼层
如果不是禁止所有的中断使能而是指定的功能的中断使能  还会出现这个现象吗
wowu 发表于 2024-1-19 09:29 | 显示全部楼层
不能正常使用的表现是什么?在延时函数里边死循环吗?
xiaoqizi 发表于 2024-1-19 10:11 | 显示全部楼层
是不是错误的处理到了时钟的配置那边啊
jcky001 发表于 2024-2-18 10:36 | 显示全部楼层
要正确地关闭和开启SysTick的中断,你应该使用以下函数:

关闭SysTick中断:

c
复制代码
HAL_SYSTICK_DisableIT();
开启SysTick中断:

c
复制代码
HAL_SYSTICK_EnableIT();
这些函数只会影响SysTick中断,不会影响其他的中断。因此,当你需要禁用SysTick中断时,可以调用HAL_SYSTICK_DisableIT(),而当需要再次启用SysTick中断时,可以调用HAL_SYSTICK_EnableIT()。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1450

主题

4812

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部