实验目的:
通过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库如下:
三、时间日期获取设置等:
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时钟:
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);//更新时间
复制代码
|