【STM32】(F207)_HAL库开发教程(三)—RTC使用

   日期:2020-09-01     浏览:200    评论:0    
核心提示:前言本系列本章针对STM32F207,基于STM32Cubemx和Keil进行程序开发,作者利用本系列文章对开发过程进行记录和总结。该系列文章仅供参考,欢迎互相学习交流。本文主要介绍STM32_HAL库开发中RTC的使用。目录前言一、RTC简介1.时钟与分频2.开发步骤二、STM32CbueMX配置1.选取RTC进行配置2.配置RTC模式3.配置RTC参数4.配置NVIC中断优先级三、Keil程序开发1.主要功能函数2.相关代码1.日历更新2.日历获取总结一、RTC简介STM32F2的实时时钟(R

前言

本系列本章针对STM32F207,基于STM32Cubemx和Keil进行程序开发,作者利用本系列文章对开发过程进行记录和总结。该系列文章仅供参考,欢迎互相学习交流。
其中,本文主要介绍STM32_HAL库开发中RTC的使用。

目录

  • 前言
  • 一、RTC简介
    • 1.时钟与分频
    • 2.开发步骤
  • 二、STM32CbueMX配置
    • 1.选取RTC进行配置
    • 2.配置RTC模式
    • 3.配置RTC参数
    • 4.配置NVIC中断优先级
  • 三、Keil程序开发
    • 1.主要功能函数
    • 2.相关代码
    • 1.日历更新
    • 2.日历获取
  • 总结

一、RTC简介

STM32F2的实时时钟(RTC)是一个独立的BCD(Binary Coded Decimal)定时器/计时器,提供了一个包括时间与日期的时钟/日历功能,两个闹钟中断,一个定期唤醒中断,并且包括一个自动唤醒单位管理的低功耗模式。

1.时钟与分频

STM32F2的RTC(RTCCLK)时钟源头可以从LES时钟、LSI时钟以及HSE时钟中进行选择,一般我们选择LSE外部低速时钟,即32.768Khz外部晶振作为时钟源。并且通过配置异步预分频器和同步预分频器设置1Hz的时钟核心。

2.开发步骤

1.STM32CubeMX中配置:时钟+RTC模式+RTC参数
2.Keil中对RTC时间和日期进行设置和获取
3.编写中断服务函数

二、STM32CbueMX配置

1.选取RTC进行配置

在STM32CubeMX首页找到并选择RTC进行相关配置

2.配置RTC模式

主要对RTC的各个模式进行选择,包括使能日历,闹钟和唤醒中断等。这里选择配置图中三处

3.配置RTC参数

主要对RTC的各个参数进行配置,包括:时间,日期,预分频设置,周期性唤醒的频率和计数值。这里配置如图所示。

4.配置NVIC中断优先级

主要对唤醒中断和闹钟中断的NVIC优先级进行配置

三、Keil程序开发

1.主要功能函数

设置日历参数
HAL_RTC_GetDate(&hrtc,&RTC_DateStruct,RTC_FORMAT_BIN);
HAL_RTC_GetTime(&hrtc,&RTC_TimeStruct,RTC_FORMAT_BIN);
获取日历参数
HAL_RTC_SetTime(&hrtc, &RTC_Time, RTC_FORMAT_BIN);
HAL_RTC_SetDate(&hrtc, &RTC_Date, RTC_FORMAT_BIN);

其中,第一个参数为RTC结构体,第二个参数为Time和Date结构体,第三个参数可设置为:RTC_FORMAT_BIN或RTC_FORMAT_BCD

周期性唤醒中断
void RTC_WKUP_IRQHandler(void)

2.相关代码

1.日历更新

日历更新程序如下(示例):

RTC_Time.Hours = 1;
RTC_Time.Minutes = 2;
RTC_Time.Seconds = 3;
RTC_Time.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
RTC_Time.StoreOperation = RTC_STOREOPERATION_RESET;
HAL_RTC_SetTime(&hrtc, &RTC_Time, RTC_FORMAT_BIN);
		
RTC_Date.WeekDay = 4;
RTC_Date.Month = 5;
RTC_Date.Date = 6;
RTC_Date.Year = 7;	
HAL_RTC_SetDate(&hrtc, &RTC_Date, RTC_FORMAT_BIN);

2.日历获取

日历获取程序如下(示例):

HAL_RTC_GetTime(&hrtc,&RTC_TimeStruct,RTC_FORMAT_BIN);
printf("Time:%02d:%02d:%02d",RTC_TimeStruct.Hours,RTC_TimeStruct.Minutes,RTC_TimeStruct.Seconds); 
HAL_RTC_GetDate(&hrtc,&RTC_DateStruct,RTC_FORMAT_BIN);
printf("Date:20%02d-%02d-%02d",RTC_DateStruct.Year,RTC_DateStruct.Month,RTC_DateStruct.Date); 

总结

本项目中RTC的使用主要可以归纳为:
1.日历的获取
2.日历的更新
3.周期性唤醒中断的使用
在正确配置好CubeMX后,通过对主要功能函数的使用实现对RTC的灵活使用。

提示:若有错误不足,欢迎批评指正。该系列文章仅供参考,欢迎互相学习交流。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服