IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> <7>STM32滴答定时器-库函数 -> 正文阅读

[嵌入式]<7>STM32滴答定时器-库函数

SysTick定时器

1. SysTick定时器的简介

是Cortex‐M3处理器内部一个简单的定时器。SysTick系统时钟位于Cortex-M3内核,是一个24位的递减计数器(从设定值一直做减法计数到零),是NVIC的一部分,根植于NVIC; 能够精确定时,为操作系统提供必要的时钟节拍。
主要用于: 精确延时,在多任务操作系统中为系统提供时间基准(时基); 任务切换,为每个任务分配时间片。
有4个寄存器控制SysTick定时器

具体代码在最后面

寄存器含义
CTRLSysTick控制及状态寄存器
LOADSysTick重装载数值寄存器
VALSysTick当前数值寄存器
CALIBSysTick校准数值寄存器

2. SysTick定时器的时钟来源

SysTick定时器的时钟源可以是内部时钟(FCLK)或者是外部时钟,系统默认的SysTick定时器是由AHB时钟(HCLK)8分频得到的,即SysTick的频率为9MHz。SysTick定时器从设定的初值计数到0时,会自动重装初值继续计数,同时触发中断,因此,只需确定计数的次数就可以精确得到延迟时间。
在这里插入图片描述

在这里插入图片描述

3. SysTick定时器寄存器的简介*

typedef struct
{
  __IO uint32_t CTRL;   //控制及状态寄存器                       
  __IO uint32_t LOAD;   //重装载数值寄存器                      
  __IO uint32_t VAL;    //当前数值寄存器                        
  __I  uint32_t CALIB;  //校准数值寄存器,本章没有用到这个寄存器                      
} SysTick_Type;

在这里插入图片描述

4. SysTick定时器的编程步骤
1.确定 SysTick 时钟源,时钟频率
2.设置 重装载数值(LOAD)
3.设置 当前数值(VAL)
4.设置 SysTick 控制及状态(CTRL)使能
5.判断 SysTick 控制及状态寄存器的16位是否为1
6.当 SysTick 控制及状态寄存器的16位为1时,则将VAL清零并关闭 SysTick 控制及状态寄存器(CTRL)

5. 具体功能源代码

SysTick延时函数头文件

#ifndef _DELAY_H
#define _DELAY_H

#include "stm32f10x.h"

void Delay_Init(void);
void delay_us(uint32_t nus);
void delay_ms(uint32_t mus);

#endif

SysTick延时函数文件

#include "delay.h"

static uint8_t fac_us = 0;
static uint16_t fac_ms = 0;

// 1.确定 SysTick 时钟源,时钟频率
void Delay_Init(void)  
{
    SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);  //确定时钟源
	fac_us = SystemCoreClock / 8000000;  //确定时钟频率,这里为微米级计数
	fac_ms = (uint16_t)fac_us * 1000;    //毫秒需要*1000,千进制
}

void delay_us(uint32_t nus)
{
	u32 temp;
	// 2.设置 重装载数值(LOAD),也就是你要设置的多少毫秒的数值
	SysTick->LOAD = nus*fac_us;
	// 3.设置 当前数值(VAL)  
	SysTick->VAL = 0X00;  
	//4.设置 SysTick 控制及状态(CTRL)使能。SysTick_CTRL_ENABLE_Msk左移1位       
	SysTick->CTRL = SysTick_CTRL_ENABLE_Msk; 
	do
	{
		temp = SysTick->CTRL;  //不断获取 SysTick 控制及状态(CTRL)的16位的值
	}  
	//5.判断 SysTick 控制及状态寄存器的16位是否为1
	while(!(temp&(1<<16))); 
	//6.当 SysTick 控制及状态寄存器的16位为1时,则将VAL清零并关闭 SysTick 控制及状态寄存器(CTRL)
    SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;	//关闭计数器
	SysTick->VAL = 0X00;
}

//与void delay_us(uint32_t nus)的配置方法基本相同
void delay_ms(uint32_t mus)
{
  u32 temp;
	SysTick->LOAD = mus*fac_ms;
	SysTick->VAL = 0X00;
	SysTick->CTRL = SysTick_CTRL_ENABLE_Msk;
	do
	{
		temp = SysTick->CTRL;
	}while(!(temp&(1<<16)));
    SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;	//关闭计数器
	SysTick->VAL = 0X00;
}





  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-05 11:11:07  更:2021-09-05 11:11:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:43:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码