当前位置: 首页 > news >正文

【星闪】Hi2821 | SysTick系统定时器

1. 简介

        hi2821 和 STM32 一样也有系统定时器,系统定时器的优点是配置及功能简单,可以用来实现一般的计时、计数、延时等任务。

        hi2821 的 SysTick 使用外部 32.768kHz 晶振或内部 32kHz 时钟作为时钟源,默认为内部晶振。hi2821 的 SysTick 包含 2 个 32 位的计数寄存器,可以单独使用也可串联一起使用,当串联使用时,计数值最高可为 2^{64}-1

2. 函数接口

  • uapi_systick_init(void):初始化Systick;
  • uapi_systick_deinit(void):去初始化Systick;
  • uapi_systick_count_clear(void):清除Systick计数;
  • uapi_systick_get_count(void):获取Systick计数值;
  • uapi_systick_get_s(void):获取Systick计数秒值;
  • uapi_systick_get_ms(void):获取Systick计数毫秒值;
  • uapi_systick_get_us(void):获取Systick计数微秒值;
  • uapi_systick_delay_count(uint64_t c_delay):按count计数延时(c_delay表示延时时间);
  • uapi_systick_delay_s(uint32_t s_delay):按秒数延时(s_delay表示延时时间);
  • uapi_systick_delay_ms(uint32_t m_delay):按毫秒数延时(m_delay表示延时时间);
  • uapi_systick_delay_us(uint32_t u_delay):按微秒数延时(us_delay表示延时时间);
  • uapi_systick_suspend(uintptr_t arg):挂起Systick模块,低功耗情况使用(arg表示挂起时所需要的参数);
  • uapi_systick_resume(uintptr_t arg):恢复Systick模块,低功耗情况使用(arg表示恢复时所需要的参数)。

3. 例程

        例程中只是简单演示获取计数和计时相关的函数接口,延时相关的接口已经集成到 LiteOS 的系统接口中了,无需调用 SysTick 的接口。

3.1 Kconfig

        因为 LiteOS 的系统心跳是依靠 SysTick 的,因此 SDK 中自然是默认打开相关的配置选项。如果有需要可以使能下面的计数寄存器串联功能。

3.2 代码

#include "soc_osal.h"
#include "app_init.h"
#include "securec.h"
#include "systick.h"#include <string.h>
#include <stdint.h>void app_main(void *unused)
{(void)(unused);while (1) {uint64_t tick = uapi_systick_get_count();uint64_t s = uapi_systick_get_s();uint64_t ms = uapi_systick_get_ms();uint64_t us = uapi_systick_get_us();osal_printk("tick: %lld, s: %lld, ms: %lld, us: %lld\r\n",tick,s,ms,us);osal_msleep(1000);}
}

        SysTick 的初始化,即 uapi_systick_init 函数,用户是不需要调用的,因为系统在初始化的时候就已经调用了一次了。

        代码当中可以直接调用相关函数获取计数值。需要注意的是,如果获取微秒值,它的最小计数单位是 \frac{1}{32000}\times 1000000=31.25us(使用内部32kHz时钟),所以如果调用速度很快可能会出现前后两次的值是一样的

3.3 测试

http://www.dtcms.com/a/334690.html

相关文章:

  • 《Python学习之字典(二):高级操作与实战技巧》
  • Python训练Day45
  • 无痕HOOK 检测及对抗
  • 嵌入式硬件篇---BuckBoost电路
  • Windows 命令行:ping 命令
  • 中级统计师-会计学基础知识-第三章 会计凭证与会计账簿
  • 福彩双色球第2025094期篮球号码分析
  • PAMI-2025《Fair Clustering Ensemble With Equal Cluster Capacity》
  • 【完整源码+数据集+部署教程】高尔夫球追踪与识别系统源码和数据集:改进yolo11-LAWDS
  • 026 inode 与软硬链接
  • [Oracle数据库] Oracle 复杂查询
  • 8.15 JS流程控制案例+解答
  • java 面试八股集锦
  • K8S HPA 弹性水平扩缩容 Pod 详解
  • 西门子SMART PLC监控时间戳问题BUG修复
  • Cursor执行命令卡顿解决办法(Cursor卡住、Cursor命令卡住、Cursor执行慢、Cursor执行命令慢)改成以管理员身份运行就好!!!
  • 《探索IndexedDB实现浏览器端UTXO模型的前沿技术》
  • 【CPP】自己实现一个CPP小工具demo,可以扩展其他选项
  • homebrew 2
  • pytorch例子计算两张图相似度
  • 创建maven module中的override
  • Maven下载和配置-IDEA使用
  • 自动化测试的下一站:AI缺陷检测工具如何实现“bug提前预警”?
  • uniapp跨端适配方案
  • Qt 动态属性(Dynamic Property)详解
  • SDN安全开发环境中常见的框架,工具,第三方库,mininet常见指令介绍
  • 【基础-判断】HarmonyOS提供了基础的应用加固安全能力,包括混淆、加密和代码签名能力
  • 守护品质安全,防伪溯源系统打造全链路信任体系
  • 物联网 (IoT) 的顶级硬件平台
  • IEEEtaes.cls解析