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

相关推荐
BT-BOX43 分钟前
第7章《Stm32CubeMX+Proteus仿真入门》--独立按键扫描
stm32·嵌入式硬件·proteus
丝斯20111 小时前
AI学习笔记整理(79)——Python学习8
人工智能·笔记·学习
Z.风止1 小时前
Large Model-learning(2)
开发语言·笔记·python·leetcode
zd8451015001 小时前
ESP8266 MQTT连接onenet
stm32·单片机
啥咕啦呛2 小时前
java打卡学习5:java基础学习
java·开发语言·学习
烛之武2 小时前
SpringCloud基础(上)
笔记·spring·spring cloud
南境十里·墨染春水2 小时前
C++ 笔记 深赋值 浅赋值(面向对象)
开发语言·jvm·c++·笔记
今儿敲了吗2 小时前
算法复盘——差分
数据结构·c++·笔记·学习·算法
第二层皮-合肥2 小时前
50天学习FPGA第32天-添加HDL属性调试
学习·fpga开发
_李小白2 小时前
【OSG学习笔记】Day 23: ClipNode(动态裁剪)
android·笔记·学习