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;

}

 

posted @ 2024-11-16 13:57  嵌入式新手  阅读(261)  评论(0)    收藏  举报