hal_systick_config
时间: 2023-04-29 13:06:00 浏览: 193
b'hal_systick_config' 是一种用于配置 systick 定时器的函数。在嵌入式系统中,systick 定时器是一种基本的定时器,用于生成周期性的中断,并可用于实现延时函数等。该函数的作用是设置 systick 定时器的时钟频率、中断优先级等参数,以便正确地使用该定时器。
相关问题
uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb);
`HAL_SYSTICK_Config()` 是一个函数,用于配置 SysTick 定时器的时间间隔。它的参数 `TicksNumb` 是一个 32 位无符号整数,表示 SysTick 定时器的计数器每经过多少时钟周期就会加一。该函数返回一个 32 位无符号整数,表示 SysTick 定时器的时钟频率。在调用该函数之前,需要先初始化 SysTick 定时器的时钟源和中断优先级。
__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) { /* Configure the SysTick to have interrupt in 1ms time basis*/ if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U) { return HAL_ERROR; } /* Configure the SysTick IRQ priority / if (TickPriority < (1UL << __NVIC_PRIO_BITS)) { HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U); uwTickPrio = TickPriority; } else { return HAL_ERROR; } / Return function status */ return HAL_OK; }中断时间计算过程
在这段代码中,中断时间的计算过程如下:
1. `SystemCoreClock`是系统时钟频率,单位为Hz。
2. `1000U`表示1毫秒的时间,单位为微秒。
3. `uwTickFreq`是tick的频率,单位为Hz,可以通过`HAL_InitTick()`函数的参数`TickPriority`来设置。
4. `SystemCoreClock / (1000U / uwTickFreq)`表示在tick频率为`uwTickFreq`的情况下,每个tick的时间,单位为微秒。
5. `HAL_SYSTICK_Config()`函数会将上述计算结果作为参数,用于配置SysTick定时器的计数器自动重载寄存器(reload register)的值,来实现1毫秒的中断时间。
6. 如果成功配置定时器中断,`HAL_SYSTICK_Config()`函数将返回0,否则返回非0值。
7. 如果成功配置定时器中断,则通过`HAL_NVIC_SetPriority()`函数设置中断优先级,并将`uwTickPrio`变量设置为`TickPriority`的值。
8. 如果`TickPriority`的值大于或等于`1UL << __NVIC_PRIO_BITS`,则返回错误状态`HAL_ERROR`;否则,返回成功状态`HAL_OK`。
总之,这段代码通过配置SysTick定时器的计数器自动重载寄存器的值,实现了1毫秒的中断时间。
阅读全文