历史上的今天
返回首页

历史上的今天

今天是:2025年07月16日(星期三)

正在发生

2019年07月16日 | STM32开发笔记44:RTC驱动程序的移植

2019-07-16 来源:eefocus

单片机型号:STM32F070F6P6


本文介绍,将RTC驱动程序移植到自己的工程项目中的方法。本项目仅使用了RTC的实时时钟功能,没有启动定时报警等功能。


1、在STM32CubeMX中对RTC进行配置,如下图所示,激活了时钟源和日历功能。



2、配置RTC的时钟,如下图所示,STM32F070F6P6不能接外部的32.768K的晶振,所以只能使用HSE或LSI RC供给,考虑LSI RC精度比较差,所以使用HSE作为RTC的时钟源,我现在接的HSE时钟为12MHz,由于其频率比较高,所以选择最大的分频系数,这里是32,则供给给RTC的频率为375KHz。



3、对RTC进行设置,如下图所示,这里只考虑Synchronous Predivider Value参数就可以了,其计算方法:RTC供给频率/(Asynchronous Predivider Value+1) - 1=375000/128 - 1 =2930-1=2929。



4、设置完毕后,直接生成代码就可以了。


5、在工程中加入stm32f0xx_hal_rtc.c和stm32f0xx_hal_rtc_ex.c文件。



6、在工程中新建rtc.cpp和rtc.h文件。


7、对stm32f0xx_hal_conf.h文件进行设置,使能功能宏HAL_RTC_MODULE_ENABLED。


8、拷贝相应的代码对rtc.cpp文件中,并将以下内容加入到rtc.h中。


#ifndef RTC_H_

#define RTC_H_

 

#ifdef __cplusplus

extern "C"{

 

class CRtc

{

public:

    RTC_HandleTypeDef hrtc;

    RTC_TimeTypeDef sTime;

    RTC_DateTypeDef sDate;

public:

    CRtc(void);

    void SetTime(void);

    void GetTime(void);

};

 

}

#endif

#endif

9、rtc.cpp的文件内容如下:


#include "include.h"

 

CRtc::CRtc(void)

{

  hrtc.Instance = RTC;

  hrtc.Init.HourFormat = RTC_HOURFORMAT_24;

  hrtc.Init.AsynchPrediv = 127;

  hrtc.Init.SynchPrediv = 2929;

  hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;

  hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;

  hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;

  if (HAL_RTC_Init(&hrtc) != HAL_OK)

  {

    Target.ErrorHandler(__FILE__, __LINE__);

  }

 

  sTime.Hours = 0x0;

  sTime.Minutes = 0x0;

  sTime.Seconds = 0x0;

  sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;

  sTime.StoreOperation = RTC_STOREOPERATION_RESET;

 

  sDate.WeekDay = RTC_WEEKDAY_MONDAY;

  sDate.Month = RTC_MONTH_JANUARY;

  sDate.Date = 0x1;

  sDate.Year = 0x0;

 

  SetTime();

}

 

void CRtc::SetTime(void)

{

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

  {

    Target.ErrorHandler(__FILE__, __LINE__);

  }

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

  {

    Target.ErrorHandler(__FILE__, __LINE__);

  }

}

 

void CRtc::GetTime(void)

{

  if (HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)

  {

    Target.ErrorHandler(__FILE__, __LINE__);

  }

  if (HAL_RTC_GetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)

  {

    Target.ErrorHandler(__FILE__, __LINE__);

  }

}

10、在include.h中包含相应的头文件。


11、在hal.h中,声明RTC对象。


12、在main.cpp中调用RTC相应的成员函数,就可以进行时间的设置了。


推荐阅读

史海拾趣

ACL staticide公司的发展小趣事

ACL Staticide是一家专业生产静电控制产品的公司,以下是该公司发展的五个相关故事:

  1. 公司成立和起步阶段: ACL Staticide成立于1971年,总部位于美国伊利诺伊州,是一家专注于静电控制产品的制造商。公司最初致力于研发和生产静电消除剂、清洁剂和防静电地板涂层等产品,用于解决静电问题带来的种种困扰,如静电放电、静电积聚等。

  2. 技术创新和产品拓展: 随着市场对静电控制需求的增长,ACL Staticide不断进行技术创新,并拓展了产品线。公司推出了一系列静电控制产品,包括静电消除器、清洁剂、防静电地板涂层、静电测试仪器等,以满足各种不同行业的需求。

  3. 市场拓展和国际合作: ACL Staticide积极开拓国内外市场,与全球各地的客户建立了合作关系。公司的产品被广泛应用于电子制造、半导体、医疗、航空航天、汽车等领域,赢得了客户的信赖。同时,ACL Staticide与国际知名企业合作,共同推动静电控制技术的发展。

  4. 持续投入研发和质量控制: ACL Staticide不断加大研发投入,致力于产品质量和技术创新。公司设立了专门的研发团队和实验室,不断改进现有产品,并开发新的静电控制解决方案,以满足客户不断变化的需求。

  5. 未来发展展望: ACL Staticide将继续致力于静电控制产品的研发和应用,不断推出更先进、更可靠的产品和解决方案,以满足客户在各个领域的需求。公司将加强国际市场拓展,提升自身在全球市场的竞争力,为行业的发展做出更大的贡献。

Astron Wireless Technologies Inc公司的发展小趣事

面对国内市场的饱和,Astron Wireless Technologies Inc公司开始将目光投向国际市场。公司积极参与国际通信展览和论坛,与全球各地的潜在客户和合作伙伴建立了联系。同时,公司还加大了对海外市场的研发投入,推出了一系列适应不同国家和地区需求的无线通信产品。这些努力使得公司在国际市场上取得了显著的成绩。

AURORA公司的发展小趣事

为了降低外购成本、增加自主研发能力,AURORA公司进行了多次收购。比如,2019年5月,AURORA收购了激光雷达初创公司Blackmore,进一步提升了公司在自动驾驶感知技术方面的实力。2021年2月,AURORA又收购了OURS,这是该公司在不到两年的时间里收购的第二家激光雷达初创公司。这些收购使得AURORA在自动驾驶产业链上的布局更加完善,为公司未来的发展提供了有力支持。

Global Power Technology Co., Ltd公司的发展小趣事
可能是温控器故障、电源电压不稳定或冰箱内部摆放物品过多导致风道堵塞。
台湾君耀(Brightking)公司的发展小趣事

君耀(Brightking)公司于1996年在台湾新竹高科技园区创立,初期专注于防雷元器件的研发和生产。凭借对技术的深入研究和市场需求的敏锐洞察,君耀逐步在台湾的电子器件市场上占得一席之地。随着产品质量和技术含量的提升,君耀的产品开始受到国内外客户的青睐,销售网络逐渐拓展至全球。

FORYARD公司的发展小趣事

随着业务的不断扩展,FORYARD意识到全球化布局的重要性。1995年,公司决定在中国设立研发中心和生产基地,以利用当地丰富的人才资源和成本优势。这一战略决策极大地提升了FORYARD的产能和研发效率,同时也使其能够更好地服务全球客户。此后,FORYARD还陆续在欧洲、亚洲等地建立了多个分支机构,形成了覆盖全球的研发、生产和销售网络。通过全球化布局,FORYARD不仅增强了自身的市场竞争力,还促进了全球电子产业的交流与合作。

问答坊 | AI 解惑

单片机系统硬件抗干扰常用方法实践

影响单片机系统可靠安全运行的主要因素主要来自系统内部和外部的各种电气干扰,并受系统结构设计、元器件选择、安装、制造工艺影响。这些都构成单片机系统的干扰因素,常会导致单片机系统运行失常,轻则影响产品质量和产量,重则会导致事故,造成重大经 ...…

查看全部问答>

怎样取得某个驱动程序支持的硬件列表?

如题 别人写好的驱动程序,我如何才能取得这个驱动程序支持的设备id? 好像inf文件里面存了有,但不知道是怎么读出来的 本人菜鸟,忘各位多多指点…

查看全部问答>

wince5.0下数据格式转换问题

下地最近忙于一个项目,pc端用sql2005,pda准备用acesss 但是遇到mdb转cdb的困难 请教无解 于是启用方案二 采用sqlite3 发现还是格式转换的问题,.mdb和.db转换也没有资料 群里的兄弟们,小弟数据库知识欠缺,还请大家多多建议,因为查询效率问题 ...…

查看全部问答>

请教高手

以下是个电池电量监测电路,请问各位高手这电路有什么地方有问题?又有哪些地方需要改进的?谢谢。MAX6775的资料在附近里。…

查看全部问答>

谁能告诉一下ULINK2的价格!

                                  …

查看全部问答>

LPC11u24和1769程序烧写

刚开始用恩智浦的平台。很多问题不懂。 LPC11u24和1769程序烧写需要用什么烧写器? 这两种芯片自带AD吗?英文DATASHEET实在看不懂………

查看全部问答>

玩转智能家居个性化,你也可以哦

        如今,80后已逐渐成为家装主力军,他们的消费心理也随之成为影响整个市场趋势的重要因素。 80后是追求个性化生活的一代 ,他们面对装修时更是如此,混搭风格、时尚款式、另类装饰……样样都不能少。80 ...…

查看全部问答>

TI 公司 新增了多线产品组合套件,现在就来免费样片申请! 机会难得!

     德州仪器(TI)公司致力于为客户提供“更多的设计和开发,更多的产品,更多的支持,更强的制造产能”,势必带给大家前所未有的体验。 从通讯、计算机、消费类电子到汽车、工业,从能源、医疗到安防、航空航天,收购国半之 ...…

查看全部问答>

ATmega644的ADC如何用连续转换模式?

根据数据表,644的ADC默认是单步转换模式,这样很麻烦,我想用连续转换。 根据数据表介绍,我使能转换完成中断,在中断里面读取自动连续转换的结果数据。但是调试发现一直进不去中断。 请问大虾们,有关于644(一定要这个芯片,很多芯片的例程和 ...…

查看全部问答>