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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版