发布时间2025-04-24 04:36
在嵌入式系统设计中,实时时钟(RTC)是一个不可或缺的模块。它能够提供准确的时间测量,确保系统在断电后仍能维持时间信息。STM32微控制器作为一款高性能、低功耗的芯片,其内置的RTC模块支持多种时钟源选择与配置。本文将深入探讨STM32 RTC时钟源选择与配置的方法,帮助读者更好地理解和应用这一模块。
一、STM32 RTC模块概述
STM32 RTC模块具有以下特点:
二、STM32 RTC时钟源选择
STM32 RTC模块支持以下时钟源:
三、STM32 RTC时钟源配置
以下以使用外部晶振为例,介绍STM32 RTC时钟源配置方法。
(1)打开STM32CubeMX,选择相应的STM32型号。
(2)在“时钟”选项卡中,选择“外部晶振”作为时钟源。
(3)设置外部晶振的频率,如12MHz。
(4)点击“生成代码”,生成相应的HAL库代码。
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
{
Error_Handler();
}
}
void Error_Handler(void)
{
// User can add his own implementation to report the HAL error return state
__disable_irq();
while (1)
{
}
}
void RTC_SetTime(RTC_TimeTypeDef *sTime)
{
if (HAL_RTC_SetTime(&hrtc, sTime, RTC_FORMAT_BCD) != HAL_OK)
{
Error_Handler();
}
}
四、总结
本文介绍了STM32 RTC时钟源选择与配置方法,包括外部晶振、内部时钟源等。通过本文的学习,读者可以更好地理解和应用STM32 RTC模块,为嵌入式系统设计提供准确的时间测量功能。
猜你喜欢:互动白板
更多热门资讯