STM32H7S7x8 实时时钟(RTC)RTC提供自动唤醒以管理所有低功耗模式。实时时钟(RTC)是一个独立的BCD定时器/计数器。RTC提供具有可编程报警中断的时间时钟/日历。RTC还包括一个具有中断功能的周期性可编程唤醒标志。备份域重置后,所有RTC寄存器都受到保护,防止可能的寄生写入除了在特权模式下配置的访问之外。只要电源电压保持在工作范围内RTC就不会停止,无论设备状态如何(运行模式、低功耗模式或重置下)。
STM32H7S7x8 RTC主要特征如下:
•带有子秒、秒、分钟、小时(12或24格式)、日(日期)的日历
周)、日期(月中的某一天)、月份和年份。
•夏令时补偿可通过软件编程。
•具有中断功能的可编程报警。警报可以由任何人触发
日历字段的组合。
•自动唤醒单元生成周期性标志,触发自动唤醒
中断。
•参考时钟检测:可以使用更精确的第二源时钟(50或60 Hz)
用于提高日历精度。
•使用亚秒级移位功能与外部时钟精确同步。
•数字校准电路(周期性计数器校正):精度为0.95 ppm,在
几秒钟的校准窗口
•用于保存事件的时间戳功能
•可屏蔽中断/事件:
–警报A
–警报B
–唤醒中断
–时间戳
配置 开启RTC
开启串口打印
重写fputc()函数:
int fputc(int ch,FILE *f)
{
uint8_t temp[1] = {ch};
HAL_UART_Transmit(&huart4,temp,1,2);
return ch;
} |
- static void MX_RTC_Init(void)
- {
- /* USER CODE BEGIN RTC_Init 0 */
- /* USER CODE END RTC_Init 0 */
- RTC_PrivilegeStateTypeDef privilegeState = {0};
- RTC_TimeTypeDef sTime = {0};
- RTC_DateTypeDef sDate = {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 = RTC_ASYNCH_PREDIV;
- hrtc.Init.SynchPrediv = RTC_SYNCH_PREDIV;
- hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
- hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
- hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
- hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
- hrtc.Init.OutPutPullUp = RTC_OUTPUT_PULLUP_NONE;
- hrtc.Init.BinMode = RTC_BINARY_NONE;
- if (HAL_RTC_Init(&hrtc) != HAL_OK)
- {
- Error_Handler();
- }
- privilegeState.rtcPrivilegeFull = RTC_PRIVILEGE_FULL_NO;
- privilegeState.backupRegisterPrivZone = RTC_PRIVILEGE_BKUP_ZONE_NONE;
- privilegeState.backupRegisterStartZone2 = RTC_BKP_DR0;
- privilegeState.backupRegisterStartZone3 = RTC_BKP_DR0;
- if (HAL_RTCEx_PrivilegeModeSet(&hrtc, &privilegeState) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN Check_RTC_BKUP */
- /* Set Date and Time (if not already done before)*/
- /* Read the Back Up Register 0 Data */
- if (HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR0) != 0x32F2)
- {
- /* Configure RTC Calendar */
- /* USER CODE END Check_RTC_BKUP */
- /** Initialize RTC and set the Time and Date
- */
- sTime.Hours = 0x2;
- sTime.Minutes = 0x0;
- sTime.Seconds = 0x0;
- sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
- sTime.StoreOperation = RTC_STOREOPERATION_RESET;
- if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
- {
- Error_Handler();
- }
- sDate.WeekDay = RTC_WEEKDAY_WEDNESDAY;
- sDate.Month = RTC_MONTH_NOVEMBER;
- sDate.Date = 0x8;
- sDate.Year = 0x0;
- if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN RTC_Init 2 */
- /* Writes a data in a RTC Backup data Register0 */
- HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR0, 0x32F2);
- }
- else
- {
- /* Check if the Power On Reset flag is set */
- if (__HAL_RCC_GET_FLAG(RCC_FLAG_BORRST) != RESET)
- {
- /* Turn on LD2: Power on reset occurred */
- BSP_LED_On(LD2);
- }
- /* Check if Pin Reset flag is set */
- if (__HAL_RCC_GET_FLAG(RCC_FLAG_PINRST) != RESET)
- {
- /* Turn on LD2: External reset occurred */
- BSP_LED_On(LD2);
- }
- }
- /* Clear source Reset Flag */
- __HAL_RCC_CLEAR_RESET_FLAGS();
- /* USER CODE END RTC_Init 2 */
- }
- <blockquote>static void RTC_CalendarShow(uint8_t *showtime, uint8_t *showdate)
管理
[url=]更多操作[/url]
|