[技术问答] 华大F460和4A0 systick使用注意!

[复制链接]
 楼主| 白虎姐 发表于 2021-9-22 15:16 | 显示全部楼层 |阅读模式
客户在用华大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也就不奇怪了。
更多信息咨询请联系angel.qi:13827489351(微信与手机号码同步)
得出结论,我们在驱动或者其他程序运行的地方用到SystemCoreClock变量的地方 都会出现我们不想要的8Mhz时钟。(在main运行后 变更了系统时钟)所以,请在main调用类似ClkInit函数后,再次调用一下SystemInit或者SystemCoreClockUpdate来更新全局变量SystemCoreClock。这样比如systick等用到变量SystemCoreClock初始化的功能都会正确设置时基。
查询无结果 发表于 2021-10-11 15:36 | 显示全部楼层
华大官网没找到F460关于systick的介绍,楼主是否有相关的介绍资料
wubangmi 发表于 2021-10-13 09:50 | 显示全部楼层
有点吹毛求疵了吧,这不能怪例程,只能怪自己写代码的习惯不好,MCU不是一上来就想应该配置时钟再配置你想要的外设功能么,时钟都没有按照自己的要求配好,就开始配置其他外设,这不是明摆着地基都没打好,直接上面盖几十层大楼,不出问题就怪了
d1z1y2 发表于 2021-10-15 09:01 | 显示全部楼层
systick是内核自带的,其寄存器名称也是通用的,不同的是中断函数名称。移值systick程序的时候,弄清楚systick的时钟源,以及中断函数名称。
楼主说的问题,其它品牌的也有,如STM32
hh电子爱好者 发表于 2025-1-3 11:07 | 显示全部楼层
我看了我使用的f4a0的例程,在BSP_CLK_Init初始化时钟的时候,是有对SystemCoreClock做更新的,应该是你自己写的程序,用例程的话应该都是有更新的
48354677753de4a743.png
hh电子爱好者 发表于 2025-1-3 11:08 | 显示全部楼层
d1z1y2 发表于 2021-10-15 09:01
systick是内核自带的,其寄存器名称也是通用的,不同的是中断函数名称。移值systick程序的时候,弄清楚syst ...

差不多是这个意思
申小林一号 发表于 2025-1-22 09:50 | 显示全部楼层
学习一下,提升个人技能
Amazingxixixi 发表于 2025-1-24 11:37 | 显示全部楼层
学习一下,提升技能,新年快乐
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

41

帖子

0

粉丝
快速回复 返回顶部 返回列表