从零实现 RTC实时时钟实验

前言:

RTC,是一个独立的 BCD 定时器/计数器。 RTC 提供一个日历时钟(包含年月日时分秒信息)、两个可编程闹钟(ALARM A 和 ALARM B)中断,以及一个具有中断功能的周期性可编程唤醒标志。 RTC 还包含用于管理低功耗模式的自动唤醒单元。

我们经常用到的功能是,用来计量世界时间。而且可以在没有VCC的时候用纽扣电池供电。这样时间就能正确刷新了。

 

实验一:实现RTC时间功能

 

利用前面RGB屏幕测试的实验,将RTC实时时间显示在屏幕上,每按下一次key0,刷新一次屏幕并显示最新时间。

1.使能RCC的LSE和RTC

2.配置时钟树

这里我之前就没有选上LSE,cubemx默认LSI,所以效果上会比正常时间慢一些。

3.配置RTC

这里需要注意的是,Data Format选择上,binary和BCD的区别,比如12点,binary的形式就是hours=12,而BCD则是hours=0x12.

此外,初始时间虽然设置上了,但不知道是哪里的问题,cubemx生成代码后并未帮我初始化上我设置的时间。明白的同学麻烦评论一下

 

4.生成代码,cubemx会帮你初始化好RTC,但是时间并未设置,还需要调用两个函数自行配置时间。

HAL_StatusTypeDef HAL_RTC_SetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format);

HAL_StatusTypeDef HAL_RTC_SetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format);

值得注意的是,原子建议先设置时间再设置日期。这样时间上更贴近你的预期。

//RTC时间设置
//hour,min,sec:小时,分钟,秒钟
//ampm:@RTC_AM_PM_Definitions:RTC_HOURFORMAT12_AM/RTC_HOURFORMAT12_PM
//返回值:HAL_OK(0),成功
//       HAL_ERROR(1)
HAL_StatusTypeDef RTC_Set_Time(uint8_t hour, uint8_t min, uint8_t sec, uint8_t ampm)
{
	RTC_TimeTypeDef RTC_TimeStructure;
	
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值