STM32中RTC简介及使用方式

发布者:Xiaohan521最新更新时间:2024-08-15 来源: elecfans关键字:STM32  RTC  使用方式 手机看文章 扫描二维码
随时随地手机看文章

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

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


RTC 的简化框图

图片

时钟和分频

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

默认情况下是如图

图片

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

图片

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

公式如下:

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

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

图片

初始化


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里面有很多我们需要的函数,那么自己扩展就可以使用了

图片

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 */

  }


}

最后,可以按需定制自己的实现方式,RTC是特别实用的一个模块了。


关键字:STM32  RTC  使用方式 引用地址:STM32中RTC简介及使用方式

上一篇:STM32 MCU的技术特点和应用前景
下一篇:基于STM32的植物浇水系统开发

推荐阅读最新更新时间:2024-11-09 10:26

学习STM32日志——简单外部中断
STM32支持19个外部中断和事件请求,其中线0~15映射对应IO口的输入中断。每个线同时最多只能映射一个IO口。 映射关系 而中断服务函数只有7个。线5-9共用一个,10到15共用一个。 下面是配置步骤。 开始自己编写一个程序,通过两个按键的按下来触发中断,一个按键接地,端口设置为上拉状态,触发模式为下降沿触发;另一个按键接VCC,端口设置为下拉状态,触发模式为上升沿触发。然后在中断服务函数中编写触发中断后要执行的函数。一个为切换LED的亮灭状态,另一个控制蜂鸣器的通断。 在调试过程中,出现了按键按下但会偶尔失灵,既不触发中断的现象,经过半个小时的找原因,发现因为粗心,将接地按键的触发模式设置为下降沿,而将接V
[单片机]
基于STM32设计的数显热水器
一、项目介绍 当前介绍的项目是基于 STM32F103ZET6 系列 MCU 设计的数显热水器,通过显示屏来显示热水器的温度及其工作状态,通过 PT100 传感器来检测热水器的温度变化,并通过电加热片实现加热过程,以达到控制热水器温度的目的。 二、设计流程 2.1 硬件选型 STM32F103ZET6 系列 MCU OLED 显示屏 PT100 温度传感器 电加热片 继电器 2.2 软件设计 (1)显示屏 使用 OLED 显示屏来显示热水器的温度及其工作状态,通过 SPI 接口与 STM32 芯片进行通讯。设计温度值及其单位、热水器工作状态等。 (2)温度传感器 使用 PT100 温度传感器来检测热水器内部温度
[单片机]
如何采用STM32中的控制定时器Tim1实现计数器功能
STM32中的高级控制定时器(Tim1)是由一个16位的自动装载计数器组成,它由一个可编程预分频器驱动。 用途在于:测量输入信号的脉冲宽度(输入捕获),或者产生输出波形(输出比较,PWM,嵌入死区时间的互补PWM等)。 使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几个毫秒的调节。 具体如下: 16位上下,自动装载计数器。 16位可编程预分频器,计数器时钟频率的分频率的分频系数为1-65535之间任意数值,4个独立通道: 输入捕获 输出比较 PWM生成 单脉冲模式输出 死区时间可编程的互补输出 使用外部信号控制定时器和定时器互连的同步电路 在指定数目的计数器周期之后更新定时器寄存器
[单片机]
讲讲开发STM32的四种库
1.我是选择寄存器开发STM32,还是标准外设库呢? 2.你有STM32L0标准外设库吗? 3.HAL库和LL库有什么差异? 下面就来讲讲开发STM32的四种库: STM32Snippets Standard Peripheral Library STM32Cube LL STM32CubeHAL 1、STM32Snippets 什么是STM32Snippets? STM32Snippets可翻译为“代码片段”、“裁剪”,其实他就是我们常说的“寄存器”开发STM32的底层驱动代码。 比如配置ADC引脚的代码片段: __INLINE void ConfigureGPIOforADC(void) { /* (1) Enable
[单片机]
讲讲开发<font color='red'>STM32</font>的四种库
STM32调试步骤
调试前,首先跳线J9的2-3脚短接,跳线J4的右边两个脚短接,跳线J5短接,J8短接,J2的1-2短接,3-4短接。 将Jlink与学习板,USB延长线与学习板,串口延长线与学习板(或者USB转串口线与学习板)连接起来, 这时LED灯LED5,LED6都应该点亮,如果不亮,说明板子有问题。 打开串口助手,按照如下设置: 1、从桌面打开J-Flash ARM V4.02如图所示。 也可以按照如下顺序打开J-Flash ARM 。 “开始à程序àSEGGERàJ-Link ARM V4.02àJ-Flash ARM”,如下图所示。 2、打开J-Flash ARM后,先进行芯片选项设置,打开OptionsàProje
[单片机]
<font color='red'>STM32</font>调试步骤
STM32单片机自动售货机系统设计
一、功能简介 本项目使用Proteus8仿真STM32单片机控制器,使用LCD1602显示模块、矩阵按键模块、LED和蜂鸣器、继电器模块等。 主要功能: 系统运行后,LCD1602显示系统初始界面,可通过矩阵按键S1和S5选择商品,LCD液晶显示商品价格,共有8种价格商品可供选择,且选择的商品对应LED会有指示。可通过S9和S13选择商品数量,当需要返回时可按下S16键,选择好商品和数量后可按下S12键,此时LCD显示累计商品总价,此时可通过键盘输入投币数,LCD显示投币值,若投币数值大于等于商品累计总价,则驱动继电器出货,且蜂鸣器报警提示,LCD显示找零数。若投币数小于商品累计总价,则LCD显示继续投币。 二、软件设
[单片机]
<font color='red'>STM32</font>单片机自动售货机系统设计
STM32 HAL库串口同时收发,接收卡死?
为什么STM32 HAL库串口会出现同时收发导致接收卡死的问题?如何解决这个问题? 首先,我们来了解一下STM32 HAL库的串口通信机制。 STM32 HAL库是针对STM32系列单片机的一套常用的高级抽象层库。在HAL库中,串口通信是通过针对USART外设的封装实现的。HAL库中提供了一些函数,可以方便地配置USART外设的各种参数,如波特率、数据位、停止位、奇偶校验等,还提供了发送和接收数据的函数。 串口通信是一种异步通信方式,发送和接收是独立的。在使用HAL库编写串口通信代码时,如果在发送数据的同时也接收数据,就可能会出现接收卡死的问题。这是由于串口通信中数据的传输需要遵循一定的协议,同时发送和接收可能会导致这种协议破坏,
[单片机]
教你手上没有开发板如何跑RT-THREAD STM32应用
首先打开 RT-Thread Studio,新建RT-Thread 项目: 目前支持 QEMU 模拟仿真的开发板有这些: 大家可以看到,其中包含了 GD32VF103、VEXPRESS-A9、STM32F4 系列的一些开发板 我们以 STM32F401 为例,新建项目后这样配置,注意系列一定要选对,要是上面支持 QEMU 模拟仿真的开发板系列,否则没有对应的 QEMU 调试器: 如果没有的话,就选择 “添加更多” 然后下载: STM32F4 的芯片支持包在这里: 点击后,再点击页面下方的 “安装资源包”即可安装。 创建后我们得到这样一个工程: 查看 main.c 代码如下: 我们首先点击菜单栏的编译构建
[单片机]
教你手上没有开发板如何跑RT-THREAD <font color='red'>STM32</font>应用
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved