一、基本介绍
systick_config
函数是一种用于配置SysTick定时器的函数。SysTick是Cortex-M系列中的系统定时器,用于提供可选功能,如调试工具和RTOS(实时操作系统)调度器。systick_config
函数用于配置SysTick计数器的时钟源、计数器周期以及使能开关。在使用SysTick功能时,必须配置并启用该定时器,否则无法实现相应的功能。下面将结合代码进行详细讲解。
/**
* @brief 配置SysTick中断周期
* @param ticks 读取时钟节拍数(通常为HCLK/1000为1ms)
* @retval None
*/
void systick_config(uint32_t ticks)
{
SystemCoreClockUpdate();
SysTick_Config(SystemCoreClock / ticks);
}
二、详解SysTick_Config函数
SysTick_Config
函数是一个重载函数,提供两种不同的用法。
SysTick_Config(uint32_t ticks)
用于初始化SysTick计数器。SysTick_Config(uint32_t ticks, uint8_t clksource)
用于初始化SysTick计数器并选择计数器时钟源。 下面我们就逐步查看每个参数的含义。
三、参数解释
1. ticks
ticks
参数用来设置SysTick计数器的周期。具体来说,计数器将重复计数ticks
次,直到计数器归零并触发SysTick中断。用户可以根据实际需求设置此值。例如,如果每个rtc时钟周期为1毫秒,则可以设置1000作为ticks
的值,这样每1秒就会触发一次中断。下面是ticks
参数的具体解释:
- 如果
ticks
太大,计数器将过于频繁地重载并中断,这将增加CPU负载和功耗。 - 如果
ticks
太小,中断可能不稳定,导致定时器不准确。 实际应用中,ticks
的值通常取决于系统时钟的频率,通常为HCLK / 1000。如果HCLK是72MHz,则ticks
值为72000。
2. clksource
clksource
参数用于选择SysTick计数器的时钟源。有两个可选项:
SysTick_CLKSource_HCLK_Div8
:时钟源为HCLK / 8。SysTick_CLKSource_HCLK
:时钟源为HCLK。 如果选择HCLK / 8作为时钟源,将使SysTick计数器时钟的频率为HCLK / 8,这样就会延长计数器的周期,从而减少中断次数。这对于高负载的系统很有用,因为中断次数较少可以减少CPU负载和功耗。
四、使用示例
#include "stm32f10x.h"
void delay_ms(uint32_t ms);
int main(void)
{
SystemInit(); // 系统初始化
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
// 初始化 PB0
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStruct);
// 配置 SysTick 定时器,定时1ms,时钟源为 AHB
SysTick_Config(SystemCoreClock / 1000);
while(1)
{
GPIO_WriteBit(GPIOB, GPIO_Pin_0, Bit_SET); // PB0 置高
delay_ms(500); // 延时500ms
GPIO_WriteBit(GPIOB, GPIO_Pin_0, Bit_RESET); // PB0 置低
delay_ms(500); // 延时500ms
}
}
void delay_ms(uint32_t ms)
{
uint32_t i;
for (i = 0; i < ms; i++)
{
while (SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk); // 等待计数器为0
}
}
在上面的例子中,我们配置SysTick计数器的计数周期为1ms,并以AHB为时钟周期。然后,我们在主函数中使用GPIO_WriteBit
函数将PB0引脚切换为高电平/低电平以实现LED闪烁。最后,我们使用delay_ms
函数提供了一个定时500ms的快速延迟函数,以使LED看起来像是在闪烁。
五、总结
systick_config
函数是一种用于配置SysTick定时器的函数,用于提供可选功能,如调试工具和RTOS(实时操作系统)调度器。 在使用SysTick功能时,必须配置并启用该定时器,否则无法实现相应的功能。 本文详细介绍了systick_config
函数的详细用法和参数解释,并提供了一个简单的示例用于展示如何在STM32芯片上编写基本SysTick应用程序。希望本文对您有所帮助。