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

相关推荐
我先去打把游戏先14 分钟前
ESP32开发指南(基于IDF):连接AWS,乐鑫官方esp-aws-iot-master例程实验、跑通
开发语言·笔记·单片机·物联网·学习·云计算·aws
oe101924 分钟前
好文与笔记分享 A Survey of Context Engineering for Large Language Models(上)
数据库·笔记·语言模型·agent·上下文工程
web前端神器36 分钟前
vitest单元测试笔记
笔记
朝新_43 分钟前
【SpringMVC】SpringMVC 小案例:加法计算器初步理解前后端接口交互与数据处理
java·笔记·spring·交互·javaee
hazy1k1 小时前
51单片机基础-继电器实验
stm32·单片机·嵌入式硬件·51单片机·1024程序员节
雍凉明月夜1 小时前
人工智能学习中深度学习之python基础之迭代器、生成器、文件处理和模块等
python·深度学习·学习·pycharm
半夏知半秋2 小时前
mongodb的复制集整理
服务器·开发语言·数据库·后端·学习·mongodb
胡楚昊2 小时前
第一届数证杯做题笔记(流量分析和手机取证)
笔记
2301_802939902 小时前
从零开始学习Redis(五):多级缓存
redis·学习·缓存
Chunyyyen3 小时前
【第二十周】自然语言处理的学习笔记05
笔记·学习·自然语言处理