void LseClockInit(void)
{
RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_SYSCFG);
RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOC);
// 配置PC14和PC15为复用功能模式(LSE晶振引脚)
// GPIO_Config_T GPIO_InitStructure;
//
// // PC14: OSC32_IN, PC15: OSC32_OUT
// GPIO_InitStructure.pin = (GPIO_PIN_14|GPIO_PIN_15);
// GPIO_InitStructure.mode = GPIO_MODE_AF;
// GPIO_InitStructure.pupd = GPIO_PUPD_NO; // 晶振引脚通常不上下拉
// GPIO_InitStructure.outtype = GPIO_OUT_TYPE_PP;
// GPIO_InitStructure.speed = GPIO_SPEED_50MHz;
// GPIO_Config(GPIOC, &GPIO_InitStructure);
// 启用LSE晶振,配置驱动能力
RCM_ConfigLSE(RCM_LSE_OPEN);
RCM_ConfigDriveLSE(RCM_LSE_DRIVE_Low);
// 等待LSE就绪
uint32_t timeout = 10000; // 5秒超时
while (RCM_ReadStatusFlag(RCM_FLAG_LSERDY) == RESET)
{
if (timeout-- == 0)
{
// LSE启动失败处理
LsiClockInit();
break;
}
}
if (RCM_ReadStatusFlag(RCM_FLAG_LSERDY) != RESET)
{
RCM_ConfigRTCCLK(RCM_RTCCLK_LSE);
RCM_EnableRTCCLK();
printf("LSE 32768Hz晶振启动成功\n");
// 可选:启用CSS(时钟安全系统)监测LSE
// RCM_EnableCSS();
}
}