Systick定时器

本文介绍了STM32的Systick定时器,包括其24位倒计时功能、4个主要寄存器及作用。详细阐述了Systick的控制和状态寄存器、自动重装载寄存器、当前值寄存器和校准值寄存器。通过配置函数SysTick_CLKSourceConfig()和SysTick_Config()设置时钟源和初始化定时器,并提供了Systick中断服务函数。此外,还展示了如何使用Systick实现中断和非中断方式的延迟功能,以及注意的优先级设置问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

声明:内容来自正点原子PPT

Systick定时器就是系统滴答定时器,一个24位的倒计数定时器,计到0时,将从RELOAD寄存器中自动重装载定时初值。只有不把它在SysTick控制及状态寄存器中的使能位清楚,就永不停息,即使在睡眠模式下也能工作。

4个Systick寄存器:

    CTRL      SysTick 控制和状态寄存器  

    LOAD     SysTick 自动重装载除值寄存器 ---(设置后自动重载值固定,最大2^24)

    VAL        SysTick 当前值寄存器  ---(每个时钟周期减1,减到0重新装载LOAD的值)

    CALIB     SysTick 校准值寄存器

SysTick 控制和状态寄存器- CTRL:


对于STM32,外部时钟源是 HCLK(AHB总线时钟)的1/8
                           内核时钟是 HCLK时钟

     配置函数:SysTick_CLKSourceConfig();

SysTick 重装载数值寄存器- LOAD


SysTick 当前值寄存器- VAL


固件库中的Systick相关函数:

SysTick_CLKSourceConfig()    //Systick时钟源选择  misc.c文件中

SysTick_Config(uint32_t ticks) //初始化systick,时钟为HCLK,并开启中断 //core_cm3.h/core_cm4.h文件中


Systick中断服务函数:

void SysTick_Handler(void);

滴答定时器用中断的方式实现delay延时


滴答定时器不用中断实现延时:

void delay_init()
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); // 选择外部时钟  HCLK/8
fac_us=SystemCoreClock/8000000; // 系统时钟1/8,1uS时钟周期数  
fac_ms=(u16)fac_us*1000; // 1mS时钟周期数

}

//延时nus
//nus为要延时的us数       
void delay_us(u32 nus)
{
u32 temp;      
SysTick->LOAD=nus*fac_us; //时间加载,最大值2^24
SysTick->VAL=0x00;        // 清空计数器
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk ; // 开始计数
do
{
temp=SysTick->

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值