SysTick的时钟源配置为处理器时钟(HCLK)除以12,该如何在keil中配置SysTick Control and Status Register
时间: 2024-09-10 17:15:51 浏览: 38
SysTick(System Timer)是一个系统定时器,它是ARM Cortex-M微控制器内核中的一个特性。SysTick可以用来产生周期性中断。SysTick定时器通常用于操作系统的心跳定时器或者延迟功能。
SysTick的时钟源可以配置为处理器时钟(HCLK)除以1,或者是HCLK除以8或HCLK除以12。如果需要配置SysTick的时钟源为HCLK除以12,可以通过配置SysTick Control and Status Register(SysTick Control and Status Register, SYST_CALIB)中的SKE位(SysTick Calibrate Enable)和TENMS字段来实现。SKE位用于启用校准功能,而TENMS字段指定了SysTick定时器以HCLK为时钟源时,计数器达到0所需的时钟周期数。
在Keil中配置SysTick Control and Status Register来设置时钟源为HCLK/12的步骤大致如下:
1. 配置SKE位为1,启用校准功能。
2. 根据HCLK时钟频率和希望的SysTick中断频率计算TENMS字段的值。例如,如果HCLK是72MHz,而你希望SysTick每秒中断一次,那么你需要计算TENMS值,使得SysTick在72MHz/12的频率下每秒中断一次。
3. 设置SysTick Control and Status Register,以使SysTick时钟源为HCLK除以12。
以下是使用C语言在Keil中进行配置的一个示例代码片段:
```c
// 假设HCLK时钟频率为72MHz,我们希望SysTick每秒中断一次。
#define HCLKFrequency 72000000 // HCLK频率为72MHz
#define SysTickFrequency 1 // SysTick中断频率为1Hz
void SysTick_Configuration(void) {
// 计算SysTick时钟周期(TENMS)
// SysTick时钟周期 = HCLK频率 / SysTick频率 * (TENMS + 1)
// 解方程得到 TENMS = (SysTick时钟周期 / (HCLK频率 / SysTick频率)) - 1
uint32_t sysTickPeriod = (HCLKFrequency / SysTickFrequency) - 1;
// 使能SysTick定时器校准
SysTick->CTRL |= (1 << SysTick_CTRL_ENABLE_Pos); // TENMS字段会被重载
SysTick->LOAD = sysTickPeriod;
SysTick->VAL = 0; // 清除当前计数值
SysTick->CTRL &= ~(1 << SysTick_CTRL_CLKSOURCE_Pos); // 设置SysTick时钟源为处理器时钟
SysTick->CTRL |= (1 << SysTick_CTRL_ENABLE_Pos); // 使能SysTick定时器
}
```
注意,上述代码中的 SysTick->CTRL 和 SysTick->LOAD 是Cortex-M处理器中SysTick定时器的寄存器映射。在实际的Keil工程中,你需要根据你的硬件平台提供的系统初始化代码或参考手册来确定正确的寄存器地址和配置方法。
阅读全文