stm32f10x的内部定时器---systick
1.关于systick是什么

2.关于systick的作用
芯片硬件提供计时, 用来给操作系统提供时间基准,比如说ucos
还有一点,因为systick是 M3处理器内核携带的内设,所以只要用M3系列的处理器,设计systick的代码都可以相互移植
因为它是24位计数器,取值范围是0到2的24次方

工作方式:放入一个装载值,如果是向下计数,就会一直递减为0,并产生一次中断。然后会重新加载,反复循环。本质上就是一个24位递减计数器。
所以我们使用的时候就需要关注2个事情,每减少1个计数,经过多久。以及从多少开始减少。
3.systick的使用
下面的驱动文件写了一个延时函数
首先定义了一个全局变量 g_msTicks
关于systick的初始化函数,我们确定了时钟源HCLK,频率是72Mhz,每经过一个计数是 72 000 000 分之 1 秒,
从72000 - 1 开始计数(重装载值设置为 7199,装载进去的值都会被系统加一)。
同时我们启用中断,并开始计数。经过 72000次计数,也就是 1ms之后就会进入一次中断。
初始化最后会关闭systick功能
调用延时函数Delay_ms后,我们首先使能systick功能,每经过1ms进行一次中断,g_msTicks加一。
while (g_msTicks < ms);通过这个循环,可以保证系统会等待我们需要的延时
最后SysTick->CTRL &= ~(1<<0); //暂停systick
g_msTicks = 0; // 并且对清0
#include "systick.h"
volatile uint32_t g_msTicks = 0; // 在源文件中定义全局变量
void systick_configuration(void)
{
// 配置 SysTick 为系统时钟(HCLK)的时钟源
// 这里假设系统时钟为 72 MHz,需要配置为 1ms 中断
SysTick->LOAD = 72000 - 1; // 设置重载值 (72 MHz / 1000 Hz = 72,000)
SysTick->VAL = 0; // 清空计数器
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | // 使用 HCLK 作为时钟源
SysTick_CTRL_TICKINT_Msk | // 启用 SysTick 中断
SysTick_CTRL_ENABLE_Msk; // 启动 SysTick
SysTick->CTRL &= ~(1<<0); //暂停systick
}
void SysTick_Handler (void)
{
g_msTicks++; // 每毫秒中断一次,增加1
}
void Delay_ms(uint32_t ms)
{
SysTick->CTRL |= (1<<0); //启动systick
while (g_msTicks < ms);
SysTick->CTRL &= ~(1<<0); //暂停systick
g_msTicks = 0;
}

浙公网安备 33010602011771号