【前言】
前面在移植好了U8G2的图形库,同时结合RTC来实现了一个时钟的界面,这一篇将结合我在前移植好的nr_micro_shell来实现设置时间。
1、添加shell命令:
/* 设置时间 */
void shell_time_cmd(char argc, char *argv)
{
if(argc == 4)
{
uint8_t hour = atoi(&argv[argv[1]]); // 第一个参数:小时
uint8_t minute = atoi(&argv[argv[2]]); // 第二个参数:分钟
uint8_t second = atoi(&argv[argv[3]]); // 第三个参数:秒
// 参数校验
if (hour > 23 || minute > 59 || second > 59)
{
shell_printf("Invalid time format. Range: HH(0-23), MM(0-59), SS(0-59)\r\n");
return;
}
// 构造 RTC 时间结构体
RTC_TimeTypeDef sTime = {0};
sTime.Hours = hour;
sTime.Minutes = minute;
sTime.Seconds = second;
sTime.TimeFormat = RTC_HOURFORMAT12_AM; // 可根据需要修改为 24 小时制
sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sTime.StoreOperation = RTC_STOREOPERATION_RESET;
// 设置 RTC 时间
if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK)
{
shell_printf("Failed to set RTC time.\r\n");
}
else
{
shell_printf("RTC time set to: %02d:%02d:%02d\r\n", hour, minute, second);
}
}
else
{
shell_printf("Usage: Time <HH> <MM> <SS>\r\n");
shell_printf("Example: Time 12 30 45\r\n");
}
}
在这里,先判断输入的参数是否正确,如果正确则更新RTC时间。
同时在添加进shell的命令列表:

【效果】
在shell终端中输入想要设置的时间,就可以成功的更新RTC的时间了,同时界面也显示了正确的时间。

|