STM32H750 的實(shí)時(shí)時(shí)鐘是一個(gè)獨(dú)立的 BCD 定時(shí)器/計(jì)數(shù)器,且?guī)Я巳諝v功能,它提供一個(gè)日歷時(shí)鐘、兩個(gè)可編程鬧鐘中斷,以及一個(gè)具有中斷功能的周期性可編程喚醒標(biāo)志。
此外RTC 還有自動喚醒單元,RTC還可以補(bǔ)償閏年閏月等等,還有備份區(qū)域(BKP)寫保護(hù),這些這里不細(xì)說了。
RTC 的簡化框圖
時(shí)鐘和分頻
STM32H750 的 RTC 時(shí)鐘源(RTCCLK)通過時(shí)鐘控制器,可以從 LSE、LSI、HSE 時(shí)鐘三選一,如圖所示,有兩個(gè)預(yù)分頻器RTC_PRER
ck_spre 的時(shí)鐘可由如下計(jì)算公式計(jì)算:
Fck_spre = Frtcclk/[(PREDIV_S+1)*( PREDIV_A+1)]
圖中,ck_apre 也可作為 RTC 亞秒遞減計(jì)數(shù)器(RTC_SSR)的時(shí)鐘。
Fck_apre的計(jì)算公式如下:
Fck_apre=Frtcclk/( PREDIV_A+1)
當(dāng) RTC_SSR 寄存器遞減到 0 的時(shí)候,會使用 PREDIV_S 的值重新裝載 PREDIV_S,得到亞秒時(shí)間的精度是:1/256 秒,可以得到更加精確的時(shí)間數(shù)據(jù)。
STM32CubeIDE 配置
默認(rèn)情況下是如圖
一般情況下使用LSE,這里我們需要在RCC使能
然后在RTC中使能時(shí)鐘源,如果需要日歷鬧鐘功能的可以在這里也使能上。
公式如下:
RTC時(shí)鐘頻率 = RTC時(shí)鐘源 / ((Asynchronous Predivider value + 1) * (Synchronous Predivider value + 1))= 1Hz,也就是1秒
之后到時(shí)鐘配置里面可以看到已經(jīng)使能了
初始化
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里面有很多我們需要的函數(shù),那么自己擴(kuò)展就可以使用了
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 */
}
}
最后,可以按需定制自己的實(shí)現(xiàn)方式,RTC是特別實(shí)用的一個(gè)模塊了。
-
STM32
+關(guān)注
關(guān)注
2263文章
10849瀏覽量
353905 -
計(jì)數(shù)器
+關(guān)注
關(guān)注
32文章
2248瀏覽量
94199 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3228瀏覽量
114202
發(fā)布評論請先 登錄
相關(guān)推薦
評論