打印
[技术问答]

华大F460和4A0 systick使用注意!

[复制链接]
8093|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
白虎姐|  楼主 | 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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

41

帖子

0

粉丝