stm32实现Systick的毫秒级延时和微妙级延时

2023-11-12

学习目标:

stm32实现Systick的毫秒级延时和微妙级延时


学习内容:

1、Systick 工作原理

Systick(系统定时器)是ARM Cortex M3/M4 内核的一个外设,因为所有的CM3/M4内核的单片机都带有这个定时器,这使得软件在CM3/M4单片机中可以很容被移植。系统定时器一般用于单片机操作系统产生时间,维持os的心跳和实现任务分时调度等,Systick 定时器是如此的重要,以至于CM3/M4为它专门开出一个异常类型,并且在向量表中有它的一席之地。
Systick是一个24位的向下递的计数器,每当Systick 从时钟源到来一个时钟,其值就会减1,而一般我们将Systick 的时钟源设置为系统时钟 HCLK(72MHz),这样也就意味着每过1/72M秒Systick里的计数器将会减1,当重装载数值寄存器里的值递减为 0 的时候,系统定时器就会产生一次中断,这样就有时间了。之后CPU自动重新装载计数器值并逐渐递减循环往复。
在这里插入图片描述

2、毫秒级延时的实现

Systick上电初始化(外部晶振还没开始工作,此时系统默认使用内部 HSI提供时钟源)
在这里插入图片描述
外部配置好后重新初始化 Systick
在这里插入图片描述
SysTick_Config(SystemCoreClock / (1000u / uwTickFreq)= SysTick_Config ( 72 000 000 / 1000U / HAL_TICK_FREQ_1KH )= SysTick_Config (72 000 )==>SysTick->LOAD = 72000;
SysTick的时钟源为 72MHz,即1秒钟要来72M次时钟脉冲;而此时重装载数值寄存器(LOAD)的值设置为72000,即每来 72K个脉冲就产生一次中断;那每次中断的时间间隔就是:72K/72M=1/1000秒=1ms。
这样我们就能够通过Systick定时器的中断实现毫秒级的延时了。

3、微秒级延时的实现

例如:STM32L433除了通用的Systick定时器以外,另外还有6个定时器:TIM1、TIM2、TIM6、TIM7、TIM15、TIM16。TIM6、TIM7是两个16位的自装载基本定时器,它们只能作定时使用,而TIM1、TIM2、TIM15、TIM16则是通用高级定时器,除了定时功能以外还能作 PWM输出。
接下来我们将选择基本定时TIM6来实现us级的定时功能。
然后我们需要看的是:datasheet
在datasheet中,TIM2,6,7连到APB1总线上,而TIM1,15,16则连到了APB2总线上。
在这里插入图片描述
在这里插入图片描述
配置预分频:
TIM6的输入时钟为APB1时钟 80MHz,这个速率对定时器来说实在太快,
这时需要对它做个预分频: CK_CNT = TIMxCLK/(PSC+1)=80MHz/(80-1+1)=1MHz;
微秒延时配置:
通过修改TIM6定时器的ARR(自动重装载寄存)的值,就可以配置定时
器的超时时间:ARR=1/1MHz = 1us
保存
在这里插入图片描述
由于我们的TIM6定时器为16位计数器即:2^16=65536
设置最大数值6000,中断可以打断,但是计数器人会运行,所以设置6000.
在这里插入图片描述


学习产出:

学会了系统定时的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

stm32实现Systick的毫秒级延时和微妙级延时 的相关文章

  • 139-基于stm32单片机老人居家监护报警系统Proteus仿真+源程序

    资料编号 139 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 MQ4传感器 电位器模拟 MQ2传感器 电位器模拟 蜂鸣器 电机 制作一个基于stm32单片机老人居家监护报警系统Proteus仿真 2 通过MQ2传
  • HAL库STM32常用外设教程(二)—— GPIO输入\输出

    HAL库STM32常用外设教程 二 GPIO输入 输出 文章目录 HAL库STM32常用外设教程 二 GPIO输入 输出 前言 一 GPIO功能概述 二 GPIO的HAl库驱动 三 GPIO使用示例 1 示例功能 四 代码讲解 五 总结
  • rt-thread studio中新建5.02版本报错

    先吐槽一下 rt thread studio出现BUG真多 好多时间都是在找BUG 但里面用好多控件还是挺好用的 真是又爱又恨 所以一般使用功能不多的话还是用keil多一点 创建5 02版本工程之后直接进行编译 直接会报下面这个错误 资源
  • STM32F103

    提示 来源正点原子 参考STM32F103 战舰开发指南V1 3PDF资料 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 开发环境硬件普中科技 接线图在g
  • HAL库学习

    CMSIS简介 CMSIS Cortex Microcontroller Software Interface Standard 微控制器软件接口标准 由ARM和其合作的芯片厂商 ST NXP 软件工具厂商 KEIL IAR 共同制定的标准
  • HAL 锁定和解锁函数如何使用以及为什么?

    我试图理解另一位程序员编写的代码 它使用了I C http en wikipedia org wiki I C2 B2C通信以将数据写入 STM32 微控制器的 EEPROM 一般来说 我理解他的代码是如何工作的 但我不明白他为什么使用HA
  • VS Code 有没有办法导入 Makefile 项目?

    正如标题所说 我可以从现有的 Makefile 自动填充 c cpp properties json 吗 Edit 对于其他尝试导入 makefile 的人 我找到了一组脚本 它们完全可以实现我想要实现的目标 即通过 VS Code 管理
  • 跟着野火学FreeRTOS:第一段(任务定义,切换以及临界段)

    在裸机系统中 系统的主体就是 C P U CPU CP U 按照预先设定的程序逻辑在 m a i n
  • 跟着野火学FreeRTOS:第一段(任务定义,切换以及临界段)

    在裸机系统中 系统的主体就是 C P U CPU CP U 按照预先设定的程序逻辑在 m a i n
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • STM32的HAL中实现单按、长按和双按功能

    我正在尝试实现单击 双击和长按功能来执行不同的功能 到目前为止 我已经理解了单击和长按的逻辑 但我不知道如何检测双击 至于代码 我使用计数器实现了单击和长按 但代码仅停留在第一个 if 条件上 bool single press false
  • 无法使用 OpenOCD 找到脚本文件

    我正在尝试按照本教程将 OpenOCD 与我的 ST 发现板一起使用 https japaric github io discovery README html https japaric github io discovery READM
  • 毕设开题分享 单片机智能教室系统(智能照明+人数统计)

    1 简介 Hi 大家好 今天向大家介绍一个学长做的单片机项目 单片机智能教室系统 智能照明 人数统计 大家可用于 课程设计 或 毕业设计 项目分享 https gitee com feifei1122 simulation project
  • Arm:objcopy 如何知道 elf 中的哪些部分要包含在二进制或 ihex 中?

    我正在开发一个项目 其中涉及解析arm elf 文件并从中提取部分 显然 elf 文件中有很多部分没有加载到闪存中 但我想知道 objcopy 到底如何知道要在二进制文件中包含哪些部分以直接闪存到闪存中 以arm elf文件的以下reade
  • 库函数点亮Led

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 例如 随着人工智能的不断发展 机器学习这门
  • systick定时器

    systick定时器 文章目录 前言 一 前期疑惑 二 解答 1 关于systick是阻塞的吗 2 非阻塞 三 软件编写 总结 前言 这边记录systick相关知识点 一 前期疑惑 在学习systick志气啊 其实对于systick还是一脸
  • 核心耦合内存在 STM32F4xx 上可执行吗?

    尝试从 STM32F429s CCM 运行代码 但每当我命中 CCM 中的第一条指令时 我总是会遇到硬故障 并且 IBUSERR 标志被设置 该指令有效且一致 STM32F4xx 是否可能不允许从 CCM 执行 数据访问效果良好 alios
  • 使用 STM32F0 ADC 单独读取不同的输入

    STM32F072CBU 微控制器 我有多个 ADC 输入 并且希望单独读取它们 STMcubeMX 生成样板代码 假设我希望按顺序读取所有输入 但我无法弄清楚如何纠正这个问题 这篇博文 http blog koepi info 2015
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d
  • 读取STM32 MCU SPI数据寄存器的值

    有很多类似的问题 但似乎没有一个问题完全相同 我正在将 STML4 MCU 连接到 6 轴传感器 LSM6DS3 我已经成功地在 I2C 中实现了所有内容 但想要 SPI 的额外速度 和 DMA 如果我能让这些第一步工作起来的话 因此 第一

随机推荐

  • ldirectord 介绍

    一引言 如何在一个计算机网络中用有限的资源部署计算机 以及安装自由软件让计算机象一台服务器那样一起运行 其中第十五章描述如何建立一个高可用 企业级的LVS DR集群 本文说的是ldirectord是如何监视集群节点 真实服务器 的 1 介绍
  • weex studio爬坑之旅之禁止ESLint

    weex studio爬坑之旅之禁止ESLint ESLint据说是个很好的插件 但是对我这种刚学weex的新手 在安装vue和weex ui后是免不了ctrl v的 但是运行后预览界面打不开着实让人头疼 weex studio也发行了许久
  • FPGA方案选型指引

    本文将提供一些有关如何为您的设计选择 FPGA 的指南 和其他项目选型一样 首先 您需要收集项目的所有需求 然后按重要性权衡您的需求 然后找到最适合您当前和未来产品的 FPGA 您的决定不应仅仅基于技术要求 还应基于商业需求 比如 在您的设
  • HCNP路由交换学习指南(第一章)学习笔记

    什么是路由 IP网络最基本的功能就是为处于网络中不同位置的设备之间实现数据互通 为了实现这个功能 网络中的设备需具备将IP报文从员转发到目的地的能力 以路由器为例 当一台路由器收到一个IP报文时 它会在自己的路由表中执行路由查询 寻找匹配该
  • word文档上粘贴源代码

    有时编辑文档时 我们需要将源代码粘贴进去 但是总不是我们想要的样式 这里演示一种结合notepad 将代码粘贴到word的方法 可以保留代码的源格式 粘贴效果如下 与代码编辑时显示一模一样 方法 借助notepad 1 将代码粘贴到note
  • C++学习日志(输出vector<string>内容)

    前言 标准库类型vector 标准库类型vector表示对象的集合 其内所有的对象类型都相同 使用vector必须包含头文件 include
  • 输出错误:TypeError: must be real number, not str

    输出错误 TypeError must be real number not str 在运行以下代码时显示错误 fo open outName w head1 diamond 3 date hour dataInfo n head2 yy
  • 2021年涡阳四中高考成绩查询,振奋人心,全是省重点!高考成绩出来了,涡阳家长快来看看!...

    原标题 振奋人心 全是省重点 高考成绩出来了 涡阳家长快来看看 2020年高考成绩已经揭晓 亳州哪些学校高考成绩优异 小编带你走进四所名校 感受名校风采 分享桃李芬芳 亳州一中 亳州一中历史悠久 人文底蕴深厚 2020年高考 亳州一中继续保
  • SpringBoot 自定义starter的三种方式

    虽然自定义的starter与版本无关 但还是说明一下版本 SpringBoot 版本2 1 4 RELEASE 1 命名问题 由于官方提供的starter 命名格式为spring boot starter xxx 为与官方的starter区
  • 安装MySQL绿色版本,不用装软件、不用装软件、不用装软件

    安装MySQL绿色版本 不用装软件 不用装软件 不用装软件 MySQL也有绿色版本的 不用安装MySQl软件 下载后解压 简单配置和后 就可以直接使用 1 第一步下载免安装版本 官网链接如下 MySQL Download MySQL Com
  • Centos7升级ssh

    1 备份原有文件 mkdir ssh bak cp etc ssh etc ssh bak 2 安装并启动Telnet yum install telnet telnet server xinetd y systemctl start te
  • Unity 2D射线基本使用和画线

    2D射线可以检测到挂载了Collider2D的对象 包括isTrigger 2D射线常用的是 Physics2D Raycast 函数 它的描述为 向场景中的碰撞体投射射线 射线投射 类似于从空间中的某个点朝特定方向发射一条光束 在该过程中
  • golang---http服务创建,路由注册,请求处理源码

    服务器创建部分 main func main StartHttpServer StartHttpServer func StartHttpServer http HandleFunc go httpHandle http ListenAnd
  • STM32F407控制180度舵机

    其中主要分为两部分 时钟的初始化和主函数的控制部分 时钟的初始化 选用TIM14时钟 F9引脚作为信号控制引脚 void TIM14 PWM Init u32 arr u32 psc GPIO InitTypeDef GPIO InitSt
  • vue树形控件【页面渲染】

    在Vue中渲染树形控件的常见方法是使用递归组件 递归组件基于组件自身调用自身的方式来构建树形结构 以下是一个简单的树形结构的组件示例
  • rand()的最大值

    rand 函数是一个在开发的时候比较常用的函数 但这个函数返回随机数的取值范围并非多大的值都可以 在工作修一个抽奖活动bug的时候曾经遇到这样一种情况 当总权重大于rand的最大值2 16 32767的时候 rand返回的值将不会大于327
  • vue element插件this.$confirm用法(取消也可以发请求)

    场景 弹出框的两个按钮都能分别请求接口 最简单的弹出框就是 确定 取消 一般用户点击确定才会继续接下来的动作 点击取消则不做任何动作 即不会请求接口 如
  • Chromium OS初体验 就是一款Linux

    好奇 弄了一个Chromium OS for VMWare 玩玩 发现Chromium OS并非像我之前想象的一样 并非完全是一个自主研发的独立操作系统 启动 Chromium OS 时 vmware 被设置成图形模式 但一片漆黑什么都看不
  • 【OpenCV】Blob斑点检测学习笔记

    设置 SimpleBlobDetector 参数 params cv2 SimpleBlobDetector Parms 改变阈值 params minThreshold 自定义下阈值 params maxThreshold 自定义上阈值
  • stm32实现Systick的毫秒级延时和微妙级延时

    学习目标 stm32实现Systick的毫秒级延时和微妙级延时 学习内容 1 Systick 工作原理 Systick 系统定时器 是ARM Cortex M3 M4 内核的一个外设 因为所有的CM3 M4内核的单片机都带有这个定时器 这使