IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> HAL 库中的 SYS 时基源(Timebase Source)选择Systick/TIM区别,以及 SysTick_Handler() -> 正文阅读

[嵌入式]HAL 库中的 SYS 时基源(Timebase Source)选择Systick/TIM区别,以及 SysTick_Handler()

在基于STM32 HAL的项目中,一般需要维护两个主要的“时基”:

① HAL 时基、SYS 时基源
② 操作系统时基(仅在使用操作系统时考虑)

如何维护这些“时基”主要有两个因素:

① 裸机操作
② 与操作系统一起运行

1.裸机操作

这种情况下,唯一需要维护的时间就是SYS Timebase Source,也就是HAL库中的uwTick,是HAL库中维护的一个全局变量,比如在stm32f1xx_hal.c/stm32f4xx_hal.c等不同系列文件 两者都有以下定义:

在这里插入图片描述

在这里插入图片描述
由此,我们可以通过SysTick(tick timer)或者SYS Timebase Source来维护SYS Timebase Source。在裸机运行的情况下,我们一般选择默认的SysTick(tick timer)模式,直接放在SysTick_Handler()中断服务函数中进行维护。

用 CubeMX 生成代码后,你会看到SysTick_Handler()中断服务函数(没有不相关、不重要的代码和注释)如下:

在这里插入图片描述
HAL_SYSTICK_IRQHandler ()实际上是空的,留给用户实现它,而忽略它。所以SysTick_Handler()中断服务函数中最主要的是HAL_IncTick(),它的定义(没有无关的,不重要的代码和注释)如下:
在这里插入图片描述
这是裸机运行情况下SYS Timebase Source的维护。

2. 运行操作系统

前面提到的SYS Timebase Source是STM32 HAL库的新增部分,用于实现HAL_Delay()以及各种超时时钟参考。

使用OS(操作系统)后,OS的运行也需要时钟基准(简称“时基”)来管理任务和时间。而这个OS,时基一般都是由SysTick(tick timer)来维护的,那么就需要考虑“HAL时基”和“OS时基”是否要共享SysTick(tick timer)了。

2.1 分享SysTick(滴答计时器)

如果你用过 CubeMX,那你一定知道,当我们在 CubeMX 中选择启用 FreeRTOS 时,CubeMX 在生成代码时会报如下提示:
在这里插入图片描述

的一般含义是:强烈建议用户在使用时不要使用 FreeRTOS FreeRTOS SysTick(tick timer)作为“HAL时基”使用,因为需要用到FreeRTOS,最好换一个!!!

如果直接选择“是”忽略这个警告,代码也可以正常生成,最后可以看到生成的SysTick_Handler()中断服务函数(省略不相关、不重要的代码和注释)如下:
在这里插入图片描述
上面已经实现了HAL和OS共享SysTick(tick timer)来维护各自的时基。

由于本人从未在实际项目中这样分享过,所以不好猜测好不好,会有什么潜在风险等等。但是由于CubeMX(代表ST)都建议我们不要不要这样用,而且STM32还有很多其他的定时器可以使用,我们不需要这样挑资源。

2.2 不同时基的分别处理

CubeMX报出上述警告后,我们可以选择“No”,然后将SYS Timebase Source选项改成任意定时器,例如选择TIM7,如下图:
在这里插入图片描述
然后生成代码,可以看到:

操作系统时基使用的SysTick_Handler()中断服务函数(没有不相关、不重要的代码和注释)变为:
在这里插入图片描述
并且HAL的时基已经放入我们选择的TIM7的回调函数中(省略不相关、不重要的代码和注释)进行处理:
在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:50:48  更:2022-10-17 12:55:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:31:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码