打印
[STM32H7]

【STM32H7S78-DK测评】RTC 打印测评

[复制链接]
41|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
  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]





使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:项目经理
简介:资深嵌入式开发工程师

78

主题

145

帖子

3

粉丝