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

相关推荐
炽烈小老头19 分钟前
【 每天学习一点算法 2025/12/12】回文链表
学习·算法·链表
爪洼守门员20 分钟前
前端性能优化
开发语言·前端·javascript·笔记·性能优化
1+2单片机电子设计20 分钟前
基于 STM32 的数控 BUCK-BOOST 升降压电源设计
stm32·单片机·嵌入式硬件
全栈陈序员38 分钟前
【Python】基础语法入门(十五)——标准库精选:提升效率的内置工具箱
开发语言·人工智能·python·学习
阿蒙Amon40 分钟前
JavaScript学习笔记:4.循环与迭代
javascript·笔记·学习
爱倒腾的老唐43 分钟前
02、打不开某个网站
windows·笔记·电脑
喵了meme1 小时前
Linux学习日记19:线程同步与互斥锁
java·jvm·学习
暗之星瞳1 小时前
python爬虫学习——1
爬虫·python·学习
易水寒陈1 小时前
解析器模式,解析不同协议
stm32·单片机
1379号监听员_1 小时前
PID定速/定位置控制电机
stm32·单片机