STM32学习记录(八)————系统定时器SysTick


前言

一个学习STM32的小白~ 有错误评论区或私信指出~


提示:以下是本篇文章正文内容,下面案例可供参考

1.SysTick定时器

SysTick:24位系统定时器,只能递减,存在于内核嵌套在NVIC中。所有的Cortex-M中都有这个系统定时器。
重装载值reload递减,当递减到0会触发中断并且会有 置位countflag标志,VAL表示当前值。然后reload继续从预设值开始递减,周而复始。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.SysTick定时时间计算

  • ①T:一个计数循环的时间,跟reload和CLK有关
  • ②CLK :72M或者9 M,由CTRL寄存器配置
  • ③reload:24位,用户自己配置

T=reload (1/CLK)
CLK=72M, 1us =(72)
(1/ 72 000 000)
CLK= 72M, 1ms = (72 000 )* (1/ 72 000 000)
时间单位换算: 1s =1000ms = 1000 000 us = 1000 000 000 ns

3.结构体和库函数

typedef struct
IO uint32_t CTRL; //控制及状态寄存器
IO uint32 t LOAD; //重装载寄存器
1O uint32_t VAL; //重装载寄存器
I uint32_t CALIB; //校准寄存器
SysTick_Type;
static INLINE uint32 _t SysTick Config(uint32_t ticks)
if(ticks > SysTick_LOAD_RELOAD_Msk) return (1); //判断reload的值是否大于最大值2^24SysTick->LOAD =(ticks & SysTick_LOAD_RELOAD_Msk)-1;//配置reload寄存器的初值
NVIC_SetPriority (SysTick_IRQn, (1<< NVIC_PRIO_BITS)-1);//配置中断优先级1<<4-1=16-1=15
SysTick->VAL =0; //配置count的值
SysTick->CTRL=SysTick_CTRL_CLKSOURCE_Msk| //配置system时钟为 72MSysTick_CTRL_TICKINT_Msk //使能中断
SysTick_CTRL_ENABLE_Msk; //使能systick
return (0);
}

4.SysTick中断优先级

  • systick中断优先级配置的是scb->shprx寄存器
  • 外设中断优先级配置的是nvic->iprx寄存器
    有优先级分组

①STM32的外设(内核还是片上)都是使用4个二进制来表示中断优先级
②中断优先级的分组对内核和外设同样适用,只需要将中断优先级的四个位按外设优先级来分组即可,人为的进行分出抢占优先级和子优先级。例举:
1<<4-1=16-1=15 (1111)
前面两位表示抢占优先级 后面两位表示子优先级
33

5.SysTick应用

编写延时函数

void delay_ms(uint32_t ms)
{
	uint32_t i;
	
	SysTick_Config(72000);
	for(i = 0; i<ms ; i++)
	{
		
		while(!((SysTick->CTRL)&(1<<16)));
	}
	SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
	
	
}
void delay_us(uint32_t ms)
{
	uint32_t i;
	
	SysTick_Config(72);
	for(i = 0; i<ms ; i++)
	{
		while((!(SysTick->CTRL)&(1<<16)));
	}
	SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
	
}
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值