CH32V3系列的Systick参数问题太

如下函数说明的公式72M/8000/9000000 = 1/1000 = 1ms  9000000的来源依据是什么,如果主频改为144M呢?

void Systick_Init(void)

{

    //此处在进行初始化的时候设置比较寄存器的值

    SysTick_Config(SystemCoreClock / 8000);//1ms            72M/8000/9000000 = 1/1000 = 1ms

}


您好,9000000是SysTick的时基,具体可参考系统计数控制寄存器(STK_CTLR)的位2,默认时基是HCLK/8作为时基,当系统主频为72MHz时,时基为72MHz/8=9000000。当系统主频为144MHz时,时基为144MHz/8=18MHz。关于SysTick具体介绍,可参考CH32V307应用手册第九章。CH32V307应用手册下载链接如下:

https://www.wch.cn/downloads/CH32FV2x_V3xRM_PDF.html 

image.png


主函数如下图,延时500ms打印1,在主频72MHz正常打印,修改主频144后延时时间并不是2倍关系,修改延时初始化原本SystemCoreClock / 8000000;现在要SystemCoreClock / 64000000;才正常。这是为什么,是更换主频需要另外的设置吗?

image.png

图一 主函数

image.png

图二正常延时

image.png

图三 修改主频 时间不是倍数

image.png

图四延时修改为64 正常延时


您好,首先我们工程中的延时函数不会随着主频改变而改变的,延时函数的入口参数设置的是500,那就是对应500的延时,不会随着主频的改变而改变。因为我们在延时函数初始化中配置SystemCoreClock是随着你配置系统主频的改变而改变的,如下图1。首先我觉得你应该了解一下SysTick的工作原理。我们sysTick默认的时基是HCLK/8,可参考2楼回复,HCLK通常就是指系统主频。即时基就是SystemCoreClock/8。那么计数器计数一次的时间就是1/(SystemCoreClock/8)。当系统主频为72MHz时,计数一次的时间为1/9MHz,即1/9us。我们在延时函数初始化中配置p_us = SystemCoreClock / 8000000,SystemCoreClock 为72MHz,除以8就是9,9乘以(1/9)正好就是1,同理可得144MHz下结果也是1,因此延时函数不会随着主频改变而改变。

image.png

图1


是的,正是后面看了手册反应过来, 在144MHz下我的板子无法运行才造成我修改64 ,这个板子在72、96MHz下都是正常的,所以我才发另一个帖子询问关于主频运行在144MHz的电路设计是否有注意事项,主要是这个板子原本是stm32的,外围不一定适合ch32v303cbt6。

想要主频设定144MHz,硬件设计需要注意什么 - 沁恒微电子社区 (wch.cn)

标题才是我想知道的,帖子内容只是证明过程,不是关于定时器的。



只有登录才能回复,可以选择微信账号登录