单片机使用STM8L151C8T6,系统时钟设置,在数据手册RM0031中可以看出时钟树如下图所示:

1、如果不使用外部晶振(HSE)的话,系统复位之后默认使用内部的时钟(HSI)。
2、外部时钟如下进行配置
//外部时钟配置
void ClockInit(void)
{
CLK_DeInit();
CLK_HSICmd(ENABLE); //先配置内部高速时钟
CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSE);//时钟配置为外部时钟
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);//不分频
}
3、RTC设置代码如下:
void RTC_Config(void)
{
RTC_InitTypeDef RTC_InitStr;
RTC_TimeTypeDef RTC_TimeStr;
RTC_DateTypeDef RTC_DateStr;
CLK_LSEConfig(CLK_LSE_ON);//LSE时钟开启 外部晶振 32.768Khz
while (CLK_GetFlagStatus(CLK_FLAG_LSERDY) == RESET);
CLK_RTCClockConfig(CLK_RTCCLKSource_LSE, CLK_RTCCLKDiv_1);//选LSE 不分频
CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);//RTC时钟使能
RTC_InitStr.RTC_HourFormat = RTC_HourFormat_24;
RTC_InitStr.RTC_AsynchPrediv = 127;
RTC_InitStr.RTC_SynchPrediv = 255;
RTC_Init(&RTC_InitStr);//ck_spre 1Hz时钟 32768/128/256=1Hz
RTC_TimeStructInit(&RTC_TimeStr);
RTC_TimeStr.RTC_Hours = 00;
RTC_TimeStr.RTC_Minutes = 00;
RTC_TimeStr.RTC_Seconds = 00;
RTC_SetTime(RTC_Format_BIN, &RTC_TimeStr);
RTC_DateStructInit(&RTC_DateStr);
RTC_DateStr.RTC_WeekDay = RTC_Weekday_Wednesday;
RTC_DateStr.RTC_Date = 23;
RTC_DateStr.RTC_Month = RTC_Month_September;
RTC_DateStr.RTC_Year = 20;
RTC_SetDate(RTC_Format_BIN, &RTC_DateStr);//2020-9-23 周三
}

本文介绍了STM8L151C8T6单片机的系统时钟配置方法,包括不使用外部晶振时的内部时钟配置及外部时钟配置过程。此外还详细展示了RTC实时时钟的初始化设置,包括外部32.768kHz晶振的启用及时钟分频。
3301





