[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灭,但不是通过延迟函数得到,而是通过状态标志位实现。

相关推荐
Roselind_Yi1 小时前
池化对比:CNN池化 VS Java线程池
java·人工智能·经验分享·笔记·深度学习·神经网络·cnn
心中有国也有家1 小时前
hixl:昇腾分布式推理的「快递专线」
人工智能·经验分享·笔记·分布式·学习·算法
爱睡懒觉的焦糖玛奇朵8 小时前
【从视频到数据集:焦糖玛奇朵的魔法工具使用说明】
人工智能·python·深度学习·学习·算法·yolo·音视频
浩浩测试一下9 小时前
汇编 16位32位64位通用寄存器(逆向分析)
汇编·windows·stm32·单片机·嵌入式硬件·逆向·二进制
夏天想9 小时前
人类将从“执行者“变为“总导演”,学习Ai知识
人工智能·学习
玄米乌龙茶1239 小时前
LLM成长笔记(二):数据处理与工具链
笔记
tq108610 小时前
因果本是叙事
笔记
晓梦林10 小时前
Baji1靶场学习笔记
笔记·学习
希冀12310 小时前
【CSS学习第十一篇】
前端·css·学习
魔法阵维护师11 小时前
从零开发游戏需要学习的c#模块,第十六章(安装 MonoGame 并创建第一个窗口)
学习·游戏·c#·monogame