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

相关推荐
序属秋秋秋1 小时前
《C++初阶之内存管理》【内存分布 + operator new/delete + 定位new】
开发语言·c++·笔记·学习
许白掰1 小时前
Linux入门篇学习——Linux 工具之 make 工具和 makefile 文件
linux·运维·服务器·前端·学习·编辑器
B1nna2 小时前
Docker学习
学习·docker·容器
quant_19863 小时前
R语言如何接入实时行情接口
开发语言·经验分享·笔记·python·websocket·金融·r语言
promising-w8 小时前
【运算放大器专题】基础篇
嵌入式硬件·学习
宝山哥哥8 小时前
网络信息安全学习笔记1----------网络信息安全概述
网络·笔记·学习·安全·网络安全
前端开发与ui设计的老司机8 小时前
从UI设计到数字孪生实战:构建智慧教育的个性化学习平台
学习·ui
X Y O8 小时前
神经网络初步学习3——数据与损失
人工智能·神经网络·学习
源远流长jerry8 小时前
STM32F103ZET6按键中断控制灯
stm32·单片机·嵌入式硬件
逼子格9 小时前
逻辑门电路Multisim电路仿真汇总——硬件工程师笔记
笔记·硬件工程师·multisim·电路仿真·逻辑门·硬件工程师学习·电路图