完善资料让更多小伙伴认识你,还能领取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()函数的功能。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
使用stm32l451片子,对ad7606进行3通道100k采样值跳动问题?
884 浏览 1 评论
STM32进行DMA数据转运,为什么只有A组最后一位数据被转运到B组去?
1429 浏览 2 评论
1748 浏览 3 评论
1348 浏览 0 评论
嵌入式开发 Win11安装ST-Link 提示 设备描述符请求失败 怎么处理?
1476 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-22 15:28 , Processed in 0.642503 second(s), Total 75, Slave 57 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号