请问HAL的滴答定时器配置问题

请问HAL的滴答定时器配置问题
用的stm32f407,滴答定时器时钟为168MHZ,由于用到了HAL_Delay(),原本HAL_InitTick()配置滴答定时器频率只有16MHz,所以想着改一下。
但是我发现根本Cubemx根本没有调用这个函数,所以systick是根本没用吗

img


就算更改#if强行开启,这个初始化函数也写成不允许被外部调用

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt: 您好, HAL的滴答定时器配置确实会受到系统时钟的影响。下面是解决该问题的步骤: 1. 查看原始代码中的HAL_InitTick()函数。在这个函数中,提供了滴答定时器预分频器的设置以及时钟的打开和关闭。 ```c HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) { RCC_ClkInitTypeDef clkconfig; uint32_t uwTimclock, uwAPB1Prescaler = 0; uint32_t pFLatency; /*Configure the SysTick to have interrupt in 1ms time basis*/ uwTimclock = HAL_RCC_GetHCLKFreq(); uwAPB1Prescaler = (RCC->CFGR & RCC_CFGR_PPRE1) >> 10; pFLatency = FLASH->ACR; pFLatency = (pFLatency >> 0x01) & 0x03; uwTimclock = uwTimclock >> uwAPB1Prescaler; uwTimclock = (uwTimclock * TICK_INT_PRIORITY) / 10000; uwTickPrio = TickPriority; uwTickFreq = HAL_TICK_FREQ_1000HZ; /* Configure the SysTick IRQ priority */ HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority ,0U); /* Configure the SysTick IRQ clock source to be core clock source */ SysTick->CTRL |= SysTick_CTRL_CLKSOURCE_Msk; /* SysTick_IRQn interrupt configuration */ HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U); /* Reload Value sets the no. of ticks between two interrupts. If SysTick is clocked by processor clock divided by 8, Reload Value should be (1000 * Processor Clock / 8) - 1 to generate a 1 ms time base. */ SysTick->LOAD = (uwTimclock - 1UL); /* Enable SysTick_IRQn Interrupt */ SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk; return HAL_OK; } ``` 2. 由于在Cubemx中没有调用HAL_InitTick()函数,因此您需要将要更改的代码直接添加到应用程序中。您可以更改上述函数中的“uwTimclock”变量,将其更改为系统时钟频率。 ```c /*Configure the SysTick to have interrupt in 1ms time basis*/ uwTimclock = SystemCoreClock; ``` 3. 在您的应用程序中,您需要先调用“HAL_RCC_GetHCLKFreq()”函数获取当前的系统时钟频率。然后,您可以将其作为参数传递到SysTick_Config()函数中,该函数会修改滴答定时器的设置。 ```c /* Configure the SysTick timer to overflow every 1ms */ HAL_SYSTICK_Config(SystemCoreClock / 1000); ``` 有关更多详细信息,请参阅STM32F4的HAL库文档以获取有关SysTick_Config函数的更多详细信息。

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^