【STM32F407学习笔记】SysTick定时

文章详细介绍了STM32F407中的SysTick定时器,包括其24位递减的工作原理,涉及的控制及状态、重装载数值、当前数值和校准数值寄存器。还提供了两种使用方法,即轮询方式和中断方式,展示了如何初始化、设置时钟源以及实现延迟功能。
摘要由CSDN通过智能技术生成

1.工作原理

  1. SysTick:系统定时器(又叫滴答定时器),24位,只能递减,存在于内核,嵌套在NVIC中,所有的cortex-M内核的单片机都具有这个定时器。

2. 相关寄存器

// 相关寄存器
typedef struct
{
  __IO uint32_t CTRL;  // 控制及状态寄存器                  
  __IO uint32_t LOAD;  // 重装载数值寄存器
  __IO uint32_t VAL;   // 当前数值寄存器
  __I  uint32_t CALIB; // 校准数值寄存器                
} SysTick_Type;
  1. SysTick->CTRL
    第0位:ENABLE , SysTick使能位(0:关闭功能,1:开启功能)
    第1位:TICKINIT, SysTick中断使能位(0:关闭SysTick中断,1:开启Systick中断)
    第2位:CLKSOURCE,SysTick时钟源选择(0:HLCK/8作为时钟源;1:HCLK作为时钟源)
    第16位:COUNTFLAG,SysTick计数比较标志(如果在上次读取本寄存器后,SysTick已经计数到0了,则该位为1;如果读取该位,该位将自动清零)
  2. SysTick->LOAD
    24位寄存器,最大计数值为:0XFFFFFF 当计数器递减至0,重装载数值寄存器中的值将被重装载,继续开始递减。
  3. SysTick->VAL
    24位寄存器,读取它会返回当前倒计数的值,写它则会使它清零,同时清楚SysTick->CTRL寄存器中的COUNTFLAG标志位
  4. SysTick->CALIB
    校准数值寄存器,一般不会用到

3.使用方法

3.1 轮询的方式

#include "stm32f4xx.h"
static u8  fac_us=0;									   
static u16 fac_ms=0;
// 初始化
void delay_init(u8 SysCLK)
{
	SysTick_CLKSourceConfig(SystemCoreClock);// 使用HLCK作为时钟源
	fac_us=SysCLK;// 设置计数需要倍乘的因子
	fac_ms=(u16)fac_us*1000;// 设置计数需要倍乘的因子
}

void delay_ms(u16 nms)
{
	SysTick->CTRL |= SysTick_CLKSource_HCLK; //使用HCLK作为时钟源
	u32 temp;
	SysTick->LOAD=(u32)nms*168*1000; // 装载重装载计数器的计数值
	SysTick->VAL=0x00; // 清空当前计数值寄存器的计数值
	SysTick->CTRL=SysTick_CTRL_ENABLE_Msk; //使能SysTick定时器
	do
	{
		temp=SysTick->CTRL;// 读取当前寄存器状态
	}while((temp&0x01)&&!(temp&(1<<16)));//temp&0x01:定时器使能,!(temp&(1<<16)):定时器计数值没有到0
	SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器
	SysTick->VAL =0X00; //清空计数器
}

3.2 中断的方式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值