你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32H750中RTC简介及使用方法

[复制链接]
STMCU小助手 发布时间:2022-12-12 15:00

STM32H750 的实时时钟是一个独立的 BCD 定时器/计数器,且带了日历功能,它提供一个日历时钟、两个可编程闹钟中断,以及一个具有中断功能的周期性可编程唤醒标志。

此外RTC 还有自动唤醒单元,RTC还可以补偿闰年闰月等等,还有备份区域(BKP)写保护,这些这里不细说了。

RTC 的简化框图 微信图片_20221211151650.png 时钟和分频

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 配置

默认情况下是如图

微信图片_20221211151647.png

一般情况下使用LSE,这里我们需要在RCC使能

微信图片_20221211151643.png

然后在RTCC中使能时钟源,如果需要日历闹钟功能的可以在这里也使能上。 微信图片_20221211151640.png

公式如下:

RTC时钟频率 = RTC时钟源 / ((Asynchronous Predivider value + 1) * (Synchronous Predivider value + 1))= 1Hz,也就是1秒

之后到时钟配置里面可以看到已经使能了

微信图片_20221211151636.png

初始化

  1. static void MX_RTC_Init(void)
  2. {
  3.   /* USER CODE BEGIN RTC_Init 0 */
  4.   /* USER CODE END RTC_Init 0 */
  5.   /* USER CODE BEGIN RTC_Init 1 */
  6.   /* USER CODE END RTC_Init 1 */
  7.   /** Initialize RTC Only
  8.   */
  9.   hrtc.Instance = RTC;
  10.   hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
  11.   hrtc.Init.AsynchPrediv = 127;
  12.   hrtc.Init.SynchPrediv = 255;
  13.   hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
  14.   hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
  15.   hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
  16.   hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
  17.   if (HAL_RTC_Init(&hrtc) != HAL_OK)
  18.   {
  19.     Error_Handler();
  20.   }
  21.   /* USER CODE BEGIN RTC_Init 2 */
  22.   /* USER CODE END RTC_Init 2 */
  23. }
复制代码

可以看到outline里面有很多我们需要的函数,那么自己扩展就可以使用了

微信图片_20221211151530.png

This function configures the hardware resources used in this example

  1. void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc)
  2. {
  3.   RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  4.   if(hrtc->Instance==RTC)
  5.   {
  6.   /* USER CODE BEGIN RTC_MspInit 0 */
  7.   /* USER CODE END RTC_MspInit 0 */
  8.   /** Initializes the peripherals clock
  9.   */
  10.     PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
  11.     PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
  12.     if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  13.     {
  14.       Error_Handler();
  15.     }
  16.     /* Peripheral clock enable */
  17.     __HAL_RCC_RTC_ENABLE();
  18.   /* USER CODE BEGIN RTC_MspInit 1 */
  19.   /* USER CODE END RTC_MspInit 1 */
  20.   }
  21. }
复制代码
最后,可以按需定制自己的实现方式,RTC是特别实用的一个模块了。作者:李肖遥
收藏 评论0 发布时间:2022-12-12 15:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版