前言
本文记录了我学习STM32CubeMX的过程,方便以后回忆。我们使用的开发板是基于STM32F103C6T6的。本章记录了RTC时钟的基础配置。下文调试时用到的串口来查看,不过串口的配置省略了。
步骤
实验目标:基于RTC时钟,查看它的秒计时是否能用。
-
外部时钟的使能配置和生成文件配置,串口打印配置,其它文章讲过了,这里就不重复了。下面讲的是外部低速时钟。
-
RTC配置
-
keil中打开,生成的工程。以及结果。
关键函数
unsigned char TimeDataStr[8]; //暂存字符串 RTC_TimeTypeDef TimeData; //RTC时间结构定义 //RTC_DateTypeDef DateData; //RTC日期结构定义 //BCD码转10进制码 uint8_t bcd_to_dec(uint8_t bcd_value) { uint8_t dec_value = 0; uint8_t high_nibble = (uint8_t)(bcd_value >> 4); uint8_t low_nibble = (uint8_t)(bcd_value & 0x0F); dec_value = (high_nibble * 10) + low_nibble; return dec_value; } //主循环中的 HAL_RTC_GetTime(&hrtc, &TimeData, RTC_FORMAT_BCD); sprintf(TimeDataStr,"%02d\r\n",bcd_to_dec(TimeData.Seconds)); HAL_UART_Transmit(&huart1,TimeDataStr,sizeof(TimeDataStr),10);
-
基础输出如上。但是上面不具备掉电恢复,就要使用到BKU(备份寄存器)来配合RTC完成上电,判断是否重置。而且当主电源掉电时,但是VBAT引脚还存在供电的话,RTC也还会继续走时,和BKU(备份寄存器)数据还有保留。
__HAL_RCC_PWR_CLK_ENABLE();//使能 HAL_PWR_EnableBkUpAccess();//取消备份区域写保护 //基于BKU判断是否为首次启动 if(HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR1)!=0x6655) { HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR1,0x6655); }
以上就是BKU(备份寄存器)的操作,就不加入代码演示了。