SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK );
时间: 2023-08-14 19:02:29 浏览: 364
`SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK)`是一个函数调用,用于配置SysTick定时器的时钟源为HCLK(即系统时钟)。
在Cortex-M系列微控制器中,SysTick定时器是一个系统级定时器,用于提供基本的延时功能。它可以通过设置不同的时钟源来满足不同的需求。
函数`SysTick_CLKSourceConfig`用于配置SysTick定时器的时钟源。参数`SysTick_CLKSource_HCLK`表示将时钟源设置为HCLK,即使用系统时钟作为定时器的时钟源。
通过将定时器的时钟源设置为HCLK,可以确保定时器的计数频率与系统时钟频率相同,从而实现准确的延时功能。
需要注意的是,该函数调用前需要先使能SysTick定时器,并根据实际需求进行相应的配置。
相关问题
void delay_init(u8 SYSCLK) { SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//选择48M时钟 HCLK/8 // SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);//选择8M时钟 HCLK fac_us=SYSCLK/8; //为系统时钟的1/8 fac_ms=(int16_t)fac_us*1000;//每个ms需要的systick时钟数 }
这段代码是用来初始化延时函数的。其中,`SYSCLK` 是系统时钟频率,通过该参数计算出每个微秒需要的 SysTick 时钟数 `fac_us`,以及每个毫秒需要的 SysTick 时钟数 `fac_ms`。在该函数中,通过设置 SysTick 时钟源为 HCLK/8,选择了 48MHz 的时钟源。这个函数的作用是为后面的延时函数提供时钟源。
``` SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);``` 如何在程序中利用 SysTick 实现延时?
`SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8)` 这行代码是在配置 System Tick (SysTick) 的时钟源。System Tick 是一种嵌入式系统中常用的计时器,用于提供非常短时间尺度的定时任务,通常在 Cortex-M系列微控制器中使用。
在 ARM Cortex-M 微控制器中,`HCLK_Div8` 表示将系统时钟(Hartree Clock,也称为 Main Clock 或 System Clock)分频为 8 次,作为 SysTick 的时钟频率。这样设置后,每 tick(一次 SysTick 计数周期)的时间就会比 HCLK 长很多,方便用于更长延迟量级的计算。
为了利用 SysTick 实现延时,你需要按照以下步骤:
1. **初始化 SysTick**:
- 首先需要启用 SysTick,并设置它的工作模式,例如开启并配置好定时器周期(tick period)。
```c
// Enable SysTick
SysTick_Config(SystemCoreClock / (SysTick_LOAD_RELOAD + 1));
```
这里 `SystemCoreClock` 是系统的主时钟频率,`SysTick_LOAD_RELOAD` 是 SysTick的最大计数值,一般等于 `(SysTick_MAX_TICKS - 1)`。
2. **设置中断服务函数(ISR)**:
- 为 SysTick 中断分配一个处理函数,当计数到最大值时,这个函数会被自动调用。
```c
void SysTick_Handler(void)
{
// Your delay code will go here once per tick
}
```
3. **设置延时期限**:
- 使用 SysTick 计数器设置一个预期的延时期限,然后开始计数。
```c
// Set a timeout for the desired delay in ticks
uint32_t timeout_ticks = YOUR_DESIRED_DELAY * (SysTick_CLKSOURCE_HZ / SystemCoreClock);
// Start the SysTick timer
SysTick_SetCount(timeout_ticks);
```
4. **等待定时结束**:
- 主程序进入其他循环或等待状态,直到 SysTick 中断发生。
5. **中断回调处理**:
- 当 SysTick 中断触发时,执行之前设置的 `SysTick_Handler()` 函数,完成延时任务。
注意,由于硬件限制,直接使用 SysTick 计数可能无法得到精确的延迟,特别是在高负载下可能会有偏差。如果你对延时精度要求很高,可以考虑使用其他更为精准的定时机制,如硬件定时器或者软件定时器。
阅读全文