完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
从网上得知HAL库中有两个函数分别是控制中断的关闭和开启的: __disable_irq(); //关闭所有中断 __enable_irq();//打开所有中断 但实际应用中发现,当使用__disable_irq(); 关闭所有中断后,再用__enable_irq();打开所有中断, 就会出现HAL_Delay(xx)不能再使用,所以直接用上述方式也不可取。 那么,究竟该如何正确地的关闭和开启Systick的中断呢? |
|
相关推荐
1个回答
|
|
问题可能是由于在使用__disable_irq()关闭所有中断后,SysTick中断也被禁用了。HAL_Delay(xx)函数内部依赖于SysTick中断来实现延时,因此无法再正常工作。
正确的做法是只关闭SysTick中断,而不是所有中断。可以使用以下代码来关闭和打开SysTick中断: // 关闭SysTick中断 SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk; // 打开SysTick中断 SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk; 这样就只关闭和打开了SysTick中断,而其他中断仍然可以正常工作。 另外,HAL库提供了HAL_SuspendTick()和HAL_ResumeTick()函数来暂停和恢复SysTick中断。可以使用以下代码来暂停和恢复SysTick中断: // 暂停SysTick中断 HAL_SuspendTick(); // 恢复SysTick中断 HAL_ResumeTick(); 使用以上方法可以正确地控制SysTick中断的关闭和开启,而不会影响HAL_Delay()函数的功能。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2183 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2011 浏览 3 评论
4612 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2154 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2687 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 10:14 , Processed in 0.418610 second(s), Total 42, Slave 34 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号