你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

HAL库 时钟定义初始值错误?

[复制链接]
idodoyo 提问时间:2015-7-22 21:09 /
在\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c文件中
第140行这个,是用MX 生成的代码,SystemCoreClock 为什么是160M,而不是168M
  uint32_t SystemCoreClock = 16000000;
  __IO const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};


收藏 评论5 发布时间:2015-7-22 21:09

举报

5个回答
Paderboy 回答时间:2015-7-22 21:58:43
用cube可以手动设置的。。你下载个玩玩就知道了。。
creep 回答时间:2015-7-22 22:24:54
本帖最后由 creep 于 2015-7-22 22:26 编辑

楼主明显看错了啊,uint32_t SystemCoreClock = 16000000;应该是16M才对吧,其实此处这个值无所谓的,因为这个只是初始值,配置时钟的时候还会更新。
这个变量定义的时候注释说的很明白了:HAL库是使用方法3进行更新这个值的。
rcc.jpg
1、首先使用HAL会调用 SystemClock_Config();更新系统时钟,在这个函数里面又调用了HAL_RCC_ClockConfig,
rcc.jpg

2、在函数HAL_RCC_ClockConfig的最后调用了 HAL_InitTick (TICK_INT_PRIORITY);

rcc.jpg

3、在HAL_InitTick (TICK_INT_PRIORITY);调用了HAL_RCC_GetHCLKFreq,

rcc.jpg

4、最后HAL_RCC_GetHCLKFreq里面SystemCoreClock被更新为设置的168M或者180M或者其他值。。

rcc.jpg

你会发现这个过程不单更新了SystemCoreClock的值,还更新了SysTick的时钟源(因为在HAL_Init();里面已经设置过一次了),所以即使修改了主时钟的频率,SysTick的1ms的中断还是准确的。





moyanming2013 回答时间:2015-7-22 22:34:51
creep 发表于 2015-7-22 22:24
楼主明显看错了啊,uint32_t SystemCoreClock = 16000000;应该是16M才对吧,其实此处这个值无所谓的,因为 ...

学习了。
感觉不是168是因为没必要非得100%CPU全速吧
creep 回答时间:2015-7-22 22:47:56
本帖最后由 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;
rcc.jpg


不太明白你说的主频配置为168M和CPU100%全速是什么意思,这个应该可以超频到更高吧。




idodoyo 回答时间:2015-7-23 00:49:14
creep 发表于 2015-7-22 22:24
楼主明显看错了啊,uint32_t SystemCoreClock = 16000000;应该是16M才对吧,其实此处这个值无所谓的,因为 ...

原来如此!!!不错

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版