HAL库 时钟定义初始值错误?
在\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c文件中第140行这个,是用MX 生成的代码,SystemCoreClock 为什么是160M,而不是168M
uint32_t SystemCoreClock = 16000000;
__IO const uint8_t AHBPrescTable = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
用cube可以手动设置的。。你下载个玩玩就知道了。。 本帖最后由 creep 于 2015-7-22 22:26 编辑
楼主明显看错了啊,uint32_t SystemCoreClock = 16000000;应该是16M才对吧,其实此处这个值无所谓的,因为这个只是初始值,配置时钟的时候还会更新。
这个变量定义的时候注释说的很明白了:HAL库是使用方法3进行更新这个值的。
1、首先使用HAL会调用 SystemClock_Config();更新系统时钟,在这个函数里面又调用了HAL_RCC_ClockConfig,
2、在函数HAL_RCC_ClockConfig的最后调用了 HAL_InitTick (TICK_INT_PRIORITY);
3、在HAL_InitTick (TICK_INT_PRIORITY);调用了HAL_RCC_GetHCLKFreq,
4、最后HAL_RCC_GetHCLKFreq里面SystemCoreClock被更新为设置的168M或者180M或者其他值。。
你会发现这个过程不单更新了SystemCoreClock的值,还更新了SysTick的时钟源(因为在HAL_Init();里面已经设置过一次了),所以即使修改了主时钟的频率,SysTick的1ms的中断还是准确的。
creep 发表于 2015-7-22 22:24
楼主明显看错了啊,uint32_t SystemCoreClock = 16000000;应该是16M才对吧,其实此处这个值无所谓的,因为 ...
学习了。
感觉不是168是因为没必要非得100%CPU全速吧 本帖最后由 creep 于 2015-7-22 22:50 编辑
moyanming2013 发表于 2015-7-22 22:34
学习了。
感觉不是168是因为没必要非得100%CPU全速吧
如果使用上面的图中步骤1的设置的时钟会是180M(使用外部8M晶振),如果使用USB的话主频一般配置为168M。当然根据需要和个人爱好可以随便配置。
PLL_VCO = (HSE_VALUE/ PLL_M) * PLL_N = (8/8)*360 = 360;
SYSCLK = PLL_VCO / PLL_P = 360/RCC_PLLP_DIV2 = 360/2 = 180M;
不太明白你说的主频配置为168M和CPU100%全速是什么意思,这个应该可以超频到更高吧。
creep 发表于 2015-7-22 22:24
楼主明显看错了啊,uint32_t SystemCoreClock = 16000000;应该是16M才对吧,其实此处这个值无所谓的,因为 ...
原来如此!!!不错
页:
[1]