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

相关推荐
SccTsAxR7 分钟前
[初学C语言]关于scanf和printf函数
c语言·开发语言·经验分享·笔记·其他
摇滚侠10 分钟前
【IT老齐456】Spring Boot优雅开发多线程应用,笔记01
spring boot·redis·笔记
爱写代码的小朋友35 分钟前
生成式人工智能对学习生态的重构:从“辅助工具”到“依赖风险”的平衡难题
人工智能·学习·重构
糖糖单片机设计43 分钟前
硬件开发_基于物联网的生态环境检测系统
stm32·单片机·嵌入式硬件·物联网·51单片机
澄澈i1 小时前
设计模式学习[20]---桥接模式
c++·学习·设计模式·桥接模式
A9better1 小时前
嵌入式开发学习日志35——stm32之超声波测距
stm32·单片机·嵌入式硬件·学习
青衫码上行1 小时前
【从0开始学习Java | 第18篇】集合(下 - Map部分)
java·学习
常州晟凯电子科技1 小时前
海思Hi3516CV610/Hi3516CV608开发笔记之环境搭建和SDK编译
人工智能·笔记·嵌入式硬件·物联网
弘毅 失败的 mian2 小时前
STM32 GPIO实战:LED与按键控制
经验分享·笔记·stm32·单片机·嵌入式硬件
_Power_Y2 小时前
MySql复习及面试题学习
数据库·学习·mysql