【STM32】SysTick的使用

前提

最近,在学习STM32的嵌入式开发,使用的是STM32F103C8T6,在使用延时函数时注意到SysTick模块,故进行学习。STM32F103C8T6使用的是M3内核,本文亦是参考M3内核文档PM0056和STM32寄存器手册RM0008完成。
SysTick是单片机内核中的一个计数器,可与总线时钟并行,时钟计数精确且不影响总线上代码的运行。

寄存器介绍

The processor has a 24-bit system timer, SysTick, that counts down from the reload value to zero, reloads (wraps to) the value in the LOAD register on the next clock edge, then counts down on subsequent clocks.
处理器有一个24位的系统计数器,名叫SysTick。该计数器首先从装载数递减计数至零,然后在下一个时钟沿重新装载LOAD寄存器中的数,如此往复。
When the processor is halted for debugging the counter does not decrement.
当处理器调试宕机时,计数器不再递减计数。

CTRL

在这里插入图片描述
在这里插入图片描述

LOAD

在这里插入图片描述
在这里插入图片描述

VAL

在这里插入图片描述
在这里插入图片描述

CALIB

在这里插入图片描述
在这里插入图片描述

延时函数

void Delay_us(u32 i)
{
    u32 temp;
    SysTick->LOAD = 9*i; //设置重装数值,函数延时单位为us
    SysTick->CTRL = 0X01;//使能计数器,减到零是无动作,采用外部时钟源(72MHz/8 = 9MHz)
    SysTick->VAL = 0;//计数器清零
    do
    {
        temp = SysTick->CTRL;//读取当前倒计数值
    }
    while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
    SysTick->CTRL = 0X00;//关闭计数器
    SysTick->VAL = 0;//计数器清零
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值