STM32-配置SysTick定时器

    相信大家在使用STM32的过程中,一直都想配置并且使用定时器吧,下面小编就带大家了解SysTick定时器。

SysTick定时器是什么?

    从原理上来说,Systick定时器和开发板上的通用定时器没有区别。从功能上来说,Systick定时器主要是用来用来进行延时的(就是让CPU一直重复计数这件事),而通用或者高级定时器往往用来进行PWM输出、输入捕获等功能。至于为什么不用通用定时器或者高级定时器来完成延时功能,则是考虑到节省MCU的资源来做更重要的事。

Systick定时器相关寄存器

地址名称类型复位值描述
0xE000E010STK_CTRLRW0x0000 0000STK的控制和状态基础器
0xE000E014STK_LOADRW不确定STK的重载值寄存器
0xE000E018STK_VALRW不确定STK的当前值寄存器
0xE000E01cSTK_CALIBRO不确定STK 的标定值寄存器

实现函数

    Systick定时器在工作时,先将LOAD中存放的值放入VAL中,然后VAL中的值会在每个时钟周期中减1直到变成0,变成0并且有开启中断的前提下,就会触发中断。这里还需要注意的是LOAD是24位的,也就是最大值为FFFFFF

/*
	* @brief microsecond dealy(微秒级延时)
	* @param i:time to be delayed(延时时间)
	* @retval none
*/
void delay_us(u32 i){
	//u32表示uint32_t数据类型
	u32 temp = 0;
	SysTick->LOAD = 9*i;
	//使能状态,减到0是无动作,采用的是外部时钟源
	SysTick->CTRL = 1;
	//清空计数器
	SysTick->VAL = 0;
	do{
		temp = SysTick->CTRL;//获取当前计数值
	}while((temp&0x01) && (!(temp&(1<<16))));
	SysTick->CTRL = 0;//关闭计数器
	SysTick->VAL = 0;//清空计数器
}

/*
	* @brief millisecond dealy(毫秒级延时)
	* @param i:time to be delayed(延时时间)
	* @retval none
*/
void dealy_ms(u32 i){
	delay_us(i*1000);//毫秒与微秒的进制就是1000,因此微秒延时扩大1000倍就是毫秒延时	
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值