打印
[其他ST产品]

STM32使用__disable_irq()后就无法使用HAL_Delay(xx),这是为什么?

[复制链接]
472|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
楼主使用的这个延时函数的函数体里边都涉及到什么代码啊

使用特权

评论回复
5
renzheshengui| | 2024-1-19 08:52 | 只看该作者
如果不是禁止所有的中断使能而是指定的功能的中断使能  还会出现这个现象吗

使用特权

评论回复
6
wowu| | 2024-1-19 09:29 | 只看该作者
不能正常使用的表现是什么?在延时函数里边死循环吗?

使用特权

评论回复
7
xiaoqizi| | 2024-1-19 10:11 | 只看该作者
是不是错误的处理到了时钟的配置那边啊

使用特权

评论回复
8
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()。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1327

主题

3833

帖子

0

粉丝