RTC的简介
STM32 的 RTC 外设(Real Time Clock) ,实质是一个掉电后还继续运行的定时STM32G4 的 RTC,是一个独立的 BCD 定时器/计数器。 RTC 提供一个日历时钟(包含年月日时分秒信息)、两个可编程闹钟(ALARM A 和 ALARM B)中断,以及一个具有中断功能的周期性可编程唤醒标志。 RTC 还包含用于管理低功耗模 式的自动唤醒单元。
从定时器的角度来说,相对于通用定时器 TIM 外设,它十分简单,只有很纯粹的计时和触发中断的功能;但从掉电还继续运行的角度来说,它却是 STM32 中唯一一个具有如此强大功能的外设。所以 RTC 外设的复杂之处并不在于它的定时功能,而在于它掉电还继续运行的特性。
以上所说的掉电,是指主电源 VDD 断开的情况,为了 RTC 外设掉电继续运行,必须接上锂电池给 STM32 的 RTC、备份发卡通过 VBAT 引脚供电。
但是官方的板子并没有锂电池座,所以,在比赛的时候,也不会让你显示实时时钟,只会,显示固定的时间。
我们直接用STMCueMX配置,就不用管内部的寄存器操作了。
功能要求:
在LCD上显示,时分秒,年月日。
实验现象:
STM32CubeMX配置
配置RTC定时器
配置RTC时钟
配置一秒钟
主程序
int main(void)
{
/* USER CODE BEGIN 1 */
RTC_TimeTypeDef S_F_M;
RTC_DateTypeDef N_Y_R;
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_RTC_Init();
/* USER CODE BEGIN 2 */
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);//关闭锁存器
LCD_Init();
LCD_SetTextColor(White);
LCD_SetBackColor(Black);
LCD_Clear(Black);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_RTC_GetTime(&hrtc,&S_F_M,RTC_FORMAT_BIN);
HAL_RTC_GetDate(&hrtc,&N_Y_R,RTC_FORMAT_BIN);
LcdSprintf(Line3," %d.%d.%d",S_F_M.Hours,S_F_M.Minutes,S_F_M.Seconds);//时间
if(S_F_M.Seconds==0)
{
LcdSprintf(Line3," %d.%d.%d ",S_F_M.Hours,S_F_M.Minutes,S_F_M.Seconds);//消隐
}
LcdSprintf(Line4," %d.%d.%d",N_Y_R.Year,N_Y_R.Month,N_Y_R.Date);//日期
LcdSprintf(Line5," %d",N_Y_R.WeekDay);//星期几
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}