沈阳芯硕科技有限公司

免费会员·3年
您现在的位置: 沈阳芯硕科技有限公司>>芯片>> 华大F460和4A0 systick使用注意
华大F460和4A0 systick使用注意
参考价: 面议
具体成交价以合同协议为准
  • 产品型号
  • 品牌
  • 代理商 厂商性质
  • 沈阳市 所在地

访问次数:196更新时间:2021-08-18 10:32:03

联系我们时请说明是智能制造网上看到的信息,谢谢!
免费会员·3年
人:
沈阳芯硕科

扫一扫访问手机商铺

产品简介
1 1
HC32F460 系列是基于 ARM® Cortex®-M4 32-bit RISC CPU,工作频率 200MHz 的高性能 MCU。支持 所有 ARM 单精度数据处理指令和数据类型,支持完整 DSP 指令集。内核集成了 MPU 单元, 同时叠加 DMAC 专用 MPU 单元,保障系统运行的安全性。
产品介绍

客户在用华大MCU systick做延时,表示系统延时不准确,差距很大。

看一下systick的initial函数 SysTick_Init:


发现输入到SysTick_Config中的SystemCoreClock,客户打印或者debug发现SystemCoreClock为8M,实际客户使用200Mhz运行。

那么这个systick timer的计数时基就不对了,所以看一下SystemCoreClock是哪里配置的。
发现是在系统刚启动start.s调用的SystemInit内再调用SystemCoreClockUpdate函数中根据实际系统时钟设置情况赋值。


而实际程序中我们往往需要使用到PLL把MCU系统时钟变更到更高的频率上,比如200Mhz。
通常我们会在main函数内加一个ClkInit类似函数,在ClkInit中设置PLL 提高系统时钟。
那么startup_hc32f46x.s文件中在main函数执行之前,会调用SystemInit:


而SystemCoreClock就在SystemInit内设置,所以也就是说.s文件在我们main函数设置系统clk之前就已经根据MCU刚刚启动时的时钟配置把SystemCoreClock赋值了。
而MCU刚启动的时候,都时默认内部8M RC振荡器,SystemCoreClock为8Mhz也就不奇怪了。

得出结论,我们在驱动或者其他程序运行的地方用到SystemCoreClock变量的地方 都会出现我们不想要的8Mhz时钟。(在main运行后 变更了系统时钟)

所以,请在main调用类似ClkInit函数后,再次调用一下SystemInit或者SystemCoreClockUpdate来更新全局变量SystemCoreClock。
这样比如systick等用到变量SystemCoreClock初始化的功能都会正确设置时基。

这里我建议使用SystemCoreClockUpdate来更新全局变量SystemCoreClock。



会员登录

×

请输入账号

请输入密码

=

请输验证码

收藏该商铺

X
该信息已收藏!
标签:
保存成功

(空格分隔,最多3个,单个标签最多10个字符)

常用:

提示

X
您的留言已提交成功!我们将在第一时间回复您~
产品对比 二维码

扫一扫访问手机商铺

对比框

在线留言