/** * @brief Returns the time entered by user, using Hyperterminal. * @param None * @retval Current time RTC counter value */ uint32_t Time_Regulate(void) { uint32_t Tmp_HH = 0xFF, Tmp_MM = 0xFF, Tmp_SS = 0xFF; printf("\r\n==============Time Settings====================================="); printf("\r\n Please Set Hours"); while (Tmp_HH == 0xFF) { Tmp_HH = USART_Scanf(23); } printf(": %d", Tmp_HH); printf("\r\n Please Set Minutes"); while (Tmp_MM == 0xFF) { Tmp_MM = USART_Scanf(59); } printf(": %d", Tmp_MM); printf("\r\n Please Set Seconds"); while (Tmp_SS == 0xFF) { Tmp_SS = USART_Scanf(59); } printf(": %d", Tmp_SS); /* Return the value to store in RTC counter register */ return((Tmp_HH*3600 + Tmp_MM*60 + Tmp_SS)); }
/* * 函数名:Time_Regulate * 描述 :返回用户在超级终端中输入的时间值,并将值储存在 * RTC 计数寄存器中。 * 输入 :无 * 输出 :用户在超级终端中输入的时间值,单位为 s * 调用 :被Time_Adjust调用,调用USART_Scanf */ uint32_t Time_Regulate(void) { uint32_t Tmp_HH = 0xFF, Tmp_MM = 0xFF, Tmp_SS = 0xFF; printf("\r\n==============Time Settings====================================="); printf("\r\n Please Set Hours"); while (Tmp_HH == 0xFF) { /* 将串口接受的数据给Tmp_HH ,23便是传递给USART_Scanf(value)中的形参value的 */ Tmp_HH = USART_Scanf(23); } printf(": %d", Tmp_HH); printf("\r\n Please Set Minutes"); while (Tmp_MM == 0xFF) { Tmp_MM = USART_Scanf(59); } printf(": %d", Tmp_MM); printf("\r\n Please Set Seconds"); while (Tmp_SS == 0xFF) { Tmp_SS = USART_Scanf(59); } printf(": %d", Tmp_SS); /* Return the value to store in RTC counter register * 将时分秒转换成秒放入RTC计数器中 */ return((Tmp_HH*3600 + Tmp_MM*60 + Tmp_SS)); }
void serialShellGetCountdown(uint32_t *val) { uint32_t days = 0xFFF; printf("\r\n==============Countdown Settings================================"); printf("\r\n Please set number of days to countdown (000..999)"); printf("\r\n"); while (days == 0xFFF) { days = USART_Scanf(3, 0, 999); } printf(": %d", days); printf("\r\n"); *val = days; }
/** * @file Time_Regulate * @brief RTC校准 * @param 无 * @retval 无 */ void Time_Regulate(void) { struct tm time; memset(&time, 0 , sizeof(time) ); /* 清空结构体 */ printf("=======================Time Settings==========================\r\n"); printf("Please Set Years between 1970 to 2037\r\n"); while ( time.tm_year>2037 || time.tm_year<1970) { time.tm_year = USART_Scanf(1970,2037,4); } printf("Set Years: %d\r\n", time.tm_year); printf("Please Set Months between 01 to 12\r\n"); while (time.tm_mon >12 || time.tm_mon < 1 ) { time.tm_mon= USART_Scanf(1,12,2)-1; } printf("Set Months: %d\r\n", time.tm_mon); printf("Please Set Days between 01 to 31\r\n"); while (time.tm_mday >31 ||time.tm_mday <1 ) { time.tm_mday = USART_Scanf(1,31,2); } printf("Set Days: %d\r\n", time.tm_mday); printf("Please Set Hours between 01 to 23\r\n"); while (time.tm_hour >23 ||time.tm_hour <1 ) { time.tm_hour = USART_Scanf(1,23,2); } printf("Set Hours: %d\r\n", time.tm_hour); printf("Please Set Minutes between 01 to 59\r\n"); while (time.tm_min >59 || time.tm_min <1 ) { time.tm_min = USART_Scanf(1,59,2); } printf("Set Minutes: %d\r\n", time.tm_min); printf("Please Set Seconds between 01 to 59\r\n"); while (time.tm_sec >59 || time.tm_sec <1 ) { time.tm_sec = USART_Scanf(1,59,2); } printf("Set Seconds: %d\r\n", time.tm_sec); /* Return the value to store in RTC counter register */ Time_SetCalendarTime(time); }
/** * @brief Returns the time entered by user, using Hyperterminal. * @param None * @retval None */ void RTC_TimeRegulate(void) { uint32_t tmp_hh = 0xFF, tmp_mm = 0xFF, tmp_ss = 0xFF; printf("\n\r==============Time Settings=====================================\n\r"); RTC_TimeStructure.RTC_H12 = RTC_H12_AM; printf(" Please Set Hours\n\r"); while (tmp_hh == 0xFF) { tmp_hh = USART_Scanf(0, 23); RTC_TimeStructure.RTC_Hours = tmp_hh; } printf(": %0.2d\n\r", tmp_hh); printf(" Please Set Minutes\n\r"); while (tmp_mm == 0xFF) { tmp_mm = USART_Scanf(0, 59); RTC_TimeStructure.RTC_Minutes = tmp_mm; } printf(": %0.2d\n\r", tmp_mm); printf(" Please Set Seconds\n\r"); while (tmp_ss == 0xFF) { tmp_ss = USART_Scanf(0, 59); RTC_TimeStructure.RTC_Seconds = tmp_ss; } printf(": %0.2d\n\r", tmp_ss); /* Configure the RTC time register */ if(RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure) == ERROR) { printf("\n\r>> !! RTC Set Time failed. !! <<\n\r"); } else { printf("\n\r>> !! RTC Set Time success. !! <<\n\r"); RTC_TimeShow(); /* Indicator for the RTC configuration */ RTC_WriteBackupRegister(RTC_BKP_DR0, 0x32F2); } tmp_hh = 0xFF; tmp_mm = 0xFF; tmp_ss = 0xFF; printf("\n\r==============Date Settings=====================================\n\r"); printf(" Please Set WeekDay (01-07)\n\r"); while (tmp_hh == 0xFF) { tmp_hh = USART_Scanf(1, 7); RTC_DateStructure.RTC_WeekDay = tmp_hh; } printf(": %0.2d\n\r", tmp_hh); tmp_hh = 0xFF; printf(" Please Set Date (01-31)\n\r"); while (tmp_hh == 0xFF) { tmp_hh = USART_Scanf(1, 31); RTC_DateStructure.RTC_Date = tmp_hh; } printf(": %0.2d\n\r", tmp_hh); printf(" Please Set Month (01-12)\n\r"); while (tmp_mm == 0xFF) { tmp_mm = USART_Scanf(1, 12); RTC_DateStructure.RTC_Month = tmp_mm; } printf(": %0.2d\n\r", tmp_mm); printf(" Please Set Year (00-99)\n\r"); while (tmp_ss == 0xFF) { tmp_ss = USART_Scanf(0, 99); RTC_DateStructure.RTC_Year = tmp_ss; } printf(": %0.2d\n\r", tmp_ss); /* Configure the RTC date register */ if(RTC_SetDate(RTC_Format_BIN, &RTC_DateStructure) == ERROR) { printf("\n\r>> !! RTC Set Date failed. !! <<\n\r"); } else { printf("\n\r>> !! RTC Set Date success. !! <<\n\r"); RTC_DateShow(); /* Indicator for the RTC configuration */ RTC_WriteBackupRegister(RTC_BKP_DR0, 0x32F2); } }
/** * @brief Returns the time entered by user, using Hyperterminal. * @param None * @retval None */ void RTC_TimeRegulate(void) { uint32_t tmp_hh = 0xFF, tmp_mm = 0xFF, tmp_ss = 0xFF; printf("\n\r==============Time Settings=====================================\n\r"); RTC_TimeStructure.RTC_H12 = RTC_H12_AM; printf(" Please Set Hours:\n\r"); while (tmp_hh == 0xFF) { tmp_hh = USART_Scanf(23); RTC_TimeStructure.RTC_Hours = tmp_hh; } printf(" %u\n\r", tmp_hh); printf(" Please Set Minutes:\n\r"); while (tmp_mm == 0xFF) { tmp_mm = USART_Scanf(59); RTC_TimeStructure.RTC_Minutes = tmp_mm; } printf(" %0.2d\n\r", tmp_mm); printf(" Please Set Seconds:\n\r"); while (tmp_ss == 0xFF) { tmp_ss = USART_Scanf(59); RTC_TimeStructure.RTC_Seconds = tmp_ss; } printf(" %0.2d\n\r", tmp_ss); /* Configure the RTC time register */ if(RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure) == ERROR) { printf("\n\r>> !! RTC Set Time failed. !! <<\n\r"); } else { printf("\n\r>> !! RTC Set Time success. !! <<\n\r"); RTC_TimeShow(); /* Indicator for the RTC configuration */ RTC_WriteBackupRegister(RTC_BKP_DR0, 0x32F2); } tmp_hh = 0xFF; tmp_mm = 0xFF; tmp_ss = 0xFF; /* Disable the Alarm A */ RTC_AlarmCmd(RTC_Alarm_A, DISABLE); printf("\n\r==============Alarm A Settings=====================================\n\r"); RTC_AlarmStructure.RTC_AlarmTime.RTC_H12 = RTC_H12_AM; printf(" Please Set Alarm Hours:\n\r"); while (tmp_hh == 0xFF) { tmp_hh = USART_Scanf(23); RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours = tmp_hh; } printf(" %0.2d\n\r", tmp_hh); printf(" Please Set Alarm Minutes:\n\r"); while (tmp_mm == 0xFF) { tmp_mm = USART_Scanf(59); RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes = tmp_mm; } printf(" %0.2d\n\r", tmp_mm); printf(" Please Set Alarm Seconds:\n\r"); while (tmp_ss == 0xFF) { tmp_ss = USART_Scanf(59); RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds = tmp_ss; } printf(" %0.2d", tmp_ss); /* Set the Alarm A */ RTC_AlarmStructure.RTC_AlarmDateWeekDay = RTC_Weekday_Monday; RTC_AlarmStructure.RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date; RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_DateWeekDay; /* Configure the RTC Alarm A register */ RTC_SetAlarm(RTC_Format_BIN, RTC_Alarm_A, &RTC_AlarmStructure); printf("\n\r>> !! RTC Set Alarm success. !! <<\n\r"); RTC_AlarmShow(); /* Enable the RTC Alarm A Interrupt */ RTC_ITConfig(RTC_IT_ALRA, ENABLE); /* Enable the alarm A */ RTC_AlarmCmd(RTC_Alarm_A, ENABLE); }
/* * 函数名:Time_Regulate * 描述 :返回用户在超级终端中输入的时间值,并将值储存在 * RTC 计数寄存器中。 * 输入 :用于读取RTC时间的结构体指针 * 输出 :用户在超级终端中输入的时间值,单位为 s * 调用 :内部调用 */ void Time_Regulate(struct rtc_time *tm) { #if 0 //从串口输入时间 u32 Tmp_YY = 0xFF, Tmp_MM = 0xFF, Tmp_DD = 0xFF, Tmp_HH = 0xFF, Tmp_MI = 0xFF, Tmp_SS = 0xFF; /* 这里面把串口接收中断关掉,因为用的是scanf()查询接收 * 如果中断接收和查询接收都一起打开的话,会使得输入非常慢 */ USART_ITConfig(USART1, USART_IT_RXNE, DISABLE); printf("\r\n=========================Time Settings=================="); printf("\r\n 请输入年份(Please Set Years): 20"); while (Tmp_YY == 0xFF) { Tmp_YY = USART_Scanf(99); } printf("\n\r 年份被设置为: 20%0.2d\n\r", Tmp_YY); tm->tm_year = Tmp_YY+2000; Tmp_MM = 0xFF; printf("\r\n 请输入月份(Please Set Months): "); while (Tmp_MM == 0xFF) { Tmp_MM = USART_Scanf(12); } printf("\n\r 月份被设置为: %d\n\r", Tmp_MM); tm->tm_mon= Tmp_MM; Tmp_DD = 0xFF; printf("\r\n 请输入日期(Please Set Dates): "); while (Tmp_DD == 0xFF) { Tmp_DD = USART_Scanf(31); } printf("\n\r 日期被设置为: %d\n\r", Tmp_DD); tm->tm_mday= Tmp_DD; Tmp_HH = 0xFF; printf("\r\n 请输入时钟(Please Set Hours): "); while (Tmp_HH == 0xFF) { Tmp_HH = USART_Scanf(23); } printf("\n\r 时钟被设置为: %d\n\r", Tmp_HH ); tm->tm_hour= Tmp_HH; Tmp_MI = 0xFF; printf("\r\n 请输入分钟(Please Set Minutes): "); while (Tmp_MI == 0xFF) { Tmp_MI = USART_Scanf(59); } printf("\n\r 分钟被设置为: %d\n\r", Tmp_MI); tm->tm_min= Tmp_MI; Tmp_SS = 0xFF; printf("\r\n 请输入秒钟(Please Set Seconds): "); while (Tmp_SS == 0xFF) { Tmp_SS = USART_Scanf(59); } printf("\n\r 秒钟被设置为: %d\n\r", Tmp_SS); tm->tm_sec= Tmp_SS; /* 当时间输入完成后,再把串口接收中断打开,为的是接收enter返回这个命令 */ USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); #else //默认固定时间 tm->tm_year = 2013; tm->tm_mon= 11; tm->tm_mday= 20; tm->tm_hour= 13; tm->tm_min= 10; tm->tm_sec= 10; #endif }
/* * 函数名:Time_Regulate * 描述 :返回用户在超级终端中输入的时间值,并将值储存在 * RTC 计数寄存器中。 * 输入 :用于读取RTC时间的结构体指针 * 输出 :用户在超级终端中输入的时间值,单位为 s * 调用 :内部调用 */ void Time_Regulate(struct rtc_time *tm) { u32 Tmp_YY = 0xFF, Tmp_MM = 0xFF, Tmp_DD = 0xFF, Tmp_HH = 0xFF, Tmp_MI = 0xFF, Tmp_SS = 0xFF; printf("\r\n=========================Time Settings=================="); printf("\r\n 请输入年份(Please Set Years): 20"); while (Tmp_YY == 0xFF) { Tmp_YY = USART_Scanf(99); } printf("\n\r 年份被设置为: 20%0.2d\n\r", Tmp_YY); tm->tm_year = Tmp_YY+2000; Tmp_MM = 0xFF; printf("\r\n 请输入月份(Please Set Months): "); while (Tmp_MM == 0xFF) { Tmp_MM = USART_Scanf(12); } printf("\n\r 月份被设置为: %d\n\r", Tmp_MM); tm->tm_mon= Tmp_MM; Tmp_DD = 0xFF; printf("\r\n 请输入日期(Please Set Dates): "); while (Tmp_DD == 0xFF) { Tmp_DD = USART_Scanf(31); } printf("\n\r 日期被设置为: %d\n\r", Tmp_DD); tm->tm_mday= Tmp_DD; Tmp_HH = 0xFF; printf("\r\n 请输入时钟(Please Set Hours): "); while (Tmp_HH == 0xFF) { Tmp_HH = USART_Scanf(23); } printf("\n\r 时钟被设置为: %d\n\r", Tmp_HH ); tm->tm_hour= Tmp_HH; Tmp_MI = 0xFF; printf("\r\n 请输入分钟(Please Set Minutes): "); while (Tmp_MI == 0xFF) { Tmp_MI = USART_Scanf(59); } printf("\n\r 分钟被设置为: %d\n\r", Tmp_MI); tm->tm_min= Tmp_MI; Tmp_SS = 0xFF; printf("\r\n 请输入秒钟(Please Set Seconds): "); while (Tmp_SS == 0xFF) { Tmp_SS = USART_Scanf(59); } printf("\n\r 秒钟被设置为: %d\n\r", Tmp_SS); tm->tm_sec= Tmp_SS; }
void serialShellGetDateTime(RTC_DateTypeDef *date, RTC_TimeTypeDef *time) { uint32_t year = 0xFFF, month = 0xFFF, day = 0xFFF, hour = 0xFFF, minute = 0xFFF, second = 0xFFF; printf("\r\n==============Date Settings====================================="); printf("\r\n Please Set Year (00..99)"); printf("\r\n"); while (year == 0xFFF) { year = USART_Scanf(2, 0, 99); } printf(": %d", year); printf("\r\n Please Set Month (01..12)"); printf("\r\n"); while (month == 0xFFF) { month = USART_Scanf(2, 1, 12); } printf(": %d", month); printf("\r\n Please Set Day (01..31)"); printf("\r\n"); while (day == 0xFFF) { day = USART_Scanf(2, 1, 31); } printf(": %d", day); printf("\r\n"); date->Year = year; date->Month = month; date->Date = day; printf("\r\n==============Time Settings====================================="); printf("\r\n Please Set Hours"); printf("\r\n"); while (hour == 0xFFF) { hour = USART_Scanf(2, 0, 23); } printf(": %d", hour); printf("\r\n Please Set Minutes"); printf("\r\n"); while (minute == 0xFFF) { minute = USART_Scanf(2, 0, 59); } printf(": %d", minute); printf("\r\n Please Set Seconds"); printf("\r\n"); while (second == 0xFFF) { second = USART_Scanf(2, 0, 59); } printf(": %d", second); printf("\r\n"); time->Hours = hour; time->Minutes = minute; time->Seconds = second; time->TimeFormat = RTC_HOURFORMAT12_AM; time->DayLightSaving = RTC_DAYLIGHTSAVING_NONE ; time->StoreOperation = RTC_STOREOPERATION_RESET; }