[STM32学习笔记(九)]CubeMX项目使用系统定时器SysTick的中断服务函数进行定时

有很多文章说明了由于HAL_Delay()函数的本质是系统定时器计数,通过全局变量uwTick的不断增加实现的比较延迟。调用HAL_Delay()函数会阻塞其他工作,因此在外设ISR进程调用该延迟时,要特别小心。

因此,现在考虑,既然系统定时器会固定产生中断,那是否可以通过在系统定时器的中断回调函数中设置一个标志位实现定时

在网上还没有基于CubeMX生成的项目实现定时功能 ,当然后续工作更多定时会通过其他通用定时器 实现,这篇文章仅供学习参考

CubeMX设置

RCC、SYS、LED_GPIO和时钟树不再叙述,这里只看系统定时器。这里的抢占优先级设置为3,原来默认为15,不是很有问题。

Keil代码

首先要找到系统定时器中断服务函数,会发现其并没有直接调用HAL库函数 。而是SysTick_Handler函数,里面只调用了一个HAL_IncTick()函数。

HAL库 中的系统中断服务函数为HAL_SYSTICK_IRQHandler(),需要手动添加到SysTick_Handler()中,并且重写中断回调函数HAL_SYSTICK_Callback()

其他关键代码

main.h

main.c

最后编译通过即可,主要功能是每秒翻转一次连接LED的GPIO的电平,实现1s亮1s灭,但不是通过延迟函数得到,而是通过状态标志位实现。

相关推荐
乖女子@@@1 天前
React笔记_组件之间进行数据传递
javascript·笔记·react.js
要做朋鱼燕1 天前
【C++】 priority_queue 容器模拟实现解析
开发语言·c++·笔记·职场和发展
ST.J1 天前
swing笔记
java·笔记
励志不掉头发的内向程序员1 天前
C++进阶——继承 (1)
开发语言·c++·学习
悠哉悠哉愿意1 天前
【数学建模学习笔记】机器学习分类:随机森林分类
学习·机器学习·数学建模
贾亚超1 天前
【STM32外设】DAC
stm32·单片机·嵌入式硬件
悠哉悠哉愿意1 天前
【数学建模学习笔记】机器学习分类:KNN分类
学习·机器学习·数学建模
四谎真好看1 天前
Java 学习笔记(进阶篇2)
java·笔记·学习
程序猿炎义1 天前
【NVIDIA AIQ】自定义函数实践
人工智能·python·学习
小陈phd1 天前
高级RAG策略学习(四)——上下文窗口增强检索RAG
人工智能·学习·langchain