stm32(十)滴答定时器

2023-11-19

1、系统滴答定时器的概述

滴答定时器又称 SysTick,有两个时钟源,一个为内部时钟,一个为外部时钟。滴答定时器是一个 24 位倒计
数的定时器,从预装载值一直到 0,重装载寄存器的值会自动装载到计数寄存器中。 只要不把它使能位清除,那
么它就永远不停,即使在芯片在睡眠模式下也能工作。

2、滴答定时器的内部框图

系统滴答定时器的是一个倒计数计数器,作用是:通过计数来定时。常用于:①操作系统的心跳时钟。②裸机代码中的简单定时。

STM32F407ZGT6的系统滴答定时器的计数频率为21MHZ或者为168MHZ。系统滴答定时器控制器有一个“自动重装载寄存器”,该寄存器是24位有效。

举例:假如系统滴答定时器的计数频率设置为21MHZ,定时1ms,需要计数21000,则将该值写入“自动重装载寄存器”。然后系统滴答定时器还有一个“当前值寄存器”,“当前值寄存器”加载“自动重装载寄存器”中的值,在每个时钟节拍下,“当前值寄存器”的置递减,递减到0,则定时时间到。

3、相关寄存器

详细资料在《Cortex M3 与 M4 权威指南》第 315 页

3.1、控制及状态寄存器(SysTick_CTRL

举例:将滴答定时器的计数频率设置为21MHZ,禁止产生滴答中断,使能滴答定时器,如何配置?

SysTick->CTRL &=~(1<<2);

SysTick->CTRL &=~(1<<1);

SysTick->CTRL |= (1<<0);

3.2、自动重装载数据寄存器(SysTick_LOAD)

只有低 24 位有效,数值有效范围为 0-(2^24-1)。 当 SysTick 定时器倒计数到 0 时,该寄存器的值就会把计
数初始值重新加载到计数器中工作。

举例1:将滴答定时器的计数频率设置为21MHZ,禁止产生滴答中断,使能滴答定时器,定时时间为1us,如何配置?

答1:

SysTick->CTRL &=~(1<<2);

SysTick->CTRL &=~(1<<1);

SysTick->LOAD = 0;        //清零

SysTick->LOAD = 21;       //计21次为1us

SysTick->CTRL |= (1<<0);

举例2:将滴答定时器的计数频率设置为21MHZ,禁止产生滴答中断,使能滴答定时器,最大定时时间是多少?

重装载数值寄存器的最大值是16777215,则最大定时时间是:(1/21000000)*16777215 = 0.798915秒。

3.3、当前值寄存器(SysTick_VAL)

这个寄存器同样只有低 24 位有效, SysTick 定时器倒计数寄存器。读取时返回当前倒计数的值,对这个寄存
器进行写操作,则使之清零,并对到零标志位清零。
3.4. 设置延迟时间
由上面寄存器可知,定时器计数的周期为 SysTick-LOAD 寄存器的值和选择的时钟源有关。例如:选择时钟频
率为 24MHz 的时钟,即周期为 1/24000000s,所以假如要实现定时 1s,则需要设置装载值为 24000000(1s=
(1/24000000) *24000000)。同理可得 1ms 需要设置装载值为 21000, 1us 需要设置装载值为 21。
 

4、软件设计

寄存器

#include "stm32f4xx.h"
void delay_ms(int ms)
{
	SysTick->CTRL &=~(1<<2);//选择时钟源为21MHZ
	SysTick->CTRL &=~(1<<1);//禁止滴答中断
	SysTick->LOAD = 21000*ms; //设置重装载寄存器的值
	SysTick->CTRL |= (1<<0);//使能滴答定时器
	while(!(SysTick->CTRL&(1<<16)));//阻塞判断定时时间是否到达,判断SysTick->CTRL的位
}
int main(void)
{
	LED_Init();
	while(1)
	{
		GPIOF->ODR |= (1<<6);//GPIOF_ODR的位6置1则输出高电平
		Delay_ms(500);//延时500ms
		GPIOF->ODR &= ~(1<<6);//GPIOF_ODR的位6清零则输出低电平
		Delay_ms(500);//延时500ms
	}
}
void delay_s(int s)
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK); //选择时钟
SysTick->VAL =0;
SysTick->LOAD =s*24000000; //设置预装载值
SysTick->CTRL =1; //使能滴答定时器
while(!(SysTick->CTRL &(1<<16))); //等待计数完成
SysTick->CTRL =0; //失能滴答定时器
}
void delay_ms(int ms)
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
SysTick->VAL =0;
SysTick->LOAD =ms*24000;
SysTick->CTRL =1;
while(!(SysTick->CTRL &(1<<16)));
SysTick->CTRL =0;
}
void delay_us(int us)
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
SysTick->VAL =0;
SysTick->LOAD =us*24;
SysTick->CTRL =1;
while(!(SysTick->CTRL &(1<<16)));
SysTick->CTRL =0;
}
int main(void)
{
	LED_Init();
	while(1)
	{
		GPIO_SetBits(GPIOF,GPIO_Pin_9);
		delay_s(2);
		GPIO_ResetBits(GPIOF,GPIO_Pin_9);
		delay_s(2);
	}
}

 

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

stm32(十)滴答定时器 的相关文章

  • 如何让printf在STM32F103上工作?

    我是 STM32F103 世界的新手 我有一个STM32F103的演示代码 我正在使用arm none eabi来编译它 我尝试了在谷歌上可以找到的内容 但到目前为止没有任何效果 我已经花了三天时间来解决这个问题 任何人都可以给我一个运行良
  • STM32 F072上的软件如何跳转到bootloader(DFU模式)?

    STM32应用笔记2606对此进行了讨论 但没有简单的代码示例 该答案已使用 IAR EWARM 在 STM32F072 Nucleo 板上进行了测试 这个答案使用 STM32标准外设库 仅此而已 请注意 验证您是否成功进入引导加载程序模式
  • 当数据大小较小时,内存到内存 DMA 传输是否需要权衡?

    我正在学习 STM32 F4 微控制器 我正在尝试找出使用 DMA 的限制 根据我的理解和研究 我知道如果数据量较小 即设备使用DMA生成或消耗少量数据 则开销会增加 因为DMA传输需要DMA控制器执行操作 从而不必要地增加系统成本 我做了
  • 140-基于stm32单片机智能晾衣杆控制系统Proteus仿真+源程序

    资料编号 140 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 光敏传感器 蜂鸣器 LED灯 制作一个基于stm32单片机智能晾衣杆控制系统Proteus仿真 2 通过光敏传感器
  • STM32F103

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

    文章目录 一 超声波图片 二 时序图 三 超声波流程 四 单位换算 五 取余计算 六 换算距离 七 超声波代码 一 超声波图片 测量距离 2cm 400cm 二 时序图 1 以下时序图要先提供一个至少10us的脉冲触发信号 告诉单片机我准备
  • 物联网网关

    物联网网关是 连接物联网设备和互联网的重要桥梁 它负责将物联网设备采集到的数据进行处理 存储和转发 使其能够与云端或其它设备进行通信 物联网网关的作用是实现物联网设备与云端的无缝连接和数据交互 物联网网关功能 数据采集 物联网网关可以从物联
  • HAL库学习

    CMSIS简介 CMSIS Cortex Microcontroller Software Interface Standard 微控制器软件接口标准 由ARM和其合作的芯片厂商 ST NXP 软件工具厂商 KEIL IAR 共同制定的标准
  • STM32F103概要

    The STM32F103x4 STM32F103x6 STM32F103xC STM32F103xD and STM32F103xE are a drop in replacement for STM32F103x8 B medium d
  • [屏驱相关]【SWM166-SPI-Y1.28C1测评】+ 有点惊艳的开箱

    耳闻华芯微特许久了 看到论坛得评测活动赶紧上了末班车 毕竟对有屏幕得板子也是很喜欢得 京东快递小哥客客气气 微笑着把快递给了我 好评 直接拆了包 在此之前没看过视频号 所以这个圆盘盘得模具还是有点惊喜的 正面照如下 开机有灯光秀 还有动画
  • 硬件基础-电容

    电容 本质 电容两端电压不能激变 所以可以起到稳定电压作用 充放电 电容量的大小 想使电容容量大 使用介电常数高的介质 增大极板间的面积 减小极板间的距离 品牌 国外 村田 muRata 松下 PANASONIC 三星 SAMSUNG 太诱
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • Freertos低功耗管理

    空闲任务中的低功耗Tickless处理 在整个系统运行得过程中 其中大部分时间都是在执行空闲任务的 空闲任务之所以执行 因为在系统中的其他任务处于阻塞或者被挂起时才会执行 因此可以将空闲任务的执行时间转换成低功耗模式 在其他任务解除阻塞而准
  • 嵌入式开发--STM32G4系列片上FLASH的读写

    这个玩意吧 说起来很简单 就是几行代码的事 但楞是折腾了我大半天时间才搞定 原因后面说 先看代码吧 读操作 读操作很简单 以32位方式读取的时候是这样的 data IO uint32 t 0x0800F000 需要注意的是 当以32位方式读
  • 嵌入式 C++11 代码 — 我需要 volatile 吗?

    采用 Cortex M3 MCU STM32F1 的嵌入式设备 它具有嵌入式闪存 64K MCU固件可以在运行时重新编程闪存扇区 这是由闪存控制器 FMC 寄存器完成的 所以它不像a b那么简单 FMC 获取缓冲区指针并将数据刻录到某个闪存
  • STM32 上的位置无关代码 - 指针

    我已成功在 STM32 上构建并运行位置无关的代码 向量表和 GOT 已修补 一切正常 但我对这样的代码有问题 double myAdd double x return x 0 1 double ptrmyAdd double myAdd
  • 在 Contiki 程序中使用 malloc

    考虑以下 Contiki 程序 include
  • 使用 STM32F0 ADC 单独读取不同的输入

    STM32F072CBU 微控制器 我有多个 ADC 输入 并且希望单独读取它们 STMcubeMX 生成样板代码 假设我希望按顺序读取所有输入 但我无法弄清楚如何纠正这个问题 这篇博文 http blog koepi info 2015
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能

随机推荐

  • exe4j打包exe_JDK11及以后版本在Win下的打包发布方法

    概述 我在准备使用高版本jdk后 遇到的最麻烦的问题就是打包发布了 主要原因还是jdk的模块化带来的 在经历了长时间折腾后 终于成功完成了这个 当然 只是针对window下的 想要使用高版本jdk打包发布Windows应用 需要准备 exe
  • js中的对象 函数 原型

    关于 Function Object 和 proto prototype 1 每一个对象实例都有一个 proto 属性 这个属性就是指向 对象构造函数的原型 let b new Function console log b proto Fu
  • 【Matlab图片剪裁】

    标题Matlab剪裁图片 提取感兴趣部分 问题描述 当需要从一幅图片中提取一些感兴趣的内容时 比如一些细小的文字 图案等 如果从整个图片中直接提取 必然会大大增加计算量 导致处理时间很长 而且多数计算都是无效计算 进而非常消耗资源 解决办法
  • impala 错误

    问题一 impala state store unrecognized service 原因 当前节点未成功安装impala server impala state store impala catalog 解决方案 yum install
  • Qt生成log日志文件

    摘要 本文在Qt程序中实现了日志功能 读者可以在此基础上进一步创作和拓展 介绍 系统日志一般指存放系统重要运行信息的log txt文件 主要作用有两个 1 记录系统重要的运行信息 2 当系统突然崩溃时 可以根据日志来跟踪和定位程序错误 Qt
  • 常见CAD/CAM控件大全

    前言 CAD CAM 计算机辅助设计与制造 技术是随着计算机和数字化信息技术发展而形成的新技术 是20世纪最杰出的工程成就之一 也是数字化 信息化制造技术的基础 其发展和应用对制造业产生了巨大的影响和推动作用 经过几十年的发展和应用 不仅C
  • Python+Selenium爬虫之动态验证码的处理

    目录 1 拖动下方滑块完成拼图 单独图片 2 拖动下方滑块完成拼图 共同图片 可拖动验证码分为空缺区域为单独的图片和空缺区域与背景图片为一个共同图片 所以实现方式有2种 1 拖动下方滑块完成拼图 单独图片 拖动验证码 实现原理 查看空缺区域
  • [VScode]终端回应“pnpm : 无法将“pnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。“解决思路

    问题概述 遇到问题 在VScode终端输入pnpm install有错误提示 pnpm 无法将 pnpm 项识别为 cmdlet 函数 脚本文件或可运行程序的名称 请检查名称的拼写 如 果包括路径 请确保路径正确 然后再试一次 所在位置 行
  • wps表格中的文字不能顺利水平居中的解决办法

    今天调整别人做的表格 想要把表格中文字水平居中 竟然指令操作后发现很多行的表格无动于衷 发现这样设置一下应该可以解决 WPS文字右边有个小的下拉箭头 选择 格式 段落进行设置 段前段后设置为0 行距设置为单倍行距或者固定行距 固定行距需要测
  • maven私服不能重复部署解决方法

    maven私服不能重复部署解决 1 报错 Return code is 400 ReasonPhrase Repository does not allow updating assets maven releases 2 原因 经排查发现
  • Elasticsearch 7.x生产配置

    虽然Elasticsearch需要很少的配置 但是有一些设置需要手动配置 并且必须在进入生产之前进行配置 1 官方文档 这些重要配置说明 请参考官方文档 https www elastic co guide en elasticsearch
  • c++得到窗口句柄

    include
  • Gitlab Java API 使用示例(亲测、有效)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 简介 一 依赖 常量 Maven依赖 定义常量类 二 增删改查 1 新增私有仓库 2 删除指定仓库 3 修改项目简介和是否开源 三 后续更新 简介 在开发中 偶尔会
  • 算法学习——动态规划的学习

    作者 小 琛 欢迎转载 请标明出处 引言 动态规划是算法中较难的内容 常常被用来区分学习者的档次 笔者也是在面试中发现了这个问题 故而回头认真学习并总结递归算法 希望能够帮助到阅读的你 文章目录 动态规划的思想 动态规划的具体实现步骤 入门
  • QThread介绍

    一 介绍 Qt中的QThread类提供了与平台无关的线程 一个QThread代表了一个在应用程序中可以独立控制的线程 它与进程中的其他线程分享数据 但是是独立执行的 相对于一般的程序都从main 函数开始执行 QThread从run 函数开
  • Q_D指针(d指针)和Q_Q指针(q指针)简介

    文章目录 1 Q D指针 2 Q Q指针 1 Q D指针 在class中配合使用 Q DECLARE PRIVATE 和 Q D 方便获取d指针 d指针指向Class Private 2 Q Q指针 在class Private配合使用 Q
  • 记录--Vue中如何导出excel表格

    这里给大家分享我在网上总结出来的一些知识 希望对大家有所帮助 一 导出静态数据 1 安装 vue json excel npm i vue json excel 注意 此插件对node有版本要求 安装失败检查一下报错是否由于node版本造成
  • hive、impala、prestoDB 优缺点对比

    hive 优点 缺点 被广泛应用 经受时间的考验 既然是基于Mapreduce 也拥有MapReduce所有缺点 包含昂贵的Shuffle操作和磁盘IO操作 运行在Mapreduce框架之上 hive仍然不支持多个reduce操作group
  • JavaScript系列——数组元素左右移动N位算法实现

    引言 在自己刚刚毕业不久的时候 去了一家公司面试 面试官现场考了我这道题 我记忆深刻 当时没有想到思路 毫无疑问被面试官当成菜鸟了 最近刚好在研究数组的各种算法实现 就想到这道题 可以拿来实现一下 纪念自己逝去的青春 需求 假设有这样一个数
  • stm32(十)滴答定时器

    1 系统滴答定时器的概述 滴答定时器又称 SysTick 有两个时钟源 一个为内部时钟 一个为外部时钟 滴答定时器是一个 24 位倒计 数的定时器 从预装载值一直到 0 重装载寄存器的值会自动装载到计数寄存器中 只要不把它使能位清除 那 么