关于CH32V208时钟设置的疑问

在设置v208时钟的时候发现了一个很奇怪的问题,在官方sdk的SetSysClockTo120_HSE(void)函数中,如果屏蔽掉RCC->CFGR0 |= (uint32_t)(3<<22); rcc-="">CFGR0 |= (uint32_t)(3<<22); 的时候,mco输出是120m,通过查阅手册发现bit[23:22]是设置USBFS/USBOTG 时钟分频的,请问这个分频参数会关系到pll的结果吗?

QQ截图20221017154541.png

对于这个11 我的理解是:需要先把pll开到240m,即16m*15倍频,然后使用usb的时候需要设置五分频,但是现在的问题是,我已经开到了16m*15倍频,但是不置位11的话,pll的实际时钟只有120m,到不了240m。

您好,

关于你的第一个疑问,当你屏蔽掉RCC->CFGR0 |= (uint32_t)(3<<22); rcc-="">CFGR0 |= (uint32_t)(3<<22);这两行代码之后,在RCC配置完成之后将RCC_CFGR0寄存器的值打印出来为0x35040a,,位17默认为0,HSE 4分频进入PLL,如下图。即sysclk大小为32/4*15=120MHz,MCO输出120MHz。当注释掉这两行代码,HSE会按照位17默认配置进行4分频;

关于你的第二个问题,当不注释掉这两行代码的时候,sysclk打印输出即MCO引脚输出都是240MHz,我这边测试都是没问题的,如下图2。测试的时候注意示波器的采样率不要低于所测量的数值。否则会测试不准,采样率最好大于240MHz.

image.png

图1

image.png

图2



以下的我的试验结果,发现对于时钟配置方面还是有问题

1、只有在不注释  RCC->CFGR0 |= (uint32_t)(3<<22);的时候 sysclk才为240m 后面会放上代码

2、在对比注释与不注释RCC->CFGR0 |= (uint32_t)(3<<22);的寄存器时 发现PLLXTPRE并没有改变,但是只有不注释的时候才会有sysclk=240m

3、对于pllsrc和pllxtpre的寄存器描述有歧义,主要是对于分频部分,看时钟图有2分频 4分频 8分频的选项,但是寄存器只写了4和8

4、如果我上面没说错的话,那么代表必须对USBPRE置位11才可以让sysclk到240m,即HSE二分频进入PLL,是不是寄存器手册有问题呢?1666018506907974.png

1666018506870334.png

1666018506196187.png

icon_rar.gifCH32V208WBU6-CLK.zip



顶帖


您好,关于你的问题:

1、当不注释掉RCC->CFGR0 |= (uint32_t)(3<<22);的时候,即配置时钟配置寄存器 0RCC_CFGR0) 的2223位为1,如下图。外部晶振HSE大小为32MHz,二分频之后大小为16MHz,再15倍频之后PLLCLK240MHz,所以240MHz没问题。我在回复中解答了关于你MCO输出120MHz的问题,并没有说这个配置有问题。

image.png 

 image.png

2、关于注释与不注释RCC->CFGR0 |= (uint32_t)(3<<22);,改变的只是寄存器位22、23,但当22、23位配置为1的时候,要求HSE二分频,当22、23位不配置为1的时候,HSE会按照默认配置HSE进行4分频,如下图,即32/4*15=120MHz,我在前面回复中有解释过。

image.png 

3、关于你的问题3,建议看208时钟树框图,如下图,当你时钟配置寄存器 0RCC_CFGR0) 的2223位为1,走2分频这条线,当没配置的时候走48分频

 image.png

4关于问题4,是对USBPRE置位11才可以让sysclk到240m,即HSE二分频进入PLL,但手册并没有错,你可以看一下208时钟树框图。后续若有问题,可通过邮箱继续和我沟通(lzs@wch.cn),下面链接为数据手册下载链接,里面有时钟树框图,可以参考一下

/downloads/CH32V208DS0_PDF.html

 



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