STM32---SysTick定时器

本文详细介绍了SysTick定时器的工作原理,包括其组成、计数机制以及在STM32中的操作步骤,重点讲解了如何设置时钟源、重载值、清零计数器和初始化过程。
摘要由CSDN通过智能技术生成

一、什么是SysTick定时器

SysTick定时器,又名系统滴答定时器。使用内核的SysTick定时器来实现延时,可以不占用其他定时器,节省资源

SysTick定时器是一个24位递减计数器,每个时钟周期减1,当减到0时,会自动重载定时初值,开始新一轮计数。通过设置这个定时初值,就可以实现得到指定时间。如下图所示,y为定时器初值,然后随着时间增加,值逐渐减小,直至为0,再重新加载初值,如此往复,x1、x2、x3这些时间段,就是我们需要的延时时间。

二、SysTick的组成

SysTick包含四个寄存器,都是24位寄存器

[0]:ENABLE 使能位 0=关闭systick功能,1=开启systick功能

[1]:TICKINT 中断使能位 0=关闭systick中断,1=开启systick中断

[2]:CLKSOURCE 时钟源选择位 0=使用HCLK/8时钟源 1=使用HCLK时钟源

[16]:COUNTFLAG 计数比较标志,如果计数器达到0,则读入为1;当读取或清楚当前计数器值时,将自动清除为0;

三、SysTick定时的操作步骤

SysTick定时器的操作步骤有四步

1.设置systick定时器的时钟源

SysTick->CTRL &= ~(1 << 2);
//bit[2] = 0,选择外部时钟源9MHZ

2.设置systick定时器的重载初始值

SysTick->LOAD = 延时时间;

3.清零systick定时器当前计数器的值

SysTick->VAL = 0x00;

4.打开systick定时器

SysTick->CTRL|=1;//bit[0]=1

四、SysTick的初始化

//Systick.h
#ifndef _SYSTICK_H
#define _SYSTICK_H

#include "stm32f10x.h"
#include "system.h"

#define SYSTICK (72)//指定SYSTICK定制其的频率为72MHz

extern void SysTick_Init(void);//初始化systick定时器
extern void delay_us(u32 nus);//延时多少毫秒
extern void delay_ms(u32 nms);//延时多少微秒

#endif
//Systick.c
#include "systick.h"
 
static u32 fac_us = 0;
static u32 fac_ms = 0;

void SysTick_Init(void){
	//1.指定时钟源 - 9MHz
	SysTick->CTRL &=~(1<<2);
	//2.指定1us计数9次
	fac_us = SYSTICK / 8;
	//3.指定1ms计数9000次
	fac_ms = fac_us * 1000;
}

//微秒延时
void delay_us(u32 nus){
	u32 temp;
	SysTick->LOAD = nus * fac_us;
	SysTick->VAL = 0x00;
	SysTick->CTRL |= (1<<0);
	do{
		temp=SysTick->CTRL;
	}while((temp & 0x01) && !(temp & (1<<16)));
	//关闭systick定时器
	SysTick->CTRL &= ~(1<<0);
	//清空计数器
	SysTick->VAL = 0x00;
}

//毫秒延时
void delay_ms(u32 nms){
		u32 temp;
	SysTick->LOAD = nms * fac_ms;
	SysTick->VAL = 0x00;
	SysTick->CTRL |= (1<<0);
	do{
		temp=SysTick->CTRL;
	}while((temp & 0x01) && !(temp & (1<<16)));
	SysTick->CTRL &= ~(1<<0);
	SysTick->VAL = 0x00;
	}

	

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值