STM32H750的实时时钟(RTC)是一个独立的BCD定时器/计数器,它还具有日历功能。RTC提供了一个日历时钟、两个可编程的闹钟中断,以及一个具有中断功能的周期性可编程唤醒标志。
此外,RTC还包括自动唤醒单元,可以用来在特定时间唤醒系统。RTC还支持自动补偿闰年和闰月等功能。此外,RTC还提供了备份区域(BKP)写保护,但这些功能细节在此不详细介绍。
RTC 的简化框图
时钟和分频
STM32H750 的 RTC 时钟源(RTCCLK)通过时钟控制器,可以从 LSE、LSI、HSE 时钟三选一,如图所示,有两个预分频器RTC_PRER
ck_spre 的时钟可由如下计算公式计算:
Fck_spre = Frtcclk/[(PREDIV_S+1)*( PREDIV_A+1)]
图中,ck_apre 也可作为 RTC 亚秒递减计数器(RTC_SSR)的时钟。
Fck_apre的计算公式如下:
Fck_apre=Frtcclk/( PREDIV_A+1)
当 RTC_SSR 寄存器递减到 0 的时候,会使用 PREDIV_S 的值重新装载 PREDIV_S,得到亚秒时间的精度是:1/256 秒,可以得到更加精确的时间数据。
STM32CubeIDE 配置
默认情况下是如图
一般情况下使用LSE,这里我们需要在RCC使能
然后在RTC中使能时钟源,如果需要日历闹钟功能的可以在这里也使能上。
公式如下:
RTC时钟频率 = RTC时钟源 / ((Asynchronous Predivider value + 1) * (Synchronous Predivider value + 1))= 1Hz,也就是1秒
之后到时钟配置里面可以看到已经使能了
初始化
static void MX_RTC_Init(void)
{
/* USER CODE BEGIN RTC_Init 0 */
/* USER CODE END RTC_Init 0 */
/* USER CODE BEGIN RTC_Init 1 */
/* USER CODE END RTC_Init 1 */
/** Initialize RTC Only
*/
hrtc.Instance = RTC;
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
hrtc.Init.AsynchPrediv = 127;
hrtc.Init.SynchPrediv = 255;
hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
if (HAL_RTC_Init(&hrtc) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN RTC_Init 2 */
/* USER CODE END RTC_Init 2 */
}
可以看到outline里面有很多我们需要的函数,那么自己扩展就可以使用了
This function configures the hardware resources used in this example
void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc)
{
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
if(hrtc->Instance==RTC)
{
/* USER CODE BEGIN RTC_MspInit 0 */
/* USER CODE END RTC_MspInit 0 */
/** Initializes the peripherals clock
*/
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
{
Error_Handler();
}
/* Peripheral clock enable */
__HAL_RCC_RTC_ENABLE();
/* USER CODE BEGIN RTC_MspInit 1 */
/* USER CODE END RTC_MspInit 1 */
}
}
可以按需定制自己的实现方式,RTC是特别实用的一个模块了。
以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !