SysTick_Config(SystemCoreClock / 1000000U
时间: 2024-02-12 18:28:38 浏览: 150
这是一个STM32的代码,用于配置系统定时器SysTick的时钟频率为系统时钟频率的1/1000000。SysTick是一个24位的计数器,每次计数器减1,当减到0时会产生一个SysTick中断。这个中断可以用来实现定时功能。在这段代码中,SystemCoreClock表示系统时钟频率,单位是Hz,除以1000000就可以得到每微秒的时钟周期数,然后将这个值作为参数调用SysTick_Config函数,就完成了系统定时器的配置。
相关问题
__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毫秒的中断时间。
SysTick_IRQn
SysTick_IRQn是一个用于处理系统滴答定时器(SysTick)中断的中断号。在提供的引用中,它被用于启用SysTick中断。在main()函数中调用NVIC_EnableIRQ(SysTick_IRQn)会导致硬件错误(HardFault)发生。然而,如果移除对NVIC_EnableIRQ(...)的调用,即只调用SysTick_Config(SystemCoreClock * SYSTICK_INT_FREQ),则不会出现硬件错误。SysTick_IRQn也在裸机代码中被使用,在HAL_InitTick函数中,用于配置SysTick中断的优先级。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [NVIC_EnableIRQ(SysTick_IRQn)](https://blog.csdn.net/u011878611/article/details/107748984)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *3* [【FreeRTOS】STM32CubeMX配置STM32FreeRTOS(一)](https://blog.csdn.net/weixin_41865104/article/details/107399420)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文