对于F7 的HAL库,其初始化流程都是这样的: /* Enable the CPU Cache */ CPU_CACHE_Enable(); /* Init HAL */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); 在HAL_Init()函数中初始化了系统滴答时钟,但是这个时候SystemCoreClock 还没经过 SystemClock_Config();配置,也就是说这个时候SystemCoreClock = 16000000;,在经过SystemClock_Config();配置成其他时钟后(比如200或216M),系统滴答时钟是不准的。还需要使用SysTick_Config()配置一次才能正常,但这一步很多人会忘记的,以为前面已经配置了,这个小问题再次提醒大家。 还有一个问题是:想配置系统时钟1s一次中断,配置系统时钟源为8分频后,有问题了 比如如下配置后,不是1ms定时周期了 void Sys_Init(void) { HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8); SysTick_Config(SystemCoreClock /8/1000); } 这是什么问题呢?求指教? |
谢谢提醒,问题找到:
void Sys_Init(void)
{
SysTick_Config(SystemCoreClock /8/1000);
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8);
}
这样才是正确的配置方式!!具体原因看SysTick_Config函数
从stm32F7手册上看到时钟树,显示cortex系统时钟固定由AHB时钟的8分频提供
那为什么还有HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8);选择1分频和8分频呢?
而且SysTick_Config(SystemCoreClock /1000)这样设置应该没法定时为1ms啊,因为系统时钟固定等于AHB/8的,所以这个有点困惑,是时钟树搞错了?求指教
评分
查看全部评分