SysTick 定时器

SysTick定时器定义:

SysTick 是一个 24 位的倒计数定时器,当计到 0 时,将从 RELOAD 寄存器中自动重装载定时初值。只要不把它在 SysTick 控制及状态寄存器中的使能位清除,就永不停息。

SysTick定时器分类:

SysTick定时器工作过程:

SysTick Control and Status Register(控制及状态寄存器)

SysTick Reload Value Register(重装载值寄存器)

SysTick Current Value Register(当前值寄存器)

时钟频率

delay.c

#include "delay.h"//ÀûÓÃϵͳµÎ´ð¶¨Ê±£¬±àдµÄÑÓʱº¯Êýstatic u8  fac_us=0; //usÑÓʱ±¶³ËÊý			   
static u16 fac_ms=0; //msÑÓʱ±¶³ËÊý/****************************************************************************
* Ãû    ³Æ: delay_init()
* ¹¦    ÄÜ£ºÑÓʱº¯Êý³õʼ»¯
* Èë¿Ú²ÎÊý£ºÎÞ
* ·µ»Ø²ÎÊý£ºÎÞ
* ˵    Ã÷£º
****************************************************************************/
void delay_init(void)
{SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//Ϊϵͳ¶¨Ê±Æ÷Ñ¡ÔñʱÖÓΪ	HCLK 8·ÖƵ	72MHz / 8 = 9MHzfac_us = SYSCLK / 8;//΢ÃëµÄ±¶³ËÊý = 72 / 8 = 9//X * fac_us¾ÍÏ൱ÓÚÓÐX¸ö΢Ãîfac_ms = (u16)fac_us * 1000; //ÿ¸ömsÐèÒªµÄsystickʱÖÓÊý(1ms = 1000us),ËùÒÔfac_us*1000//X * fac_ms¾ÍÏ൱ÓÚÓÐX¸öºÁÃî
}								    /****************************************************************************
* Ãû    ³Æ: void delay_us(u32 nus)
* ¹¦    ÄÜ£ºÑÓʱnus
* Èë¿Ú²ÎÊý£ºÒªÑÓʱµÄ΢ÃëÊý
* ·µ»Ø²ÎÊý£ºÎÞ
* ˵    Ã÷£ºnusµÄÖµ,²»Òª´óÓÚ1864135us
****************************************************************************/
/*
ͨ¹ýÏà¹ØÊÖ²áÎÒÃÇÁ˽⵽,±¸·ÝÖµ¼Ä´æÆ÷ºÍµ±Ç°Öµ¼Ä´æÆ÷µÄÖµ×î´óΪ16M - 1
ÎÒÃǵÄ΢Ã뼶µÄÑÓʱº¯ÊýµÄ±¶³ËÊýΪ9ËùÒÔ16M - 1 / 9 = 1864135
*/
void delay_us(u32 nus)
{u32 midtime;																			//±£´æ¼Ä´æÆ÷µÄ״̬SysTick->LOAD = nus * fac_us;											//ʱ¼ä¼ÓÔØ(Ï൱ÓÚÓÐnus¸ö΢Ãî)SysTick->VAL = 0x00;															//Çå¿Õ¼ÆÊýÆ÷SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;					//ʹÄÜϵͳ¶¨Ê±Æ÷¼ÆÊýdo{midtime = SysTick->CTRL;}while((midtime & 0x01) && !(midtime & (1 << 16)));//µÈ´ýʱ¼äµ½´ïSysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;				//¹Ø±Õ¼ÆÊýÆ÷SysTick->VAL = 0X00;															//Çå¿Õ¼ÆÊýÆ÷	 
}
/****************************************************************************
* Ãû    ³Æ: void delay_xms(u16 nms)
* ¹¦    ÄÜ£ºÑÓʱnms
* Èë¿Ú²ÎÊý£ºÒªÑÓʱµÄºÁÃîÊý
* ·µ»Ø²ÎÊý£ºÎÞ
* ˵    Ã÷£ºSysTick->LOADΪ24λ¼Ä´æÆ÷,ËùÒÔ,×î´óÑÓʱΪ: nms<=0xffffff*8*1000/SYSCLK¶Ô9MÌõ¼þÏÂ,nms<=1864ms 
****************************************************************************/
void delay_xms(u16 nms)
{	 		  	  u32 midtime;		   SysTick->LOAD = (u32)nms*fac_ms;									//ʱ¼ä¼ÓÔØ(SysTick->LOADΪ24bit)SysTick->VAL = 0x00;															//Çå¿Õ¼ÆÊýÆ÷SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;					//¿ªÊ¼µ¹Êýdo{midtime = SysTick->CTRL;}while((midtime & 0x01) && !(midtime & (1 << 16)));//µÈ´ýʱ¼äµ½´ïSysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;				//¹Ø±Õ¼ÆÊýÆ÷SysTick->VAL = 0X00;															//Çå¿Õ¼ÆÊýÆ÷
} 
/****************************************************************************
* Ãû    ³Æ: void delay_ms(u16 nms)
* ¹¦    ÄÜ£ºÑÓʱnms
* Èë¿Ú²ÎÊý£ºÒªÑÓʱµÄºÁÃîÊý
* ·µ»Ø²ÎÊý£ºÎÞ
* ˵    Ã÷£ºnms:0~65535
****************************************************************************/
void delay_ms(u16 nms)
{	 	 u8 repeat = nms / 540;	//¼Ç¼ÓжàÉÙ¸öÕûµÄ540msu16 remain = nms % 540;	//¼Ç¼ÓжàÉÙ¸ö²»¹»540mswhile(repeat){delay_xms(540);repeat--;}if(remain)delay_xms(remain);
} 

delay.h

#ifndef __DELAY_H
#define __DELAY_H#include "stm32f10x_conf.h" #define SYSCLK 72			typedef uint32_t  u32;
typedef uint16_t  u16;
typedef uint8_t   u8;void delay_init(void);	
void delay_ms(u16 nms);	
void delay_us(u32 nus);	#endif

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

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

相关文章

论文阅读——RS DINO

RS DINO: A Novel Panoptic Segmentation Algorithm for High Resolution Remote Sensing Images 基于MASKDINO模型&#xff0c;加了两个模块&#xff1a; BAM&#xff1a;Batch Attention Module 遥感图像切分的时候把一个建筑物整体比如飞机场切分到不同图片中&#xff0c;…

python dash 的学习笔记1

dash 用python开发web界面 https://dash.plotly.com/ 官方上支持jula F# python一类。当然我只会python只学习python中使用dash. 要做一个APP&#xff0c;用php,java以及.net都可以写&#xff0c;只所有选择python是因为最近在用这一个。同时也发现python除了慢全是优点。 资料…

随机无限采集JK妹妹高清壁纸下载HTML网页源码

源码介绍 美图网站千千万&#xff0c;美图自己说了算&#xff01;本源码由宋佳乐博客 开发&#xff0c;首页图片做了浏览器窗口自适应&#xff0c;最大化占满PC浏览器和移动浏览器的窗口&#xff0c;并且防止出现滚动条。 功能介绍 首页图片设置了4个点击功能区&#xff0c;…

二叉树进阶题目(超详解)

文章目录 前言根据二叉树创建字符串题目分析写代码 二叉树的层序遍历题目分析 写代码二叉树的层序遍历II题目分析写代码 二叉树的最近公共祖先题目分析写代码时间复杂度 优化思路优化的代码 二叉搜索树与双向链表题目分析写代码 从前序与中序遍历序列构造二叉树题目分析写代码从…

5G NTN:通信新天地,卫星通信的奇妙探索

导言 嗨&#xff0c;大家好&#xff01;今天我们要深入了解一项让通信更强大的技术——5G NTN。它和卫星通信结合在一起&#xff0c;为我们带来了通信的新时代。在这篇文章中&#xff0c;我们将用白话文揭示5G NTN和卫星通信的关系&#xff0c;探索这个通信世界的奇妙之旅。 5…

关于“Python”的核心知识点整理大全39

目录 ​编辑 14.1.5 将 Play 按钮切换到非活动状态 game_functions.py 14.1.6 隐藏光标 game_functions.py game_functions.py 14.2 提高等级 14.2.1 修改速度设置 settings.py settings.py settings.py game_functions.py 14.2.2 重置速度 game_functions.py 1…

TCP:IP原理

TCP/IP 原理 TCP/IP 协议不是 TCP 和 IP 这两个协议的合称&#xff0c;而是指因特网整个 TCP/IP 协议族。从协议分层模型方面来讲&#xff0c;TCP/IP 由四个层次组成&#xff1a;网络接口层、网络层、传输层、应用层。 网络访问层(Network Access Layer) 网络访问层(Network …

浅析海博深造

文章目录 深造作用 留学种类 选专业 择校 申请流程 申请方式 深造作用 1、个人能力提升&#xff08;学术专业、语言、新文化或新生活方式&#xff09; 2、更好的职业发展&#xff08;起点更高、结交新朋友或扩大社交圈&#xff09; 3、北京上海落户优惠 4、海外居留福…

1853_emacs_org-mode中的源代码编辑

Grey 全部学习内容汇总&#xff1a; GitHub - GreyZhang/g_org: my learning trip for org-mode 1853_emacs_org-mode的源代码编辑 代码块的编辑可以间接快速进行org-mode中代码块的编辑&#xff0c;而且有着类似纯粹的代码文件编辑的体验。 主题由来介绍 前面通过org-mod…

labelme标注的json文件数据转成coco数据集格式(可处理目标框和实例分割)

这里主要是搬运一下能找到的 labelme标注的json文件数据转成coco数据集格式&#xff08;可处理目标框和实例分割&#xff09;的代码&#xff0c;以供需要时参考和提供相关帮助。 1、官方labelme实现 如下是labelme官方网址&#xff0c;提供了源代码&#xff0c;以及相关使用方…

固定效应模型-以stata为工具

固定效应模型-以stata为工具 文章目录 1.固定效应模型2. 模型原理3. `stata`代码实现1.固定效应模型 固定效应模型(Fixed Effects Model)是一种面板数据分析方法,通过引入个体固定效应来控制个体间的异质性,并更准确地估计解释变量对因变量的影响。它在许多经济、社会科学…

Java 基础学习(十六)多线程基础、线程并发安全

1 多线程基础 1.1 进程和线程 1.1.1 什么是进程 进程&#xff08;Process&#xff09;是由操作系统执行的计算机程序的实例&#xff0c;是操作系统分配资源的基本单位。操作系统上运行的每一个应用程序都运行在一个进程中。比如计算机上的微信程序&#xff0c;也是运行在进程…