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

SysTick—系统定时器

SysTick 简介

SysTick—系统定时器是属于CM3内核中的一个外设,内嵌在NVIC中。系统定时器是一个24bit 的向下递减的计数器,计数器每计数一次的时间为1/SYSCLK,一般我们设置系统时钟SYSCLK 等于72M。当重装载数值寄存器的值递减到0的时候,系统定时器就产生一次中断,以此循环往 复。 因为SysTick是属于CM3内核的外设,所以所有基于CM3内核的单片机都具有这个系统定时器, 使得软件在CM3单片机中可以很容易的移植。系统定时器一般用于操作系统,用于产生时基,维 持操作系统的心跳。

SysTick 寄存器介绍

SysTick—系统定时器有4个寄存器,简要介绍如下。在使用SysTick产生定时的时候,只需要配 置前三个寄存器,最后一个校准寄存器不需要使用。

SysTick 定时实验

利用SysTick 产生1s的时基,LED以1s的频率闪烁。

编程要点

1、设置重装载寄存器的值

2、清除当前数值寄存器的值

3、配置控制与状态寄存器

代码分析

SysTick 属于内核的外设,有关的寄存器定义和库函数都在内核相关的库文件core_cm3.h中。

SysTick 配置库函数

__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks){// 不可能的重装载值,超出范围if ((ticks- 1UL) > SysTick_LOAD_RELOAD_Msk) {return (1UL);}// 设置重装载寄存器SysTick->LOAD = (uint32_t)(ticks- 1UL);// 设置中断优先级NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS)- 1UL);//设置当前数值寄存器SysTick->VAL = 0UL;//设置系统定时器的时钟源为AHBCLK=72M//使能系统定时器中断//使能定时器SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |SysTick_CTRL_TICKINT_Msk |SysTick_CTRL_ENABLE_Msk;return(0UL);}

用固件库编程的时候我们只需要调用库函数SysTick_Config()即可,形参ticks用来设置重装载寄 存器的值,最大不能超过重装载寄存器的值224,当重装载寄存器的值递减到0的时候产生中断, 然后重装载寄存器的值又重新装载往下递减计数,以此循环往复。紧随其后设置好中断优先级, 最后配置系统定时器的时钟等于AHBCLK=72M,使能定时器和定时器中断,这样系统定时器就 配置好了,一个库函数搞定。 SysTick_Config()库函数主要配置了SysTick中的三个寄存器:LOAD、VAL和CTRL,有关具体 的部分看代码注释即可。

Systick.c

#include "Systick.h"void SysTick_Delay_us(uint32_t us)
{	uint32_t i = 0;SysTick_Config(72);for(i=0;i<us;i++){while(!((SysTick->CTRL) & (1<<16)));}//关闭定时器使能SysTick ->CTRL &= ~SysTick_CTRL_ENABLE_Msk;  //清0
}void SysTick_Delay_ms(uint32_t ms)
{	uint32_t i = 0;SysTick_Config(72000);for(i=0;i<ms;i++){while(!((SysTick->CTRL) & (1<<16)));}//关闭定时器使能SysTick ->CTRL &= ~SysTick_CTRL_ENABLE_Msk;  //清0
}

Systick.h

#ifndef __SYSTICK_H
#define __SYSTICK_H#include "stm32f10x.h"                  // Device header
#include "core_cm3.h"void SysTick_Delay_ms(uint32_t ms);
void SysTick_Delay_us(uint32_t us);#endif

main函数

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "Systick.h"int main(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5 ; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOE,&GPIO_InitStruct);while(1){GPIO_ResetBits(GPIOE,GPIO_Pin_5);//Delay_ms(500);  //延时500毫秒SysTick_Delay_ms(500);GPIO_SetBits(GPIOE,GPIO_Pin_5);	//Delay_ms(500);SysTick_Delay_ms(500);}}

相关文章:

SysTick—系统定时器

SysTick 简介 SysTick—系统定时器是属于CM3内核中的一个外设&#xff0c;内嵌在NVIC中。系统定时器是一个24bit 的向下递减的计数器&#xff0c;计数器每计数一次的时间为1/SYSCLK&#xff0c;一般我们设置系统时钟SYSCLK 等于72M。当重装载数值寄存器的值递减到0的时候&#…...

ATPCS:ARM-Thumb程序调用的基本规则

为了使单独编译的c文件和汇编文件之间能够互相调用&#xff0c;需要制定一系列的规则&#xff0c;AAPCS就是ARM程序和Thumb程序中子程序调用的基本规则。 1、ATPCS概述 ATPCS规定了子程序调用过程中寄存器的使用规程、数据站的使用规则、参数的传递规则。为了适应一些特殊的需…...

Swift 判断 A B 两个时间是不是同一天,A 是不是 B 的昨天

1. 今天要做这个效果&#xff08;在时间旁边显示今天&#xff0c;昨天&#xff09; 2. Preview 3. Code: // 添加 今天 昨天 func show_today_yesterday(d: Date Date()) -> String {let calendar Calendar.currentlet today: Date Date()if calendar.isDate(today, inS…...

华为OD 高效的任务规划(200分)【java】A卷+B卷

华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为O…...

使用VGG框架实现从二分类到多分类

一.数据集的准备 与之前的不同&#xff0c;这一次我们不使用开源数据集&#xff0c;而是自己来制作数据集。重点需要解决的问题是对数据进行预处理&#xff0c;如每一个图片的大小均不同&#xff0c;需要进行resize&#xff0c;还需要对每一张图片打标签等操作。 数据集文件 …...

Ubuntu服务器配置qq邮箱发送信息

效果&#xff1a; 此处设置的是自己给自己发送&#xff0c;配合linux的cron实现定时触发发送事件的效果 实现过程&#xff1a; 安装邮箱客户端Postfix sudo apt-get install postfix配置Postfix&#xff1a;编辑Postfix的主要配置文件 /etc/postfix/main.cf&#xff0c;并在…...

HTML读书笔记

HTML的读书笔记 概述 Jack 2023.10.23 参考网站&#xff1a; w3school 在线教程 HTML 头部 | 菜鸟教程 本教程已教你如何使用 HTML 创建站点。 HTML 是一种在 Web 上使用的通用标记语言&#xff08;并不是类似Python一样的编程语言&#xff09;。HTML 允许你格式化文本&…...

初识Java

一、Java语言概述 1.1 Java是什么 Java是一种优秀的程序设计语言&#xff0c;它具有令人赏心悦目的语法和易于理解的语义 不仅如此&#xff0c;Java还是一个有一系列计算机软件和规范形成的技术体系&#xff0c;这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境&a…...

bootstrap.properties中配置Nacos

bootstrap.properties用于在Spring Boot应用程序启动阶段加载外部配置 优先级高&#xff1a;在应用程序启动时首先加载&#xff0c;用于配置应用程序的基础设置&#xff0c;如配置数据源、日志、配置服务器 外部配置&#xff1a;加载外部配置源&#xff08;如远程配置服务器&a…...

【CVPR 2023】Diffusion Models高分辨率长视频生成 Align your Latents

Diffusion Models专栏文章汇总:入门与实战 前言:CVPR 2023年的工作《Align your Latents: High-Resolution Video Synthesis with Latent Diffusion Models》实现了高帧率高分辨率长视频生成,并在保持时间一致性上做了很多工作。这篇博客详细解读一下背后的原理,并总结一下…...

[Linux 基础] make、Makefile自动化构建代码工具

文章目录 1、make与Makefile是什么2、为什么要有make与Makefile3、怎么实现一个Makefile文件3.1 如何编写Makefile文件3.1.1 依赖关系3.1.2 依赖方法 3.2 如何清理项目3.2.1 如何编写3.2.2 clean详解 3.3 make的使用3.4 原理3.4.1 查看文件修改时间 1、make与Makefile是什么 m…...

vue3结合Cesium加载倾斜摄影3dtiles

这篇文章主要是为了记录加载3dtiles时模型与地形有时候存在一些高度上的差异&#xff0c;为此将解决方法做一个记录&#xff0c;便于其他读者使用。 加载倾斜摄影3dtitle //加载倾斜摄影图像 function init3Dtiles() {const tileSet new Cesium3DTileset({url: "http://1…...

面对DDoS和APT攻击,我们该如何有效防御?

关于DDoS&#xff08;Distributed Denial of Service&#xff09;分布式拒绝服务攻击&#xff0c;是指攻击者通过技术手段&#xff0c;在很短的时间内对目标攻击网站发出大量请求&#xff0c;极大地消耗相关网站的主机资源&#xff0c;导致其无法正常服务。 打个比方来说&#…...

【前端学习】—Vue生命周期(十七)

【前端学习】—Vue生命周期&#xff08;十七&#xff09; 一、Vue生命周期 二、Vue父子组件生命周期调用顺序 三、Vue中在哪个生命周期内调用异步请求...

ant的Path-like结构

ant可以使用path和classpath结构指明路径。path和classpath可以包含内嵌的元素&#xff0c;类似下面的通用形式&#xff1a; <classpath><pathelement path"${classpath}"/><pathelement location"lib/helper.jar"/> </classpath>…...

Java设计模式之组合模式

比如在实现一个文件管理系统时&#xff0c;对于客户端来说&#xff0c;如果需要区分文件与文件夹的使用&#xff0c;会比较麻烦&#xff0c;使用组合模式可以在使用不同对象时使用方法保持一致性。 定义 又名部分整体模式&#xff0c;是用于把一组相似的对象当作一个单一的对…...

划词搜索IP插件

插件背景 浏览器插件可以让用户根据个人工作及日常需求来定制浏览器的功能和界面。当用户在网页上看到一些IP地址时&#xff0c;或许会好奇它们的来源和归属。传统的做法是&#xff0c;用户需要复制这个IP地址&#xff0c;然后跳转到埃文科技旗下的http://IPUU.net网站进行查询…...

LeetCode刷题---简单组(一)

文章目录 &#x1f352;题目一 507. 完美数&#x1f352;解法一 &#x1f352;题目二 2678. 老人的数目&#x1f352;解法一 &#x1f352;题目三 520. 检测大写字母&#x1f352;解法一&#x1f352;解法二 &#x1f352;题目一 507. 完美数 对于一个 正整数&#xff0c;如果它…...

如何能通过表面挖掘到深层次的底层思维?

如何能通过表面挖掘到深层次的底层思维&#xff1f; 挖掘深层次的底层思维是一项复杂且细致的工作&#xff0c;通常涉及到个人反思、观察、沟通和分析等多个方面。下面是一些可能会对你有帮助的策略和方法&#xff1a; 1. 提问的艺术 五次为什么&#xff1a;这是一种简单而有…...

【单片机学习笔记】Windows+Vscode+STM32F4+freeRTOS+FatFs gcc环境搭建

为摒弃在接受keil邮件&#xff0c;研究了下gun编译&#xff0c;以STM32F407为例&#xff0c;简单记录 1. 软件包准备 Git 选择对应版本直接安装即可https://git-scm.com/download/winmakegcc ​ 1&#xff09;将上述软件包放置于C盘根目录 2&#xff09;添加环境变量 3&am…...

接地电阻柜的多种款式!

接地电阻柜作为电力系统的关键保护设备&#xff0c;其多样化主要体现在分类维度丰富、适配场景广泛&#xff0c;可根据电压等级、保护对象、电阻阻值等灵活划分&#xff0c;满足不同工况需求。按电压等级可分为低压&#xff08;0.22kV~0.66kV&#xff09;、中压&#xff08;6kV…...

【动力心法】别把 PWM 当成魔法!撕碎理想执行器的线性幻觉,论“静摩擦”与“前馈补偿”的绝对镇压

摘要&#xff1a;在纯粹的数学世界里&#xff0c;只要有输入&#xff0c;就必然有输出。但在由钢铁、齿轮、密封圈和润滑油构成的物理世界中&#xff0c;能量必须先缴纳极其昂贵的“过路费”。无数软件开发者迷信于 PID 的数学反馈&#xff0c;天真地以为微小的误差能换来微小的…...

作者介绍Java高级工程师

作者介绍Java高级工程师 廖万忠 编程比赛成绩 2023年CSDN基础用户1million Java开发者用户30万332个团长比赛成绩 102 rank美国创业公司 HackerRank 项目组 Java工程师 2022年 accepted深圳腾讯公司 腾讯云开发者社区 2022年年度进取作者 coderlwz 证书北京大学2010级计算机优秀…...

FastAdmin Shopro Uni-App分销商城功能定制及二次开发

fastadmin shopro uni-app分销商城 功能定制 二次开发最近在折腾FastAdminShopro的uniapp分销商城时发现&#xff0c;有些功能得自己动手才能满足运营需求。比如前两天遇到个客户非要三级分销改五级&#xff0c;这玩意不改底层代码真顶不住。fastadmin shopro uni-app分销商城…...

“TinyVue Skill:让 AI 真正懂你的组件库” 是 OpenTiny 团队针对 AI 智能体(Agent)开发的一套**技能工具集**

“TinyVue Skill&#xff1a;让 AI 真正懂你的组件库” 是 OpenTiny 团队针对 AI 智能体&#xff08;Agent&#xff09;开发的一套技能工具集。它的核心目标是解决通用大模型在生成 TinyVue 代码时容易出现的“幻觉”问题&#xff08;如 API 记错、版本不兼容&#xff09;&…...

从0到1打造完美PRD:这10个细节让你的需求文档更专业

从0到1打造完美PRD&#xff1a;这10个细节让你的需求文档更专业 在跨部门协作的产品开发中&#xff0c;一份优秀的PRD&#xff08;产品需求文档&#xff09;如同航海图&#xff0c;既能指引团队方向&#xff0c;又能规避潜在风险。但现实中&#xff0c;许多产品经理的文档常陷入…...

Spring事件机制实战:从入门到精通,手把手教你实现松耦合通信

Spring事件机制实战&#xff1a;从零构建松耦合通信系统 在复杂的业务系统中&#xff0c;组件间的通信往往像一团纠缠的线缆——修改任何一处都可能引发连锁反应。Spring事件机制正是为解决这种耦合困境而生的设计模式实践&#xff0c;它让组件间的对话变得优雅而安全。想象一下…...

Java实战系列(1):基于ShardingSphere Hint策略实现SpringBoot多数据源动态路由

1. ShardingSphere Hint策略的核心价值 在实际业务开发中&#xff0c;我们经常会遇到需要动态切换数据源的场景。比如电商系统中&#xff0c;用户数据和订单数据可能分布在不同的数据库实例&#xff1b;SaaS应用中&#xff0c;不同租户的数据需要隔离存储。传统做法是通过手动切…...

BFS入门经典

#include <cstring> #include <iostream> #include <algorithm> #include <queue>using namespace std;// pair<int,int> 用来存一个点的坐标 (x, y) typedef pair<int, int> PII;const int N 110;int n, m; // n 行 m 列 i…...

C 语言从 0 入门(十一)|指针基础:定义、解引用、指针与变量

大家好&#xff0c;我是网域小星球。 前面我们学习了数组、函数、变量等基础内容&#xff0c;代码能力已经可以完成大多数基础程序。而从这一篇开始&#xff0c;我们正式进入 C 语言最核心、最具特色、也是最难的知识点&#xff1a;指针。 指针是 C 语言的灵魂&#xff0c;也…...