历史上的今天
返回首页

历史上的今天

今天是:2024年09月08日(星期日)

2021年09月08日 | STM32CubeMX配置RTC——基于(STM32G070+STM32CubeMX+HAL库+RTC)

2021-09-08 来源:eefocus

实验目的:

通过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);//更新时间


完美,收工!!!

推荐阅读

史海拾趣

HCC Industries公司的发展小趣事

近年来,随着全球对环境保护和可持续发展的重视,HCC Industries积极响应号召,制定了绿色可持续发展战略。公司加大了对环保技术和绿色产品的研发投入,推出了一系列符合环保标准的微电子部件产品。同时,HCC还通过优化生产工艺和节能减排措施,降低了生产过程中的能源消耗和污染排放。这一战略不仅赢得了客户和消费者的广泛赞誉,也为公司带来了更加可持续的发展前景。

AMD(超微)公司的发展小趣事

近年来,随着全球对环境保护和可持续发展的重视,HCC Industries积极响应号召,制定了绿色可持续发展战略。公司加大了对环保技术和绿色产品的研发投入,推出了一系列符合环保标准的微电子部件产品。同时,HCC还通过优化生产工艺和节能减排措施,降低了生产过程中的能源消耗和污染排放。这一战略不仅赢得了客户和消费者的广泛赞誉,也为公司带来了更加可持续的发展前景。

ACP Optoelectronic Technology Co Ltd公司的发展小趣事

ACP Optoelectronic Technology Co Ltd,在创立初期便专注于光电技术的研发。某年,公司研发团队成功开发出一种新型光电传感器,其性能远超当时市场上的同类产品。这一技术突破迅速吸引了行业内的关注,公司因此获得了大量订单,业绩迅速攀升。随着技术的不断完善和市场的不断拓展,ACP Optoelectronic Technology Co Ltd逐渐在光电领域崭露头角。

Gamewell-FCI ( Honeywell )公司的发展小趣事

在国内市场取得一定成绩后,ACP Optoelectronic Technology Co Ltd开始积极拓展国际市场。公司积极参加国际电子展会和技术交流活动,与海外企业建立合作关系,拓展销售渠道。经过几年的努力,ACP Optoelectronic Technology Co Ltd的产品已经成功打入多个国际市场,公司也逐渐发展成为一家具有国际影响力的光电企业。

得倍(DBIC)公司的发展小趣事

在技术创新的基础上,倍(DBIC)公司积极拓展市场,加强品牌建设。公司制定了详细的市场营销策略,针对不同区域和行业进行精准推广。同时,倍(DBIC)公司还积极参与国际展会和论坛,与全球合作伙伴建立联系。这些努力使倍(DBIC)公司的品牌知名度不断提高,市场份额也逐步扩大。

Datalogic公司的发展小趣事

Datalogic公司自成立以来,一直致力于技术创新。在1990年代,随着电子行业的快速发展,对高精度数据采集和处理的需求日益增加。Datalogic凭借其深厚的技术积累,成功研发出一系列高性能的条码扫描器和数据采集器,这些产品凭借其高效、稳定的表现,迅速在电子行业占据了一席之地。

问答坊 | AI 解惑

工程师的交际能力在中国有多重要

前几天和论坛里一位聊天,说起工程师不能光闷头干活,也得注意交际,他也深表同意。 看上去工程师似乎只要闷头做自己的事就行了,但是和同事的交流、和领导的交流可能也会很重要。虽然技术是一个硬指标,但在哪里都是那些能说会道的人沾光。再说了 ...…

查看全部问答>

电子元器件配套知识大全(一)

电子元器件配套知识大全(一)…

查看全部问答>

使用gprs猫进行ppp拨号,ppp的两端是什么?

比如把我的gprs modem 和开发版接起来,在开发版上进行ppp拨号,这时候建立ppp的两端是指      “开发版  和  基站” 还是 “开发版  和  猫” 或者 “猫     &nb ...…

查看全部问答>

基于GSM模块的单片机应用问题

   最近做一个基于GSM的家庭安全系统,需要GSM模块和视频模块在HT46的基础上,将不安全信息用短信发送给屋主,请问    (1)这方面的GSM只是需要从哪里开始入手学习,比较容易入门?而且需要尽快做出来,之前没有基础。 &nbs ...…

查看全部问答>

请问2410的LCD控制器的行场同步问题

    我配置S3C2410的LCD控制器,点亮了LCD屏,但是画面存在错位。我的屏是320*240,TFT     屏的偏左侧有一道1.5cm宽的黑色条块,然后才是WinCE的桌面,然后屏的最左侧是原本应该在最右侧的图像。大概和下面的标注一样: 12 ...…

查看全部问答>

wince下用c#开发pda里的mp3播放程序,代码是怎么写的,好象没有winmm.dll是吧。

wince下好象是没有winmm.dll的是吧。 谁知道哪里有这些资料的,谢谢了。会及时揭贴的。希望发一些好的资料给我参考下。 以前没怎么做过pda下的程序。…

查看全部问答>

请教s3c44b0伪指令OPT的用途

OPT这条伪指令的功能对源码设置列表输出选择,包括强制换页,强制行号变为零等, 1、设置后代码列表是在哪生成的? 2、OPT在实际应用中起到一个什么作用? 3、常应用于什么场合?…

查看全部问答>

用tftp传的可执行文件为什么告诉我找不到

我从别的机器用tftp考了个可执行文件到本机的dvs目录下,可运行它时却被告知找不到。ls后发现拷贝成功,已存在。请问知道什么原因吗?…

查看全部问答>

如何学习单片机

初学者应如何学习单片机…

查看全部问答>

6446 dsp端codec的信息在超级终端中输出

请问使用合众达的例子,合众达下的codec文件夹下的videnc_copy.c中XDAS_Int32 VIDENCCOPY_TI_process(IVIDENC_Handle h, XDM_BufDesc *inBufs,    XDM_BufDesc *outBufs, IVIDENC_InArgs *inArgs, IVIDENC_OutArgs *outArgs){  &nbs ...…

查看全部问答>