前言:
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;

最低0.47元/天 解锁文章
1145





