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

相关推荐
老神在在00124 分钟前
javaEE1
java·开发语言·学习·java-ee
Always_away2 小时前
26考研|高等代数:λ-矩阵
笔记·学习·线性代数·矩阵
DevangLic2 小时前
ffmpeg baidu
人工智能·pytorch·python·学习·ai·ffmpeg
图梓灵2 小时前
Maven与Spring核心技术解析:构建管理、依赖注入与应用实践
java·笔记·spring·maven
pop_xiaoli2 小时前
OC—UI学习-1
学习·ui·objective-c
许有杨2 小时前
STM32中的IIC协议和OLED显示屏
stm32·单片机·嵌入式硬件
houyawei_NO12 小时前
英飞凌SBC芯片TLE9263QX for STM32的库函数与使用
stm32·单片机·嵌入式硬件
职业考试资料墙2 小时前
登高架设作业考试中常见的安全规范考点是什么?
学习·考试·题库·考证
寻丶幽风3 小时前
论文阅读笔记——Step1X-Edit: A Practical Framework for General Image Editing
论文阅读·人工智能·笔记·多模态·理解生成模型
野木香3 小时前
idea使用笔记
java·笔记·intellij-idea