SysTick 定时器

news2024/10/3 6:37:28

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 = 9MHz
	fac_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;	//¼Ç¼ÓжàÉÙ¸öÕûµÄ540ms
	u16 remain = nms % 540;	//¼Ç¼ÓжàÉÙ¸ö²»¹»540ms
	while(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.coloradmin.cn/o/1332235.html

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

相关文章

推荐几个开源H5小程序低代码工具

移动APP、H5、小程序曾风靡一时&#xff0c;结合当前无代码/低代码开发技术&#xff0c;有哪些免费开源的移动端H5/小程序软件&#xff0c;不用写代码即可发布H5页面&#xff0c;笔者对市场上主流的开源H5低代码/无代码工具/框架/组件进行了研究和验证&#xff0c;找到了几款比…

【LeetCode:1954. 收集足够苹果的最小花园周长 | 等差数列 + 公式推导】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

【AI提示词人物篇】创新艺术未来,让科技改变想象空间

AI 绘画学习难度和练习技巧 学习绘画的技巧 学习能难度&#xff1a; 外貌特征&#xff1a;AI需要学习识别和理解各种外貌特征&#xff0c;如发型、肤色、眼睛颜色等。这可能需要大量的训练数据和复杂的模型架构。 镜头提示&#xff1a;AI需要学习理解不同镜头提示的含义&…

谁会主导AIGC企业应用?

文/明道云创始人任向晖 李彦宏在近期的一个行业会议上抱怨大家都卷在大模型本身上&#xff0c;而忽视了AI原生应用的实现。他说的当然对&#xff0c;但这个状况绝对不能怪AI创业者。至少在企业应用领域&#xff0c;很多应用开发者并不确定企业愿意为什么样的应用买单&#xff0…

【shell脚本实战学习笔记】#1

shell脚本实战学习笔记#1 脚本编写场景需求&#xff1a; 编写一个比较数据大小的shell脚本&#xff0c;要求判断用户只能输入两位数字&#xff0c;不能是字符或其他特殊字符&#xff1b;并且在shell脚本中需要用到函数来控制执行顺序。 知识点&#xff1a;shell函数&#xff…

计算机组成原理第6章-(算术运算)【下】

移位运算 对于有符号数的移位称为算术移位,对于无符号数的移位称为逻辑移位。 算术移位规则【极其重要】 对于正数的算术移位,且不管是何种机器数【原码、反码、补码】,移位后出现的空位全部填0。 而对于负数的算术移位,机器数不同,移位后的规则也不同。 对于负数的原…

C#/WPF 播放音频文件

C#播放音频文件的方式&#xff1a; 播放系统事件声音使用System.Media.SoundPlayer播放wav使用MCI Command String多媒体设备程序接口播放mp3&#xff0c;wav&#xff0c;avi等使用WindowsMediaPlayer的COM组件来播放(可视化)使用DirectX播放音频文件使用Speech播放(朗读器&am…

yolo实现数据增强(数据集不够,快速增加数据集)

目录结构 附上数据增强的全部代码 # -*- codingutf-8 -*-import time import random import copy import cv2 import os import math import numpy as np from skimage.util import random_noise from lxml import etree, objectify import xml.etree.ElementTree as ET imp…

2024年,我们要勇敢奔跑!

本“人民&#xff0b;体验官”推广人民日报官方微博文化产品《2024年是个什么年&#xff1f;》 图&#xff1a;来源“人民&#xff0b;体验官”推广平台 朋友&#xff0c;2023已经进入尾声阶段&#xff0c;很快新的一年——2024年就来了。这新的一年是新中国成立75周年、澳门回…

linux运行可执行文件,通过c语言调用java的main方法

前言&#xff1a;以前一直在做Android开发&#xff0c;在某本书上看过一句话“Android上面不只有App类的程序可以运行&#xff0c;能在linux下运行的程序&#xff0c;也可以在Android上面运行” 一.编写C语言部分代码 1.定义java.h头文件 #include <jni.h>#ifndef _JAV…

分巧克力c语言

分析&#xff1a;分巧克力&#xff0c;把每一种大小列举出来&#xff0c;在对巧克力分解&#xff0c;在加上所以的分解块数&#xff0c;在和人数比较&#xff0c;如果够分&#xff0c;就保存这一次的结果&#xff0c;在增大巧克力&#xff0c;如果不够分了&#xff0c;就打印上…

Python 运维(三):使用 zipapp 将 Python 程序打包成单个可执行文件

大家好&#xff0c;我是水滴~~ 在 Python 开发中&#xff0c;我们经常需要将应用程序打包成可执行文件&#xff0c;以便在不具备 Python 环境的计算机上运行。Python 提供了多种打包工具&#xff0c;其中之一就是 zipapp。zipapp 可以将 Python 应用程序及其依赖打包成一个单独…

【高数定积分求解旋转体体积】 —— (上)高等数学|定积分|柱壳法|学习技巧

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 Shell method Setting up the Integral 例题 Example 1: Example 2: Example 3: Computing…

安装Kubernetes1.23、kubesphere3.4、若依项目自动打包部署到K8S记录

1.安装kubernetes1.23详细教程 kubernetes(k8s)集群超级详细超全安装部署手册 - 知乎 2.安装rancher动态存储 kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml3.安装kubesphere3.4 准备工作 您…

详解KMP算法

KMP算法应该是每一本《数据结构》书都会讲的&#xff0c;算是知名度最高的算法之一了&#xff0c;但很可惜&#xff0c;我大二那年压根就没看懂过~~~ 之后也在很多地方也都经常看到讲解KMP算法的文章&#xff0c;看久了好像也知道是怎么一回事&#xff0c;但总感觉有些地方自己…

线段树/区间树(java实现版详解附leetcode例题)

目录 什么是线段树 线段树基础表示 创建线段树&#xff08;Java版详解&#xff09; 线段树的区间查询 leetcode上的线段树相关问题 leetcode303题.区域和检索-数组不可变 使用线段树解题 不使用线段树解题 leetcode307题.区域和检索-数组可修改 不使用线段树解题 线…

基于 ACK One 实现简单的跨云协同,让业务管理更高效

作者&#xff1a;庄宇 本文根据 2023 云栖大会现场分享实录整理 2 年前的云栖大会&#xff0c;我们发布分布式云容器平台 ACK One&#xff0c;随着 2 年的发展&#xff0c;很高兴看到 ACK One 在混合云&#xff0c;分布式云领域帮助到越来越多的客户&#xff0c;今天给大家汇报…

Burnside 引理 与 Pólya 定理 学习笔记

为了防止明天就把好不容易听完的东西都还给 rabbit_lb 了&#xff0c;还是记一点吧。 1. 群论基础 1.1 群(group) 的定义 给定集合 G G G 和 G G G上的二元运算 ⋅ \cdot ⋅&#xff0c;满足下列条件称之为群&#xff1a; 封闭性&#xff1a;若 a , b ∈ G a,b\in G a,…

机器学习之实验过程01

import pandas as pd import numpy as np import matplotlib.pyplot as plt data_path = /home/py/Work/labs/data/SD.csv # 请确保您的数据文件路径是正确的 df = pd.read_csv(data_path) df.head() # 创建散点图 # 创建散点图 plt.figure(figsize=(10, 6)) plt.scat…

DDD领域驱动设计系列-原理篇-战术设计

概述 上篇战略设计产出了领域及问题域领域模型&#xff1b;详见&#xff1a;DDD领域驱动设计系列-原理篇-战略设计-CSDN博客 战术设计篇聚焦如何落地&#xff0c;包含实际解决方案模型落地&#xff0c;架构分层&#xff08;Clean&#xff0c;CQRS&#xff09;&#xff0c;Rep…