本文主要记录了【沁恒蓝牙mesh】CH58x 如何将RTC时钟切换为外部时钟
·X32MO
X32MI
引脚外接32M
时钟,作为MCU
系统运行的高速时钟PA11
PA10
引脚外接 32.768K
时钟关于 CH58X·
时钟计算可参考我的博文:
【沁恒蓝牙mesh】CH58x系统时钟配置与计算
软件默认使用的是 系统内部时钟
void HAL_TimeInit(void)
{
#if(CLK_OSC32K)
sys_safe_access_enable();
R8_CK32K_CONFIG &= ~(RB_CLK_OSC32K_XT | RB_CLK_XT32K_PON);
sys_safe_access_enable();
R8_CK32K_CONFIG |= RB_CLK_INT32K_PON;
sys_safe_access_disable();
Lib_Calibration_LSI();
#else
sys_safe_access_enable();
R8_CK32K_CONFIG |= RB_CLK_OSC32K_XT | RB_CLK_INT32K_PON | RB_CLK_XT32K_PON;
sys_safe_access_disable();
#endif
RTC_InitTime(2020, 1, 1, 0, 0, 0); //RTC时钟初始化当前时间
TMOS_TimerInit(0);
}
// 首先不要将PA10 PA11引脚配置为输出
sys_safe_access_enable();
// 切换LSE 内部32K使能 开启外部晶振
R8_CK32K_CONFIG |= RB_CLK_OSC32K_XT | RB_CLK_INT32K_PON | RB_CLK_XT32K_PON;
sys_safe_access_enable();
R16_CLK_SYS_CFG |= RB_CLK_SYS_MOD; // 32k 作为 HCLK
sys_safe_access_disable();
#include "CH58x_common.h"
void DebugInit(void)
{
GPIOA_SetBits(GPIO_Pin_9);
GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU);
GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA);
UART1_DefInit();
}
__HIGH_CODE
void test1(void){
//外部32K,需要屏蔽PA10/PA11的IO翻转(32K晶振引脚)
sys_safe_access_enable();
R8_CK32K_CONFIG |= RB_CLK_OSC32K_XT | RB_CLK_INT32K_PON | RB_CLK_XT32K_PON;
sys_safe_access_enable();
R16_CLK_SYS_CFG |= RB_CLK_SYS_MOD;
sys_safe_access_disable();
}
__HIGH_CODE
int main()
{
uint8_t i;
SetSysClock(CLK_SOURCE_PLL_60MHz);
GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeOut_PP_5mA); //设置模式 输出
GPIOB_SetBits(GPIO_Pin_4);
//GPIOA_ModeCfg(GPIO_Pin_10 | GPIO_Pin_11, GPIO_ModeOut_PP_5mA); //设置模式 输出,验证内部32k作为主频时,外部32k是不工作的。
//GPIOA_ResetBits(GPIO_Pin_10);
//GPIOA_SetBits(GPIO_Pin_11);
mDelaymS(3000); //等待60M稳定
test1();
while(1);
}
参考:
CH573F 使用LSI时如何关闭外部晶振