STM32—系统定时器

1.SysTick简介

SysTick是一种系统定时器,可以用于实现操作系统、任务调度、时钟管理等功能。它通常集成在微控制器中,并且是硬件实现的,具有高精度和可靠性。

在ARM Cortex-M处理器中,SysTick定时器可以配置为计数器模式或外部时钟模式。在计数器模式下,SysTick定时器使用内部时钟作为时基,可以产生中断,以实现系统的定时功能和任务调度。在外部时钟模式下,SysTick定时器使用外部时钟信号作为时基,可以用于协调外部设备的时序和同步。

SysTick定时器通常具有以下特点:

1. 高精度:SysTick定时器通常可以提供高精度的计时功能,以满足实时应用的要求。

2. 灵活性:SysTick定时器可以通过软件配置来适应不同的应用场景和需求。

3. 可编程性:SysTick定时器可以通过编程来实现各种定时功能,例如系统节拍、超时检测、延时等。

2.SysTick使用方法

STM32系列微控制器中的SysTick定时器可以用于实现系统的定时功能和任务调度。以下是使用SysTick的基本步骤:

1. 启用SysTick定时器

首先需要启用SysTick定时器,通过设置SysTick控制和状态寄存器(STK_CTRL)的ENABLE位为1来完成。可以使用以下代码片段实现:

SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;

2. 配置SysTick时钟源

SysTick定时器可以使用内部时钟(CPU时钟)或外部时钟作为时基。通过设置SysTick控制和状态寄存器的CLKSOURCE位来选择时钟源。例如,要使用CPU时钟作为时基,可以使用以下代码片段:

SysTick->CTRL |= SysTick_CTRL_CLKSOURCE_Msk;

3. 配置定时周期

SysTick定时器以一个固定的频率递减计数,当计数达到零时会触发中断。可以通过设置SysTick重载值寄存器(STK_LOAD)来配置定时周期。例如,要设置定时周期为1毫秒,可以使用以下代码片段(假设使用的时钟频率为72MHz):

SysTick->LOAD = 72000-1; // 72MHz / 1000Hz - 1

4. 启用中断

如果需要在定时周期结束时触发中断,可以设置SysTick控制和状态寄存器的TICKINT位为1。例如,要启用中断,可以使用以下代码片段:

SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk;

5. 中断处理

在定时周期结束时,SysTick定时器会触发中断。可以编写中断处理函数来执行相应的操作。例如,在Cortex-M系列处理器中,可以使用以下方式定义SysTick中断处理函数:

void SysTick_Handler(void)
{// 在这里执行需要定时的任务
}

6. 启动定时器

最后,通过设置SysTick控制和状态寄存器的ENABLE位为1来启动定时器。例如,可以使用以下代码片段:

SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;

通过以上步骤,就可以使用SysTick定时器实现系统的定时功能和任务调度了。需要根据具体的需求进行配置和使用,例如调整定时周期、启用/禁用中断等。请注意,具体的寄存器名称和位定义可能因STM32系列型号而有所差异,请查阅相关的参考手册获取准确的信息。

3.SysTick定时器实例

 由于SysTick定时器是内核里面的外设,所以需要包含头文件“core_cm3.h”。

1. SysTick_Config

static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{ //reload寄存器位24bit,最大值为2^24if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);            //配置reload寄存器的初始值                                                             SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; //配置中断优先级为1<<4-1 =15,优先级为最低     NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  //配置counter计数器的值SysTick->VAL   = 0;        //分别配置systick的时钟为72M,使能中断,使能systick                                  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk   | SysTick_CTRL_ENABLE_Msk;                    return (0); 
}                                                

 SysTick_Config()需要传进去一个形参,这个形参是要被写入重装载寄存器LOAD里面。

2.SysTick定时是时间计算 

t = reload * (1/clk)
clk = 72M时   t = (72)*(1/72M) = 1us
clk = 72M时   t = (72000)*(1/72M) = 1ms

3. 编写延时函数

首先调用 SysTick_Config()函数,传入参数72就是1us,72000就是1ms。

SysTick_Config(72);

然后使用一个for循环计数,执行一次for循环就代表1us,for循环里面再用一个while循环,通过CTRL是否置1来 判断是都计时1us。

for(i = 0;i < us; i++){while( ! ((SysTick->CTRL) & (1 << 16)) );}

延时完成后需要关闭定时器

SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;

最后,在main函数中调用这个延时函数并传递 一个形参即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/659590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣hot100 数组中的第K个最大元素 堆 三路划分

Problem: 215. 数组中的第K个最大元素 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 参考 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( log ⁡ n ) O(\log{n}) O(logn) Code class Solution {public int findKthLargest(int[] nums, int k…

5种改进生产 Web 应用服务器设置的方法

简介 一旦你的应用程序在云服务器环境中运行起来&#xff0c;你可能会想知道如何改进你的服务器环境&#xff0c;使其从“能用”跃升到一个完整的生产环境。本文将帮助你开始规划和实施生产环境&#xff0c;通过在云服务器环境中创建一个“生产环境”的宽泛定义&#xff0c;并…

Java:搭建eladmin复习mvn、springboot、vue等

目录 1.源码平台后端&#xff1a; 2.源码平台前端&#xff1a; 3.操作系统&#xff1a;centos7.9 4.mysql:5.7.x 安装 5.redis:5.0.X 6.maven&#xff1a;3.8 7.java:1.8&#xff1a; 8.nodejs:16.x 9.通过mvn打包eladmin后端 10.npm打包前端项目进行部署 11.访问测试…

电子文件归档管理有哪些方法

电子文件归档管理有以下几种方法&#xff1a; 1. 按文件类型归档&#xff1a;将电子文件根据文件类型进行归档管理&#xff0c;如将所有的文档文件放在一个文件夹中&#xff0c;所有的图像文件放在另一个文件夹中&#xff0c;便于管理和查找。 2. 按时间归档&#xff1a;将电子…

力扣经典题目:循环队列

1.虽然是循环队列&#xff0c;但需要提供一个队列为满的情况&#xff0c;所以&#xff0c;要设立一个空的队列元素&#xff0c;当最后一个元素的next指针加一等于第一个元素的时候为满 2.可以增加一个size记录元素个数&#xff0c;当size为0的时候为空&#xff0c;当size为目标…

操作股票的强化学习实现

实现一个操作股票的强化学习模型需要几个关键步骤。以下是一个基本的实现流程&#xff1a; 1. 环境设定 首先&#xff0c;我们需要定义一个环境&#xff0c;该环境会模拟股票市场的动态。环境需要至少提供以下功能&#xff1a; 重置&#xff08;Reset&#xff09;&#xff1…

晶相光电 JX-A05 车规级 200万 像素图像传感器

晶相光电推出的 JX-A05 是一款 1/2.7英寸、3.0m、90fps12bit 的车规级 200万 像素图像传感器。JX-A05 拥有三段曝光 HDR 30fps 技术&#xff0c;实现高达 120dB 的高动态范围。汽车在夜间行驶复杂多变恶劣的光线环境下&#xff0c;JX-A05 拥有优异的夜视全彩成像性能。JX-A05 具…

【HTML 基础】表单标签

文章目录 1. <form>2. <input>3. <select> 和 <option>4. <textarea>5. <button>结语 HTML 表单是互联网上交互性最强的元素之一&#xff0c;它允许用户输入、选择和提交数据。在这篇博客中&#xff0c;我们将介绍 HTML 中一些关键的表单标…

如何写论文——(8)用故事逻辑写文献综述

文献综述一般出现在论文的引言部分&#xff0c;用来支撑自己研究目标的合理性 一、情景Situation 挑出文献中最不具有争议&#xff0c;读者最容易认同的部分来入手 二、冲突Conflication 起伏的开始&#xff0c;是一个显然的挑战或者一个通过分析文献才能发现的潜在的危险或…

brpc之单例

简介 GetLeakySingleton是单例模板类,线程安全的 GetLeakySingleton template <typename T> class GetLeakySingleton { public:static butil::subtle::AtomicWord g_leaky_singleton_untyped;static pthread_once_t g_create_leaky_singleton_once;static void creat…

【AI_Design】Midjourney技巧进阶

目录 参考链接 参考链接 [Midjourney]垫图的5种进阶技巧&#xff0c;让你的生图更精准

MySQL必看表设计经验汇总-下(精华版)

本内容一共分上下两篇 上&#xff1a;MySQL必看表设计经验汇总-上(精华版)-CSDN博客 下&#xff1a;MySQL必看表设计经验汇总-下(精华版)-CSDN博客 目录 7.定义字段尽可能not null 8.合理添加索引 9.不需要严格遵守3NF&#xff0c;通过业务字段冗余来减少表关联 11.避免使用…

使用VScode远程连接Ubuntu

君衍. 一、环境准备二、配置VScode三、远程连接Ubuntu 平常远程连接服务器的工具有很多&#xff0c;比如Moba、Xshell、putty、甚至CRT都可以进行远程连接服务器&#xff0c;但是他们的本质是相同的&#xff0c;都是使用ssh来进行远程连接。 这里我们之所以要使用VScode远程连接…

Hadoop-MapReduce-源码跟读-ReduceTask阶段篇

一、源码下载 下面是hadoop官方源码下载地址&#xff0c;我下载的是hadoop-3.2.4&#xff0c;那就一起来看下吧 Index of /dist/hadoop/core 二、Reducer类 我们先看下我们写的reduce所继承的Reducer类 public class Reducer<KEYIN,VALUEIN,KEYOUT,VALUEOUT> {/*** 传…

Spring Boot 中操作 Bean 的生命周期

1.InitializingBean和DisposableBean InitializingBean接口提供了afterPropertiesSet方法&#xff0c;用于在bean的属性设置好之后调用&#xff1b; DisposableBean接口提供了destroy方法&#xff0c;用于在bean销毁之后调用&#xff1b; public class TestComponent implem…

C语言-算法-搜索剪枝与记忆化搜索

Function 题目描述 对于一个递归函数 w ( a , b , c ) w(a,b,c) w(a,b,c) 如果 a ≤ 0 a \le 0 a≤0 或 b ≤ 0 b \le 0 b≤0 或 c ≤ 0 c \le 0 c≤0 就返回值$ 1$。如果 a > 20 a>20 a>20 或 b > 20 b>20 b>20 或 c > 20 c>20 c>20 就返…

用 CanvasKit 实现超级丝滑的原神地图(已开源)!!!

首先给大家送上预览地址&#xff1a; 官网地址&#xff1a;https://webstatic.mihoyo.com/ys/app/interactive-map/index.html canvaskit地址&#xff1a;http://106.55.55.247/ky-genshin-map/ 为什么 canvaskit 有如此高的性能&#xff1f; 第一个问题&#xff0c;官方网页…

算法训练营day19,二叉树8-2

type TreeNode struct { Val int Left *TreeNode Right *TreeNode } 450. 删除二叉搜索树中的节点 /*本题比较难&#xff0c;删除节点要分五种情况考虑 1.没有找到要删除的节点 2.找到要删除的节点是叶子节点 3.找到要删除的节点&#xff0c;左指针不为空&#xff0c;…

[嵌入式系统-7]:龙芯1B 开发学习套件 -4- LoongIDE 集成开发工具的使用-创建应用程序工程、编译、下载、调试

目录 前言&#xff1a; 步骤1&#xff1a;设置工作工作空间 步骤2&#xff1a;设置工具链 步骤3&#xff1a;创建裸机应用程序 步骤4&#xff1a;创建带实时操作系统的应用程序 步骤5&#xff1a;编译 步骤6&#xff1a;下载调试 前言&#xff1a; LoongIDE集成开发环境…

使用 axios 请求库,设置请求拦截

什么是 axios&#xff1f; 基于promise网络请求库&#xff0c;可以同构&#xff08;同一套代码可以运行在浏览器&#xff09;&#xff0c;在服务端&#xff0c;使用原生node.js的http模块&#xff0c;在客户端&#xff08;浏览器&#xff09;中&#xff0c;使用XMLHttpRequests…