关于CH582F启用外部32K晶振的问题

    关于如何启用外部32K晶振,我看到有两种方法,一个是修改工程配置添加宏,也就是把CLK_OSC32K改成0,我使用这种方法之后CH582F就卡住了。另一种方法是使用函数启用,如下图。

    LClk32K_Select(Clk32K_LSE);             //启用外部32K 精度20ppm 推荐晶体参数32768hz 12.5pf 20ppm
    R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
    R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
    R8_CK32K_CONFIG |= RB_CLK_XT32K_PON;    //给外部32K上电
    R8_SAFE_ACCESS_SIG = 0;

    单独使用这种方法倒是可以正常运行,但是如果我同时也将CLK_OSC32K改为了0,则还是会卡住。

    我想请问这两种启用方法有什么区别吗?是否可以用什么方法查看启用的是外部还是内部32K?

对了,我是使用了RF通讯的


您好,是用的官方评估板+最新EVT测试RF通讯吗 CH583EVT.ZIP - k1体育 - 十年品牌 值得信赖 (wch.cn)

检查以下您板子上有没有焊接32K晶振,有没有虚焊。我这边在工程配置中添加CLK_OSC32K宏为0测试,是可以运行的,您可以重新解压一份EVT测试,可能是误修改了某些公共文件导致异常。


你好,我用其他板子试了下,CLK_OSC32K更改为0后可以正常运行了,应该是我自己的画的板子有些问题,我到时再检查一下。不过我还是想问下我前面提到的方法一和方法二是等价的吗?可以靠api函数启用外部32k吗?


不等价。

如果是单纯跑RTC,用LClk32K_Select切换内/外部32K时钟源,是没问题的。

一般涉及到CLK_OSC32K宏,是要跑BLE协议栈的。在初始化BLE库时,CLK_OSC32K宏传递给协议栈了,协议栈会根据CLK_OSC32K判断是否启用了内部32K;若启用了内部32K,在默认每2分钟执行一次的RF校准事件HAL_REG_INIT_EVENT下,是要校准内部RC的,围绕校准功能需要注册多个函数(见MCU.c内CH58X_BLEInit函数)。

实测在BEL协议栈初始化后调用LClk32K_Select切换到外部32K时钟源会影响连接。


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