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

如何实现Delay_us和Delay_ms延时(SysTick定时器)

SysTick定时器(System Tick Timer)是ARM Cortex-M内核中自带的一个24位递减计数器,通常用于产生系统节拍中断,为操作系统提供时基或用于一般性定时功能。它具有以下特点和用途:

一、SysTick的介绍

1. SysTick的主要用途(计时)

操作系统心跳时基:在实时操作系统(RTOS)中,SysTick通常用于产生周期性中断,作为系统节拍,触发任务切换和延时计时等功能。

精确延时:在裸机开发中,SysTick可用于实现精确延时,适合对时间敏感的应用场景。

通用计时器:在没有其他通用计时器的情况下,SysTick可以用作简单的通用定时器。

2. SysTick的工作原理

SysTick定时器是一个24位的递减计数器,在装载寄存器(LOAD寄存器)中设置初始计数值后,定时器以固定频率递减计数。当计数到零时会产生一次中断,并重新装载计数值,开始新一轮计时。

SysTick可以选择系统时钟(HCLK)或HCLK的1/8作为时钟源。

3. SysTick定时器的寄存器

CTRL(控制和状态寄存器:用于配置启用/禁用SysTick定时器、中断、时钟源选择等。

LOAD(装载寄存器:设置计数的初始值,定时器每次计数到0后会重新装载这个值。

VAL(当前计数值寄存器):显示当前剩余的计数值。

4. 与其他定时器的区别

与其他定时器的不同(物理上):通用、基本、高级定时器位于STM32的外设模块中,通常由STM32微控制器的制造商(STMicroelectronics)提供,不属于ARM内核的一部分。这些定时器具有更丰富的功能,比如输入捕获、输出比较、PWM、编码器接口等。

二、SysTick时钟频率的设置

SysTick定时器的时钟来源是Cortex-M处理器的时钟,而Cortex-M处理器的时钟来源于外部系统时钟(SYSCLK)

如下图所示:我们设置内核时钟(Cortex的时钟)就是在设置SysTick的时钟频率了。

如何实现,设置例子如下:

参数可以是AHB 时钟(SYSCLK)的8分频或者不分频。

三、SysTick的应用(delayms,delayus)

接下来我们就可以看到如何实现微妙、毫秒的延时了。

代码将SysTick的时钟源设置为系统时钟(HCLK)的1/8

如果系统时钟(HCLK)为72 MHz,那么SysTick的时钟就是 72 MHz / 8 = 9 MHz

这样一来,SysTick定时器每秒钟计数9,000,000次,即每个计数周期的时间为 1/9 MHz = 0.111 微秒

这里fac_us就是一微秒的延时了。那么fac_ms=fac_us*1000就是毫秒了

接下来写delayus和dalayms的函数


http://www.kler.cn/a/386292.html

相关文章:

  • 「QT」文件类 之 QDataStream 数据流类
  • MySQL【三】
  • SQL集合运算
  • 传奇996_21——龙岭事件
  • 丹摩征文活动|丹摩智算平台使用指南
  • 32位、64位、x86与x64:深入解析计算机架构
  • Flink安装和Flink CDC实现数据同步
  • 05 SQL炼金术:深入探索与实战优化
  • Docker平台搭建方法
  • CST案例分析:TLM算法仿真5G毫米波手机天线和整机
  • H.264/H.265播放器EasyPlayer.js无插件H5播放器关于WASM的压缩优化
  • 领略CSS Flex布局的精髓:打造响应式与创新设计
  • 基于开源 AI 智能名片 S2B2C 商城小程序的视频号交易小程序优化研究
  • 人脸识别发展现状及发展前景
  • 【微信小程序】基本语法
  • appium启动 install driver安装驱动
  • 前端入门一之JS对象、字符串对象、数组对象、Data()对象等
  • HTML CSS H5C3样式语句汇总20241105
  • SpringBoot健身房管理系统:敏捷开发实践
  • HTML 鼠标滑动 页面的header背景从透明色变为黑色
  • GitLab基于Drone搭建持续集成(CI/CD)
  • Vue前端开发:animate.css第三方动画库
  • TOSHIBA 74VHC00FT COMS汽车、工业企业的选择
  • windows terminal下载安装并替换vscode默认终端
  • 【Javascript】-一些原生的网页设计案例
  • 【LeetCode】【算法】48. 旋转图像