STM32CubeMX配置RTC——基于(STM32G070+STM32CubeMX+HAL库+RTC)

发布者:心若水仙最新更新时间:2021-10-14 来源: eefocus关键字:STM32CubeMX  HAL库 手机看文章 扫描二维码
随时随地手机看文章

实验目的:

通过STM32CubeMX进行简单配置生成HAL库实现内部晶振RTC。


一、STM32CubeMX配置如下:

1.时钟树配置:

因为板子没有外部RTC晶振,所以只能使用内部32KHz晶振,时钟树配置如下:

在这里插入图片描述

2.RTC配置:

在这里插入图片描述

(1)关于Asynchronous Predivider value 和 Synchronous Predivider value填写多少,请看下面:

在这里插入图片描述
在这里插入图片描述

因为内部晶振是32KHz,所以毫无疑问应该选择LSI=32KHz即:


Asynchronous Predivider value :127

Synchronous Predivider value :249


(2)关于Hours、Minutes等这些初值没啥好疑问的,直接填写,但是Year需要注意一下,它是从1970年开始算起的,所以比如填写50就是2020年的意思。

二、STM32CubeMX配置生成的HAL库如下:

/**

  ******************************************************************************

  * File Name          : RTC.c

  * Description        : This file provides code for the configuration

  *                      of the RTC instances.

  ******************************************************************************

  * @attention

  *

  *

© Copyright (c) 2020 STMicroelectronics.

  * All rights reserved.

  *

  * This software component is licensed by ST under BSD 3-Clause license,

  * the "License"; You may not use this file except in compliance with the

  * License. You may obtain a copy of the License at:

  *                        opensource.org/licenses/BSD-3-Clause

  *

  ******************************************************************************

  */


/* Includes ------------------------------------------------------------------*/

#include "rtc.h"


/* USER CODE BEGIN 0 */

RTC_TimeTypeDef GetTime;   //µ¥Æ¬»úÄÚ²¿RTC¶Áȡʱ¼ä

RTC_DateTypeDef GetDate;   //µ¥Æ¬»úÄÚ²¿RTC¶ÁÈ¡ÈÕÆÚ

uint8_t RTC_READ_Flag;

/* USER CODE END 0 */


RTC_HandleTypeDef hrtc;


/* RTC init function */

void MX_RTC_Init(void)

{

  RTC_TimeTypeDef sTime = {0};

  RTC_DateTypeDef sDate = {0};


  /** Initialize RTC Only 

  */

  hrtc.Instance = RTC;

  hrtc.Init.HourFormat = RTC_HOURFORMAT_24;

  hrtc.Init.AsynchPrediv = 127;

  hrtc.Init.SynchPrediv = 249;

  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;

  if (HAL_RTC_Init(&hrtc) != HAL_OK)

  {

    Error_Handler();

  }


  /* USER CODE BEGIN Check_RTC_BKUP */

    

  /* USER CODE END Check_RTC_BKUP */


  /** Initialize RTC and set the Time and Date 

  */

  sTime.Hours = 19;

  sTime.Minutes = 07;

  sTime.Seconds = 00;

  sTime.SubSeconds = 0;

  sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;

  sTime.StoreOperation = RTC_STOREOPERATION_RESET;

  if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK)

  {

    Error_Handler();

  }

  sDate.WeekDay = RTC_WEEKDAY_WEDNESDAY;

  sDate.Month = RTC_MONTH_SEPTEMBER;

  sDate.Date = 8;

  sDate.Year = 50;


  if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK)

  {

    Error_Handler();

  }


}


void HAL_RTC_MspInit(RTC_HandleTypeDef* rtcHandle)

{


  if(rtcHandle->Instance==RTC)

  {

  /* USER CODE BEGIN RTC_MspInit 0 */


  /* USER CODE END RTC_MspInit 0 */

    /* RTC clock enable */

    __HAL_RCC_RTC_ENABLE();

    __HAL_RCC_RTCAPB_CLK_ENABLE();

  /* USER CODE BEGIN RTC_MspInit 1 */


  /* USER CODE END RTC_MspInit 1 */

  }

}


void HAL_RTC_MspDeInit(RTC_HandleTypeDef* rtcHandle)

{


  if(rtcHandle->Instance==RTC)

  {

  /* USER CODE BEGIN RTC_MspDeInit 0 */


  /* USER CODE END RTC_MspDeInit 0 */

    /* Peripheral clock disable */

    __HAL_RCC_RTC_DISABLE();

    __HAL_RCC_RTCAPB_CLK_DISABLE();

  /* USER CODE BEGIN RTC_MspDeInit 1 */


  /* USER CODE END RTC_MspDeInit 1 */

  }


三、时间日期获取设置等:

1、自己重绘一个设置time的函数:

/* USER CODE BEGIN 1 */

void RTC_SetTime(u8 hour, u8 minute, u8 second)

{

  /*##-2- Configure the Time #################################################*/

  GetTime.Hours = hour;

  GetTime.Minutes = minute;

  GetTime.Seconds = second;

//  GetTime.TimeFormat = RTC_HOURFORMAT12_AM;

  GetTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;

  GetTime.StoreOperation = RTC_STOREOPERATION_RESET;


  if(HAL_RTC_SetTime(&hrtc,&GetTime,RTC_FORMAT_BIN) != HAL_OK)

  {

  

  }

}

/* USER CODE END 1 */


2、调用函数实现RTC:

1.首先初始化RTC时钟:


  MX_RTC_Init();


2.接着设置time时间:


 RTC_SetTime(11,59,50);   //设置时间为11时59分50秒


3.然后调用HAL库函数实现time和date获取,有个细节要注意一下,需要先获取日期再获取时间,亲测直接获取时间会有问题:


      HAL_RTC_GetDate(&hrtc, &GetDate, RTC_FORMAT_BIN);//更新日期

      HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN);//更新时间


完美,收工!!!

关键字:STM32CubeMX  HAL库 引用地址:STM32CubeMX配置RTC——基于(STM32G070+STM32CubeMX+HAL库+RTC)

上一篇:解决MDK仿真时候弹框Programming range...问题
下一篇:STM32CubeMX配置ADC模拟看门狗实现掉电保存

推荐阅读最新更新时间:2024-11-10 12:04

STM32F042 基于CubeMX HAL库CAN的配置
首先说说使用时候的两个坑。 (1)要使能Swap PA9/10 – PA11/12,这个时候PA11和PA12引脚才能出现。 (2)我第一步用的是回环模式。 大致是这样的。 While { SendCanMessage(); } Can_interrupt { HAL_CAN_Receive_IT(hcan,CAN_FIFO0); } 却发现只能中断一次不能返回了。 原因,配置好CAN后状态为HAL_CAN_STATE_READY。 设置为接收,状态为HAL_CAN_STATE_BUSY_RX0。 接收到数据一般会在继续设置为接收。这样一直可
[单片机]
STM32F042 基于CubeMX <font color='red'>HAL库</font>CAN的<font color='red'>配置</font>
HAL库教程10:定时器的PWM模式应用
  本节通过定时器的PWM模式驱动无源蜂鸣器,来演奏一段音乐。本博客在掌机的系列教程中介绍过蜂鸣器的驱动原理,感兴趣的可以参考电子琴 无源蜂鸣器驱动电路   蜂鸣器按照有无震荡源(不是电源),可以分为有源蜂鸣器和无源蜂鸣器。有源蜂鸣器上电就能工作,控制简单,但是只有一个音调。无源蜂鸣器需要单片机提供震荡源,虽然控制稍微复杂一点,但是可以发出不同频率的声音。 PWM原理   根据我们的电路,引脚输出高电平时,驱动电路为蜂鸣器提供了闭合回路,则引脚给高电平,蜂鸣器就能响。然而,只给高电平,无源蜂鸣器不能持续发出声音,只有一瞬间有声音;需要马上给低电平,然后再给一个高电平。即在一个很短的周期内,无源蜂鸣器在高电平持续期间工作,
[单片机]
<font color='red'>HAL库</font>教程10:定时器的PWM模式应用
【STM32】HAL库 STM32CubeMX教程六----定时器中断
前言: 今天我们来学习定时器,32的定时器有着非常丰富的功能, 输入捕获/输出比较,PWM,中断等等。是我们学习STM32最频繁使用到的外设之一,所以一定要掌握好,这节我们讲解定时器中断,本系列教程将对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1、芯片: STM32F407ZET6/STM32F103ZET6 2、STM32CubeMx软件 3、IDE: MDK-Keil软件 4、STM32F1xx/STM32F4xxHAL库 5 知识概括: 通过本篇博客您将学到: SMT32定时器原理 STM32CubeMX创建定时器例程 HAL库TIM定时器函数库 定时器
[单片机]
【STM32】<font color='red'>HAL库</font> <font color='red'>STM32CubeMX</font>教程六----定时器中断
STM32CubeMX系列 | FATFS文件系统
1. FATFS文件系统简介 文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构(即在存储设备上组织文件的方法)。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统;不带文件系统的SD卡仅能实现简单的读写扇区操作,要真正应用SD卡必须要使用文件系统 FATFS文件存储原理(以FAT32为例),下图为FAT32文件系统布局: 簇是文件存储的最小单元,FAT32分区大小与对应簇空间大小关系如下表示: 分区空间大小 簇空间大小 每个簇包含的扇区数 8GB 4KB 8 ; //磁盘是否初始化 Diskio_drvTypeDef *drv ; //磁盘的驱动 uint8_t
[单片机]
STM32Cubemx编程及Jlink下载
1.stm32cubemx安装 STM32CubeMX是 ST 意法半导体 近几年来大力推荐STM32 芯片图形化配置工具。它是一个单独的软件,直接安装到一个目录下即可。 2.开发环境搭建 安装Java,然后打开软件:help-updater Settings,这里是指定cube包的目录,可以在st官网上面下载cube包,在stm32cubemx的同一级目录下面建立repository,里面放入cube包,目录直接指到repository就行。 3.建立工程 新建工程,选择芯片后双击,此时会出现芯片的引脚图,首先对RCC进行配置-外部时钟,然后将clock configuration中的时钟图里面的进行填写。
[单片机]
<font color='red'>STM32Cubemx</font>编程及Jlink下载
STM32 HAL库的功能和使用方法 STM32 HAL库和标准库的区别
HAL(Hardware Abstraction Layer)是指硬件抽象层,是一种封装底层硬件接口驱动的编程库。在嵌入式系统中,HAL库可以更加方便地实现硬件控制和设备访问,提高代码可移植性和可维护性,从而节省开发成本和时间。STM32 HAL库是STM32系列芯片的HAL库,由ST公司提供和维护。下面将介绍STM32 HAL库的功能、使用方法以及与标准库的区别。 STM32 HAL库的功能 HAL库提供了一系列API函数和硬件抽象接口,用于实现对STM32芯片上各种外设的控制,包括输入输出控制(如GPIO、USART、SPI等)、定时器和计数器控制、中断控制、时钟控制等。STM32 HAL库主要实现了以下功能: 直接调用硬
[单片机]
玩转STM32CubeMX | PWM输出
1.PWM简介 脉冲宽度调制(PWM,Pulse Width Modulation)简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。即对脉冲宽度的控制,PWM原理如下图示: 图中我们假定定时器是工作在向上计数PWM模式,且当CNT CCRx时输出0,当CNT = CCRx时输出1,那么就可以得到如上的PWM示意图:当CNT CCRx时,IO口输出低电平;当CNT = CCRx时,IO口输出高电平;当CNT值达到ARR的时候,重新归零,然后重新向上计数,依次循环。改变CCRx的值就可以改变PWM输出的占空比,改变ARR的值就可以改变PWM输出的频率 输出模式有两种:PWM1和PWM2
[单片机]
玩转<font color='red'>STM32CubeMX</font> | PWM输出
STM32CubeMX中FreeRTOS系统CPU使用率监测测试
1.测试描述: 使用STM32CubeMX自动配置的工程,对其提供的FreeRTOS系统的CPU使用率进行监测,并通过串口打印。 2.测试环境: (1)软件环境:STM32CubeMX-4.22.0,IAR-7.5,串口调试工具 (2)硬件环境:原子战舰V3开发板 3.测试准备: (1)STM32CubeMX软件主要配置: 管脚和其他外设的配置直接省略了,具体的可查看源码文件里的ioc文件。下面贴出主要的系统方面配置图: 首先是Configuration界面,从图中可以看出测试工程使用的东西并不多; 点击中间层的FREERTOS进入系统配置界面,主要注意下图中红色标注的部分;
[单片机]
<font color='red'>STM32CubeMX</font>中FreeRTOS系统CPU使用率监测测试

推荐帖子

MDD开关电源回路中续流二极管(肖特基)注意事项?
MDD肖特基二极管的主要优缺点有哪些呢?MDD开关电源回路中续流二极管(肖特基)注意事项的原理是什么?一.肖特基二极管的主要优缺点:1.反向恢复时间短反向恢复时间是指二极管由流过正向电流的导通状态切换到不导通状态需要的时间。由于肖特基半导体导通时只有多数载流子,没有少数载流子,所以理论上并没有反向恢复时间,使肖特基二极管成为二极管中速度最快的一类。2.正向稳态导通压降低肖特基二极管正向压降非常小,一般为0.2~0.45V,比快恢复二极管正向压降低很多,所以自身功耗较小。3.肖特基二
辰达行电子 分立器件
【CW32L052测评】 sysclk延时测试
这篇来学习下CW32L052芯片是sysclk时钟的配置和使用。一、时钟框图芯片能工作的最大时钟是48MHz,这里使用内部48MHz的HSI时钟来配置sysclk。二、程序部分2.1、时钟配置时钟这部分配置有点奇怪,直接配置使能48MHz的HSI,程序不启动,时钟切换到HSE或LSI,再且回到HSI,可以正常启动运行。voidrcc_config(void){ uint8_tres=0U; RCC_AHBPeriphClk_Ena
TL-LED 国产芯片交流
最牛B的TFT驱动代码!51 AVR 430 STM32 LPC......!
共享一个TFT的驱动代码,支持8位,16位!市场常见的单片机代码基本齐了,呵呵!资料包:最牛B的TFT驱动代码!51AVR430STM32LPC......!谢谢分享本站强荐:185娱乐﹚城.足球﹚真_人.彩票齐全﹚手机可投﹚注任何游戏.首次开户送10元.首存送58元.信誉绝对保证185.cc
shanyan 淘e淘
【 信号处理】数字滤波器的实现VHDL
基于FPGA的数字滤波器quartusII工程文件,所包含的文件包括:firfilter.vhd三阶八位的FIRfirfilter1.vhd改进的FIRfir_lut查表法FIRfilter.vhd读入数据和将串进数据变换为查表地址;lut.vhd按输入的查表地址读出相应的数据;shift_add.vhd将lut模块输出的数据进行移位相加,并输出最后结果;control.vhd将以上三个模块联接起来。iirfilter.vhd简
jishuaihu FPGA/CPLD
实用资料——3G技术标准及其发展研究
  随着通信业务的迅猛发展和通信量的激增,未来的移动通信系统不仅要有大的系统容量,而且还要能支持话音、数据、图像、多媒体等多种业务的有效传输。第三代移动通信系统将高速移动接入和基于互联网协议的服务结合起来,在提高无线频率利用率的同时,为用户提供更经济、内容更丰富的无线通信服务。  第三代移动通信系统在国际上统称为IMT-2000(简称3G),是国际电信联盟(ITU)在1985年提出的工作在2000MHz频段的系统。与第一代模拟移动通信和第二代数字移动通信系统相比,第三代的最主要特征
1234 RF/无线
linux 内核从4.14升级到5.15版本,启动60s后无任何打印就自动重启了
问题:linux内核从4.14升级到5.15版本,启动60s后无任何打印就自动重启了芯片:marvellCN9130,arm64设备本来用4.14版本的内核都正常,然后根据marvel发布的SDK去编译5.15版本的内核,烧录到flsh中,并把编译生成的B.dt和rootfs一块搞到设备上。然后设备可以正常启动,可以进shell,但是内核起来60s的时候,设备就自动重启了。且重启的时候没有打印任何异常log可以排除掉的是内核的软件狗(宏没有打开且/proc/sys/kern
ColdIce1123 Linux与安卓
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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