[STM32H7] 【STM32H745I-DISCO试用】RTC实时钟实验

[复制链接]
2356|20
 楼主| 南来之风 发表于 2025-3-10 12:44 | 显示全部楼层 |阅读模式

RTC配置:
  1.   /*##-1- Configure the RTC peripheral #######################################*/
  2.   RtcHandle.Instance = RTC;

  3.   /* Configure RTC prescaler and RTC data registers */
  4.   /* RTC configured as follows:
  5.       - Hour Format    = Format 24
  6.       - Asynch Prediv  = Value according to source clock
  7.       - Synch Prediv   = Value according to source clock
  8.       - OutPut         = Output Disable
  9.       - OutPutPolarity = High Polarity
  10.       - OutPutType     = Open Drain */
  11.   RtcHandle.Init.HourFormat     = RTC_HOURFORMAT_24;
  12.   RtcHandle.Init.AsynchPrediv   = RTC_ASYNCH_PREDIV;
  13.   RtcHandle.Init.SynchPrediv    = RTC_SYNCH_PREDIV;
  14.   RtcHandle.Init.OutPut         = RTC_OUTPUT_DISABLE;
  15.   RtcHandle.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
  16.   RtcHandle.Init.OutPutType     = RTC_OUTPUT_TYPE_OPENDRAIN;
  17.   if (HAL_RTC_Init(&RtcHandle) != HAL_OK)
  18.   {
  19.     /* Initialization Error */
  20.     Error_Handler();
  21.   }



增加串口输出
  1. static void MX_USART3_UART_Init(void)
  2. {

  3.   /* USER CODE BEGIN USART3_Init 0 */

  4.   /* USER CODE END USART3_Init 0 */

  5.   /* USER CODE BEGIN USART3_Init 1 */

  6.   /* USER CODE END USART3_Init 1 */
  7.   huart3.Instance = USART3;
  8.   huart3.Init.BaudRate = 115200;
  9.   huart3.Init.WordLength = UART_WORDLENGTH_8B;
  10.   huart3.Init.StopBits = UART_STOPBITS_1;
  11.   huart3.Init.Parity = UART_PARITY_NONE;
  12.   huart3.Init.Mode = UART_MODE_TX_RX;
  13.   huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  14.   huart3.Init.OverSampling = UART_OVERSAMPLING_16;
  15.   huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  16.   huart3.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  17.   huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  18.   if (HAL_UART_Init(&huart3) != HAL_OK)
  19.   {
  20.     Error_Handler();
  21.   }
  22.   if (HAL_UARTEx_SetTxFifoThreshold(&huart3, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  23.   {
  24.     Error_Handler();
  25.   }
  26.   if (HAL_UARTEx_SetRxFifoThreshold(&huart3, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  27.   {
  28.     Error_Handler();
  29.   }
  30.   if (HAL_UARTEx_DisableFifoMode(&huart3) != HAL_OK)
  31.   {
  32.     Error_Handler();
  33.   }
  34.   /* USER CODE BEGIN USART3_Init 2 */

  35.   /* USER CODE END USART3_Init 2 */

  36. }
在STM32H7XX_HAL_MSP.C中增加UART3初始化代码:
  1. void HAL_UART_MspInit(UART_HandleTypeDef* huart)
  2. {
  3.   GPIO_InitTypeDef GPIO_InitStruct = {0};
  4.   RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  5.   if(huart->Instance==USART3)
  6.   {
  7.   /* USER CODE BEGIN USART3_MspInit 0 */

  8.   /* USER CODE END USART3_MspInit 0 */

  9.   /** Initializes the peripherals clock
  10.   */
  11.     PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART3;
  12.     PeriphClkInitStruct.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_D2PCLK1;
  13.     if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  14.     {
  15.       Error_Handler();
  16.     }

  17.     /* Peripheral clock enable */
  18.     __HAL_RCC_USART3_CLK_ENABLE();

  19.     __HAL_RCC_GPIOB_CLK_ENABLE();
  20.     /**USART3 GPIO Configuration
  21.     PB10     ------> USART3_TX
  22.     PB11     ------> USART3_RX
  23.     */
  24.     GPIO_InitStruct.Pin = VCP_TX_Pin|VCP_RX_Pin;
  25.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  26.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  27.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  28.     GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
  29.     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  30.   /* USER CODE BEGIN USART3_MspInit 1 */

  31.   /* USER CODE END USART3_MspInit 1 */

  32.   }

  33. }


实时获取RTC时间:
  1. /**
  2.   * [url=home.php?mod=space&uid=247401]@brief[/url]  Display the current time.
  3.   * @param  showtime : pointer to buffer
  4.   * @retval None
  5.   */
  6. static void RTC_TimeShow(uint8_t* showtime)
  7. {
  8.   RTC_DateTypeDef sdatestructureget;
  9.   RTC_TimeTypeDef stimestructureget;

  10.   /* Get the RTC current Time */
  11.   HAL_RTC_GetTime(&RtcHandle, &stimestructureget, RTC_FORMAT_BIN);
  12.   /* Get the RTC current Date */
  13.   HAL_RTC_GetDate(&RtcHandle, &sdatestructureget, RTC_FORMAT_BIN);
  14.   /* Display time Format : hh:mm:ss */
  15.   sprintf(aShowTime,"\r\n%02d:%02d:%02d",stimestructureget.Hours, stimestructureget.Minutes, stimestructureget.Seconds);
  16.   HAL_UART_Transmit(&huart3, aShowTime, sizeof(aShowTime), 0xffffffff);
  17. }



串口输出:
8323967ce6d484c3bd.png
biechedan 发表于 2025-3-12 16:56 | 显示全部楼层
RTC 通常使用低速外部时钟(LSE)或低速内部时钟(LSI)作为时钟源。LSE 的精度较高,建议优先选择。
mickit 发表于 2025-3-12 20:11 | 显示全部楼层
在读写RTC寄存器时,需要注意寄存器的同步问题。某些寄存器可能需要在特定条件下才能访问或修改。
juliestephen 发表于 2025-3-12 22:26 | 显示全部楼层
利用RTC模块可以设置时间闹钟,当当前时间与设定的时间匹配时,产生中断或者事件通知。
robertesth 发表于 2025-3-12 22:49 | 显示全部楼层
在代码中,使用HAL_RTC_Init函数初始化RTC。需要设置RTC的时钟源和校准参数。
uytyu 发表于 2025-3-14 10:09 | 显示全部楼层
设置完成后,闹钟将在指定时间触发中断。
hudi008 发表于 2025-3-14 11:47 | 显示全部楼层
对于更精确的时间控制,推荐使用外部晶振。
loutin 发表于 2025-3-14 14:00 | 显示全部楼层
推荐使用 32.768kHz 晶振
bestwell 发表于 2025-3-14 15:08 | 显示全部楼层
可以通过外部32.768kHz晶振作为时钟源,实现低功耗运行。
alvpeg 发表于 2025-3-14 15:36 | 显示全部楼层
如何配置RTC、设置时间、读取时间以及在LCD上显示时间。
juliestephen 发表于 2025-3-14 17:15 | 显示全部楼层
在系统复位或从待机模式唤醒后,RTC的设置和时间维持不变,只要后备区域供电正常即可。但在系统复位后会自动禁止访问后备寄存器和RTC,以防止对后备区域(BKP)的意外写操作。因此,在设置时间之前需要先取消备份区域(BKP)写保护。
uytyu 发表于 2025-3-14 23:12 | 显示全部楼层
通过VBAT引脚连接备用电池              
macpherson 发表于 2025-3-15 03:19 | 显示全部楼层
因电源波动导致的RTC计时不准确或异常复位等问题。
hearstnorman323 发表于 2025-3-15 07:52 | 显示全部楼层
推荐32.768kHz晶振作为外部低速晶振(LSE)。
kkzz 发表于 2025-3-15 12:48 | 显示全部楼层
注意,读取的时间数据通常是以BCD码格式存储的,需要转换为十进制数据才能进行后续处理。
i1mcu 发表于 2025-3-15 14:32 | 显示全部楼层
参考STM32H745I-DISCO开发板的相关文档和示例代码
qiufengsd 发表于 2025-3-15 15:32 | 显示全部楼层
非常有价值的实验项目              
backlugin 发表于 2025-3-15 15:54 | 显示全部楼层
在NVIC中配置RTC闹钟中断,并在中断服务函数中处理闹钟事件。当闹钟触发时,中断服务函数会被调用,可以在这里执行所需的操作,如点亮LED指示灯。
ccook11 发表于 2025-3-15 16:22 | 显示全部楼层
RTC 使用备份域电源,即使主电源关闭,只要备份域电源正常,RTC 仍能继续计时。
phoenixwhite 发表于 2025-3-15 16:43 | 显示全部楼层
STM32H7的RTC模块支持低功耗模式,可以在系统进入待机或停止模式时继续运行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

69

主题

293

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部