/** * @brief Callback function of the Settings dialog * @param pMsg: pointer to a data structure of type WM_MESSAGE * @retval None */ static void _cbDialogSettings(WM_MESSAGE * pMsg) { WM_HWIN hItem; int Id, NCode, idx; static int8_t sec, min, hour; static int8_t asec, amin, ahour; static int8_t day, month, max_days; static int16_t year; SPINBOX_Handle hSpin; DROPDOWN_Handle hDropMonth; TEXT_Handle hText ; static CALENDAR_DATE current_date; RTC_TimeTypeDef RTC_TimeStructure; RTC_DateTypeDef RTC_DateStructure; static uint8_t TempStr[50]; switch (pMsg->MsgId) { case WM_INIT_DIALOG: /* Get Clock setting from RTC */ RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure); sec = RTC_TimeStructure.RTC_Seconds; min = RTC_TimeStructure.RTC_Minutes; hour = RTC_TimeStructure.RTC_Hours; RTC_GetAlarm(RTC_Format_BIN, RTC_Alarm_A, &RTC_AlarmStructure); asec = RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds; amin = RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes; ahour = RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours; RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure); year = RTC_DateStructure.RTC_Year + 2000; month = RTC_DateStructure.RTC_Month; day = RTC_DateStructure.RTC_Date; max_days = GetMaxDays(month, year); /* Update the dialog items */ hItem = pMsg->hWin; FRAMEWIN_SetFont(hItem, GUI_FONT_13B_ASCII); /* Date */ hText = TEXT_CreateEx(20, 20, 100, 25, pMsg->hWin, WM_CF_SHOW,0, 0x11F," Date : "); TEXT_SetFont(hText, GUI_FONT_13B_ASCII); TEXT_SetTextColor(hText, 0x00804000); hSpin = SPINBOX_CreateEx(20, 35, 40, 18, pMsg->hWin, WM_CF_SHOW, ID_CLOCK_DAY, 1, max_days); SPINBOX_SetFont(hSpin, GUI_FONT_13B_ASCII); SPINBOX_SetTextColor(hSpin, SPINBOX_CI_ENABLED, 0x00804000); SPINBOX_EnableBlink(hSpin, 250, 1); SPINBOX_SetValue(hSpin, day); hDropMonth = DROPDOWN_CreateEx(65, 35, 80, 160, pMsg->hWin, WM_CF_SHOW, 0, ID_CLOCK_MONTH); DROPDOWN_SetFont(hDropMonth, GUI_FONT_13B_ASCII); DROPDOWN_SetTextColor(hDropMonth, DROPDOWN_CI_UNSEL, 0x00804000); DROPDOWN_SetTextColor(hDropMonth, DROPDOWN_CI_SEL, 0x00804000); for (idx = 0; idx < 12; idx++ ) { DROPDOWN_AddString (hDropMonth, (char *)strMonth[idx]); } DROPDOWN_SetSel(hDropMonth, month - 1); hSpin = SPINBOX_CreateEx(150, 35, 50, 18, pMsg->hWin, WM_CF_SHOW, ID_CLOCK_YEAR, 2000, 2099); SPINBOX_SetFont(hSpin, GUI_FONT_13B_ASCII); SPINBOX_SetTextColor(hSpin, SPINBOX_CI_ENABLED, 0x00804000); SPINBOX_EnableBlink(hSpin, 250, 1); SPINBOX_SetValue(hSpin, year); hItem = CHECKBOX_Create(205, 37, 20, 26, pMsg->hWin, ID_CLOCK_CHECK_DATE ,WM_CF_SHOW); CHECKBOX_SetState(hItem, 1); /* Time */ hText = TEXT_CreateEx(20, 50 + 20, 100, 25, pMsg->hWin, WM_CF_SHOW,0, 0x123," Time : "); TEXT_SetFont(hText, GUI_FONT_13B_ASCII); TEXT_SetTextColor(hText, 0x00804000); hSpin = SPINBOX_CreateEx(20, 65 + 20, 40, 18, pMsg->hWin, WM_CF_SHOW, ID_CLOCK_HOUR, 0,23); SPINBOX_SetFont(hSpin, GUI_FONT_13B_ASCII); SPINBOX_SetTextColor(hSpin, SPINBOX_CI_ENABLED, 0x00804000); SPINBOX_SetValue(hSpin, hour); SPINBOX_EnableBlink(hSpin, 250, 1); hSpin = SPINBOX_CreateEx(75, 65 + 20, 40, 18, pMsg->hWin, WM_CF_SHOW, ID_CLOCK_MIN, 0, 59); SPINBOX_SetFont(hSpin, GUI_FONT_13B_ASCII); SPINBOX_SetTextColor(hSpin, SPINBOX_CI_ENABLED, 0x00804000); SPINBOX_SetValue(hSpin, min); SPINBOX_EnableBlink(hSpin, 250, 1); hSpin = SPINBOX_CreateEx(130, 65 + 20, 40, 18, pMsg->hWin, WM_CF_SHOW, ID_CLOCK_SEC, 0, 59); SPINBOX_SetFont(hSpin, GUI_FONT_13B_ASCII); SPINBOX_SetTextColor(hSpin, SPINBOX_CI_ENABLED, 0x00804000); SPINBOX_SetValue(hSpin, sec); SPINBOX_EnableBlink(hSpin, 250, 1); hItem = CHECKBOX_Create(205, 65 + 20, 20, 26, pMsg->hWin, ID_CLOCK_CHECK_TIME ,WM_CF_SHOW); CHECKBOX_SetState(hItem, 1); /* Alarm */ hText = TEXT_CreateEx(20, 78 + 40, 100, 25, pMsg->hWin, WM_CF_SHOW,0, 0x126," Alarm : "); TEXT_SetFont(hText, GUI_FONT_13B_ASCII); TEXT_SetTextColor(hText, 0x00804000); hSpin = SPINBOX_CreateEx(20, 93 + 40, 40, 18, pMsg->hWin, WM_CF_SHOW, ID_CLOCK_AHOUR, 0,23); SPINBOX_SetFont(hSpin, GUI_FONT_13B_ASCII); SPINBOX_SetTextColor(hSpin, SPINBOX_CI_ENABLED, 0x00804000); SPINBOX_SetValue(hSpin, ahour); SPINBOX_EnableBlink(hSpin, 250, 1); hSpin = SPINBOX_CreateEx(75, 93 + 40, 40, 18, pMsg->hWin, WM_CF_SHOW, ID_CLOCK_AMIN, 0, 59); SPINBOX_SetFont(hSpin, GUI_FONT_13B_ASCII); SPINBOX_SetTextColor(hSpin, SPINBOX_CI_ENABLED, 0x00804000); SPINBOX_SetValue(hSpin, amin); SPINBOX_EnableBlink(hSpin, 250, 1); hSpin = SPINBOX_CreateEx(130, 93 + 40, 40, 18, pMsg->hWin, WM_CF_SHOW, ID_CLOCK_ASEC, 0, 59); SPINBOX_SetFont(hSpin, GUI_FONT_13B_ASCII); SPINBOX_SetTextColor(hSpin, SPINBOX_CI_ENABLED, 0x00804000); SPINBOX_SetValue(hSpin, asec); hItem = CHECKBOX_Create(205, 93 + 40, 20, 26, pMsg->hWin, ID_CLOCK_CHECK_ALARM ,WM_CF_SHOW); CHECKBOX_SetState(hItem, 1); SPINBOX_EnableBlink(hSpin, 250, 1); break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); NCode = pMsg->Data.v; switch(Id) { case ID_CLOSE_SETTINGS: /* Notifications sent by 'Close' */ switch(NCode) { case WM_NOTIFICATION_RELEASED: /* Exit */ GUI_EndDialog(pMsg->hWin, 0); GUI_EndDialog (hNumPad, 0); break; } break; case ID_SET_SETTINGS: /* Notifications sent by 'Apply' */ switch(NCode) { case WM_NOTIFICATION_RELEASED: if(CHECKBOX_GetState( WM_GetDialogItem(WM_GetParent(pMsg->hWin), ID_CLOCK_CHECK_DATE))) { current_date.Year = year = SPINBOX_GetValue (WM_GetDialogItem(pMsg->hWin, ID_CLOCK_YEAR)); current_date.Month = month = DROPDOWN_GetSel (WM_GetDialogItem(pMsg->hWin, ID_CLOCK_MONTH)) + 1; current_date.Day = day = SPINBOX_GetValue (WM_GetDialogItem(pMsg->hWin, ID_CLOCK_DAY)); RTC_DateStructure.RTC_Year = year - 2000; RTC_DateStructure.RTC_Month = month; RTC_DateStructure.RTC_Date = day; RTC_DateStructure.RTC_WeekDay = 0; RTC_SetDate(RTC_Format_BIN, &RTC_DateStructure); hItem = WM_GetDialogItem(WM_GetParent(pMsg->hWin), ID_CALENDAR); CALENDAR_SetDate(hItem, ¤t_date); CALENDAR_SetSel(hItem, ¤t_date); /* Date */ hItem = WM_GetDialogItem(WM_GetParent(pMsg->hWin), ID_TEXT_DATE); sprintf((char *)TempStr, "%02d, %s, %04d",day , strMonth[month-1], year); TEXT_SetText(hItem, (char *)TempStr); } if(CHECKBOX_GetState( WM_GetDialogItem(WM_GetParent(pMsg->hWin), ID_CLOCK_CHECK_TIME))) { /* Save new param in RTC */ sec = SPINBOX_GetValue (WM_GetDialogItem(pMsg->hWin, ID_CLOCK_SEC)); min = SPINBOX_GetValue (WM_GetDialogItem(pMsg->hWin, ID_CLOCK_MIN)); hour = SPINBOX_GetValue (WM_GetDialogItem(pMsg->hWin, ID_CLOCK_HOUR)); RTC_TimeStructure.RTC_Seconds = sec; RTC_TimeStructure.RTC_Minutes = min; RTC_TimeStructure.RTC_Hours = hour; RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure); } if(CHECKBOX_GetState( WM_GetDialogItem(WM_GetParent(pMsg->hWin), ID_CLOCK_CHECK_ALARM))) { asec = SPINBOX_GetValue (WM_GetDialogItem(pMsg->hWin, ID_CLOCK_ASEC)); amin = SPINBOX_GetValue (WM_GetDialogItem(pMsg->hWin, ID_CLOCK_AMIN)); ahour = SPINBOX_GetValue (WM_GetDialogItem(pMsg->hWin, ID_CLOCK_AHOUR)); /* Disable the Alarm A */ RTC_AlarmCmd(RTC_Alarm_A, DISABLE); /* Disable the RTC Alarm A Interrupt */ RTC_ITConfig(RTC_IT_ALRA, DISABLE); STM_EVAL_LEDOff(LED4); RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds = asec; RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes = amin; RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours = ahour; RTC_AlarmStructure.RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date; RTC_AlarmStructure.RTC_AlarmDateWeekDay = day; RTC_SetAlarm(RTC_Format_BIN, RTC_Alarm_A, &RTC_AlarmStructure); /* Enable the RTC Alarm A Interrupt */ RTC_ITConfig(RTC_IT_ALRA, ENABLE); /* Enable the alarm A */ RTC_AlarmCmd(RTC_Alarm_A, ENABLE); alarm_set = 1; } /* Exit */ WM_InvalidateWindow(WM_GetParent(pMsg->hWin)); GUI_EndDialog(pMsg->hWin, 0); GUI_EndDialog (hNumPad, 0); break; } break; } break; default: WM_DefaultProc(pMsg); break; } }
int main(void) { RCC_Configuration(); RCC_ClocksTypeDef RCC_Clocks; RCC_GetClocksFreq(&RCC_Clocks); EnableClock(); //LCD_GLASS_Configure_GPIO(); //LCD_GLASS_Init(); SysTick_Config((RCC_Clocks.SYSCLK_Frequency / 2) / 1000); // Cannot exceed 16,777,215 /* Set SysTick Preemption Priority, it's a system handler rather than a regular interrupt */ //NVIC_SetPriority(SysTick_IRQn, 0x04); lcdInit(); lcdClear(); lcdXY( 2, 5 ); lcdStr( "Test"); //lcdBender(); // init rtc RTC_InitTypeDef rtcInit; rtcInit.RTC_HourFormat = RTC_HourFormat_24; rtcInit.RTC_AsynchPrediv = 0x7F; rtcInit.RTC_SynchPrediv = 0xFF; RTC_Init(&rtcInit); RTC_TimeTypeDef RTC_TimeStructure; RTC_DateTypeDef RTC_DateStructure; usart_init(); SetRTCClock(); GPIO_InitTypeDef gpio_btn; gpio_btn.GPIO_Pin = GPIO_Pin_0; gpio_btn.GPIO_Mode = GPIO_Mode_IN; gpio_btn.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA, &gpio_btn); int prevSecond = -1; while (1) { //uint8_t __status = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0); if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0x00 && !_sent) { _sent = 1; mini_snprintf( strDisp, 22, "20%02d/%02d/%02d %02d:%02d:%02d Hallo !!!", RTC_DateStructure.RTC_Year, RTC_DateStructure.RTC_Month, RTC_DateStructure.RTC_Date, RTC_TimeStructure.RTC_Hours, RTC_TimeStructure.RTC_Minutes, RTC_TimeStructure.RTC_Seconds); SendSMS("0836325001",strDisp); } if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) != 0x00 && _sent) { _sent = 0; } RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure ); RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure); if ( RTC_TimeStructure.RTC_Seconds != prevSecond ) { lcdClear(); mini_snprintf( strDisp, 11, "20%02d/%02d/%02d", RTC_DateStructure.RTC_Year, RTC_DateStructure.RTC_Month, RTC_DateStructure.RTC_Date); lcdXY( 0, 0 ); lcdStr( strDisp); mini_snprintf( strDisp, 10, "%02d:%02d:%02d", RTC_TimeStructure.RTC_Hours, RTC_TimeStructure.RTC_Minutes, RTC_TimeStructure.RTC_Seconds ); lcdXY( 0, 1 ); lcdStr( strDisp); //LCD_GLASS_Clear(); //LCD_GLASS_DisplayString( strDisp ); prevSecond = RTC_TimeStructure.RTC_Seconds; } /*if ( usart_available() ) // data available { //usart_print( "Data Available: " ); uint8_t ch = usart_read(); //usart_write(ch); //usart_print( "\r\n" ); SendSMS("836325001","Wynand"); }*/ } return 0; }
Time Get_Time(void) { Time Get_Clock; RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure); RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure); Get_Clock.Year = RTC_DateStructure.RTC_Year; //年 Get_Clock.Month = RTC_DateStructure.RTC_Month; //月份 Get_Clock.Day = RTC_DateStructure.RTC_Date; //日 Get_Clock.Hour = RTC_TimeStructure.RTC_Hours; //计算出小时 Get_Clock.Min = RTC_TimeStructure.RTC_Minutes; //计算出分钟 Get_Clock.Sec = RTC_TimeStructure.RTC_Seconds; //计算出秒钟 return Get_Clock; }
/** * @brief Display the current date on the Hyperterminal. * @param None * @retval None */ void RTC_DateShow(void) { /* Get the current Date */ RTC_GetDate(RTC_Format_BCD, &RTC_DateStructure); /* Set the Back Color */ LCD_SetBackColor(LCD_COLOR_WHITE); /* Set the Text Color */ LCD_SetTextColor(LCD_COLOR_BLUE); LCD_DisplayStringLine(LCD_LINE_6, (uint8_t *)"Current Date Display"); /* Set the Text Color */ LCD_SetTextColor(LCD_COLOR_BLACK); RTC_Time_display( LCD_LINE_7, Black, RTC_Get_Date( &RTC_DateStructure)); }
void get_iec_time(cp56time2a* TM_cp56_time){ RTC_TimeTypeDef RTC_TimeStruct; RTC_DateTypeDef RTC_DateStruct; RTC_GetTime(RTC_Format_BIN, &RTC_TimeStruct); RTC_GetDate(RTC_Format_BIN, &RTC_DateStruct); TM_cp56_time->hour = RTC_TimeStruct.RTC_Hours; TM_cp56_time->min = RTC_TimeStruct.RTC_Minutes; TM_cp56_time->msec = RTC_TimeStruct.RTC_Seconds*0x03E8 + RTC_GetSubSecond()/8; TM_cp56_time->mday = RTC_DateStruct.RTC_Date; TM_cp56_time->month = RTC_DateStruct.RTC_Month; TM_cp56_time->wday = RTC_DateStruct.RTC_WeekDay; TM_cp56_time->year = RTC_DateStruct.RTC_Year; }
/* * setDateFromBuffer * Sets the RTC date */ static void setDateFromBuffer(int i) { char temp[] = "00"; temp[0] = s_strBuffer[i+1]; temp[1] = s_strBuffer[i+2]; int day = atoi(temp); temp[0] = s_strBuffer[i+3]; temp[1] = s_strBuffer[i+4]; int month = atoi(temp); temp[0] = s_strBuffer[i+5]; temp[1] = s_strBuffer[i+6]; int year = atoi(temp); RTC_SetDate(day, month, year); SD_CreateFileForToday(); Serial.println(RTC_GetDate(RTCC_DATE_WORLD)); }
//Сохраняет новые данные. Сначала в буфер. Потом на картчку. void save_value(char Axis, float Filtered, float a, float b){ RTC_TimeTypeDef RTC_Time; RTC_DateTypeDef RTC_Date; //Получаем текущие время и дату RTC_GetTime(RTC_Format_BIN, &RTC_Time); RTC_GetDate(RTC_Format_BIN, &RTC_Date); //milliseconds //Здесь миллисекунды char buff[256]; //Куда сохраним сторку + \0 static long rec_num; rec_num++; //Формируем строку с записью. int slen = sprintf(buff, "%0.6d %0.2d-%0.2d-%0.2d %0.2d:%0.2d:%0.2d.%0.3d %c %0.3f %0.3f %0.3f\r\n", rec_num, RTC_Date.RTC_Year, RTC_Date.RTC_Month, RTC_Date.RTC_Date, RTC_Time.RTC_Hours, RTC_Time.RTC_Minutes, RTC_Time.RTC_Seconds, milliseconds, Axis, Filtered, a, b); //Форматирование строки //Если буффер уже не вместит новые данные, подменяем буффер. //Буффер в памяти сделан для того, чтобы можно было отключать SD-карточу и не тратить энергию. if (strlen(mem) + slen+1 >= SD_WRITE_BUFFER) { if (mem != &SaveBuff1[0]){ mem = &SaveBuff1[0]; sd = &SaveBuff2[0]; } else { mem = &SaveBuff2[0]; sd = &SaveBuff1[0]; } memset (mem, (char)'\0', SD_WRITE_BUFFER); } //Добавим во временный буфер strcat(mem, buff); //Проверка необходимости переноса данных на карточку во избежание переполнения //ФИФО вызывается из main чтобы не задерживать прерывание //Но при отправке файлов он функция записи на SD вызывается слишком редко! }
static void query_date(unsigned int *d, unsigned int *m, unsigned int *y) { #ifdef REALBUILD unsigned char day, month, dow; unsigned short year; RTC_GetDate( &year, &month, &day, &dow ); *y = year; *m = month; *d = day; #else time_t now = time(NULL); struct tm *dt = localtime(&now); *y = dt->tm_year + 1900; *m = dt->tm_mon + 1; *d = dt->tm_mday; #endif }
void RTC_INIT0(void) { RTC_InitTypeDef RTC_InitStructure; RTC_DateTypeDef RTC_DateStructure; RTC_TimeTypeDef RTC_TimeStructure; uint8_t i =0; RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); RCC_LSEConfig( RCC_LSE_ON ); //使用外部振荡源 PWR_BackupAccessCmd(ENABLE); RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); RCC_RTCCLKCmd(ENABLE); // while (RCC_GetFlagStatus (RCC_FLAG_LSERDY )== RESET ); //直到振荡源准备好 RTC_WriteProtectionCmd(DISABLE); RTC_EnterInitMode(); RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24; RTC_InitStructure.RTC_AsynchPrediv = 0x7E; RTC_InitStructure.RTC_SynchPrediv = 0xFF; RTC_Init(&RTC_InitStructure); RTC_WaitForSynchro(); //等待RTC时钟同步 if(i) { RTC_TimeStructure.RTC_Seconds = 0; RTC_TimeStructure.RTC_Minutes = 58; RTC_TimeStructure.RTC_Hours = 03; RTC_TimeStructure.RTC_H12 = RTC_H12_PM; RTC_SetTime(RTC_Format_BCD,&RTC_TimeStructure); RTC_DateStructure.RTC_Date = 22; RTC_DateStructure.RTC_Month = 9; RTC_DateStructure.RTC_WeekDay= RTC_Weekday_Sunday; RTC_DateStructure.RTC_Year = 13; RTC_SetDate(RTC_Format_BCD,&RTC_DateStructure); } RTC_GetTime(RTC_Format_BCD,&RTC_TimeStructure); RTC_GetDate(RTC_Format_BCD,&RTC_DateStructure); }
static init_RTC() { RTC_InitTypeDef RTC_InitStruct ; RTC_TimeTypeDef RTC_Time ; RTC_DateTypeDef RTC_Date ; /* Enable the PWR clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); /* Allow access to RTC */ PWR_BackupAccessCmd(ENABLE); /***Configures the External Low Speed oscillator (LSE)****/ RCC_LSEConfig(RCC_LSE_ON); /* Wait till LSE is ready */ while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) { } /* Select the RTC Clock Source */ RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); /* Enable the RTC Clock */ RCC_RTCCLKCmd(ENABLE); /* Wait for RTC APB registers synchronisation */ RTC_WaitForSynchro(); /* Calendar Configuration with LSI supposed at 32KHz */ RTC_InitStruct.RTC_AsynchPrediv = 0x7F; RTC_InitStruct.RTC_SynchPrediv = 0xFF; RTC_InitStruct.RTC_HourFormat = RTC_HourFormat_24; RTC_Init(&RTC_InitStruct); RTC_GetTime(RTC_Format_BIN, &RTC_Time) ; RTC_GetDate(RTC_Format_BIN, &RTC_Date) ; }
//interupt and rtc test OK! void rtc_init(void) { RTC_DateTypeDef RTC_DateStruct_set,RTC_DateStruct_get; RTC_TimeTypeDef RTC_TimeStruct_set,RTC_TimeStruct_get; RTC_Configuration(); RTC_TimeStruct_set.RTC_H12 = RTC_H12_AM; RTC_TimeStruct_set.RTC_Hours = 10; RTC_TimeStruct_set.RTC_Minutes = 45; RTC_TimeStruct_set.RTC_Seconds = 0; RTC_DateStruct_set.RTC_Date = 16; RTC_DateStruct_set.RTC_Month = RTC_Month_July; RTC_DateStruct_set.RTC_WeekDay = RTC_Weekday_Wednesday; RTC_DateStruct_set.RTC_Year = 14; RTC_SetTime(RTC_Format_BCD, &RTC_TimeStruct_set); RTC_SetDate(RTC_Format_BCD, &RTC_DateStruct_set); RTC_GetTime(RTC_Format_BCD, &RTC_TimeStruct_get); RTC_GetDate(RTC_Format_BCD, &RTC_DateStruct_get); }
platform_result_t platform_rtc_get_time( platform_rtc_time_t* time ) { RTC_TimeTypeDef rtc_time; RTC_DateTypeDef rtc_date; wiced_assert( "bad argument", time != NULL ); /* save current rtc time */ RTC_GetTime( RTC_Format_BIN, &rtc_time ); RTC_GetDate( RTC_Format_BIN, &rtc_date ); time->hr = rtc_time.RTC_Hours; time->min = rtc_time.RTC_Minutes; time->sec = rtc_time.RTC_Seconds; time->date = rtc_date.RTC_Date; time->month = rtc_date.RTC_Month; time->year = rtc_date.RTC_Year; time->weekday = rtc_date.RTC_WeekDay; return PLATFORM_SUCCESS; }
/** * @brief Time main task * @param pvParameters : task parameters * @retval None */ static void Time_Task(void * pvParameters) { static uint8_t TempStr[25]; RTC_TimeTypeDef RTC_TimeStructure; RTC_DateTypeDef RTC_DateStructure; uint8_t sec, min, hour, day, month; uint16_t year; while(1) { RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure); sec = RTC_TimeStructure.RTC_Seconds; min = RTC_TimeStructure.RTC_Minutes; hour = RTC_TimeStructure.RTC_Hours; RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure); sprintf((char *)TempStr, "%02d:%02d:%02d", hour , min, sec); if(GL_HomePage->Page_ID == HOME_PAGE_ID) { /* ToDo: Create task to update bundle each 1s */ RefreshLabel (GL_HomePage, 30,TempStr); if(( hour == 0 ) && (min == 0) && (sec == 0)) { year = RTC_DateStructure.RTC_Year + 2000; month = RTC_DateStructure.RTC_Month; day = RTC_DateStructure.RTC_Date; sprintf((char *)TempStr, "%02d %s %04d", day , strMonth[month-1], year); RefreshLabel(GL_HomePage, 31 , TempStr); } } vTaskDelay(1000); } }
/* RTC Registers RTC_WeekDay 1=monday, 2=tuesday, ..., 7=sunday RTC_Month 1=january, 2=february, ..., 12=december RTC_Date day of the month 1-31 RTC_Year year 0-99 struct tm tm_sec seconds after the minute 0-61 tm_min minutes after the hour 0-59 tm_hour hours since midnight 0-23 tm_mday day of the month 1-31 tm_mon months since January 0-11 tm_year years since 1900 tm_wday days since Sunday 0-6 tm_yday days since January 1 0-365 tm_isdst Daylight Saving Time flag */ time_t rtc_read(void) { RTC_DateTypeDef dateStruct; RTC_TimeTypeDef timeStruct; struct tm timeinfo; // Read actual date and time RTC_GetTime(RTC_Format_BIN, &timeStruct); RTC_GetDate(RTC_Format_BIN, &dateStruct); // Setup a tm structure based on the RTC timeinfo.tm_wday = dateStruct.RTC_WeekDay; timeinfo.tm_mon = dateStruct.RTC_Month - 1; timeinfo.tm_mday = dateStruct.RTC_Date; timeinfo.tm_year = dateStruct.RTC_Year + 100; timeinfo.tm_hour = timeStruct.RTC_Hours; timeinfo.tm_min = timeStruct.RTC_Minutes; timeinfo.tm_sec = timeStruct.RTC_Seconds; // Convert to timestamp time_t t = mktime(&timeinfo); return t; }
//获取时间 char* get_time(void) { char time[100]={'\0'}; RTC_TimeTypeDef RTC_GetTimeStructure; RTC_DateTypeDef RTC_GetDateStructure; if (RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x32F1)//假如修改了,则再次进行配置 { RTC_Config(extrnal); set_time(0x15,0x12,0x28,0x14,0x50,0x01,0x01,RTC_H12_PM); //return "fail" } else {//没有修改,则直接继续 RTC_GetTime(RTC_Format_BIN, &RTC_GetTimeStructure); RTC_GetDate(RTC_Format_BIN, &RTC_GetDateStructure); //2015-11-10-10:18:33 sprintf(time,"20%d-%d-%d-%d:%d:%d",\ RTC_GetDateStructure.RTC_Year,RTC_GetDateStructure.RTC_Month,\ RTC_GetDateStructure.RTC_Date,RTC_GetTimeStructure.RTC_Hours,\ RTC_GetTimeStructure.RTC_Minutes,RTC_GetTimeStructure.RTC_Seconds); } return time; }
void bsp_RTCTimeGet(struct tm *tm) { unsigned int have_retried = 0; retry_get_time: RTC_GetTime(RTC_Format_BIN, &CurTime); RTC_GetDate(RTC_Format_BIN, &CurDate); tm->tm_sec = CurTime.RTC_Seconds; tm->tm_min = CurTime.RTC_Minutes; tm->tm_hour = CurTime.RTC_Hours; if (tm->tm_sec == 0 && !have_retried) { have_retried = 1; goto retry_get_time; } tm->tm_wday = CurDate.RTC_WeekDay; tm->tm_mday = CurDate.RTC_Date; tm->tm_mon = CurDate.RTC_Month; tm->tm_year = CurDate.RTC_Year + 2000; //15年+2000 }
time_t HAL_RTC_Get_UnixTime(void) { RTC_TimeTypeDef RTC_TimeStructure; RTC_DateTypeDef RTC_DateStructure; /* Get the current Time and Date */ RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure); RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure); struct tm calendar_time; /* Set calendar_time time struct values */ calendar_time.tm_hour = RTC_TimeStructure.RTC_Hours; calendar_time.tm_min = RTC_TimeStructure.RTC_Minutes; calendar_time.tm_sec = RTC_TimeStructure.RTC_Seconds; /* Set calendar_time date struct values */ calendar_time.tm_wday = RTC_DateStructure.RTC_WeekDay; calendar_time.tm_mday = RTC_DateStructure.RTC_Date; calendar_time.tm_mon = RTC_DateStructure.RTC_Month-1; calendar_time.tm_year = RTC_DateStructure.RTC_Year; return (time_t)mktime(&calendar_time); }
/** * @brief Display the main menu * @param None * @retval None */ void GL_ShowMainMenu(void) { uint8_t TempStr[25]; RTC_TimeTypeDef RTC_TimeStructure; RTC_DateTypeDef RTC_DateStructure; GL_PageControls_TypeDef *Icon , *LabelTime , *LabelDate, *LabelBkgnd; uint8_t sec, min, hour, day, month; uint16_t year; GL_Clear(White); GL_HomePage = malloc(sizeof(GL_Page_TypeDef)); Create_PageObj( GL_HomePage, HOME_PAGE_ID ); /* Add group icons */ Icon = NewIcon(2 , Group_Connectivity_icon, BF_XSIZE, BF_YSIZE ,GL_ShowConnectivityGroup ); AddPageControlObj(305, 40, Icon, GL_HomePage ); Icon = NewIcon(3 , Group_Multimedia_icon, BF_XSIZE, BF_YSIZE ,GL_ShowMultimediaGroup ); AddPageControlObj(305, 103, Icon, GL_HomePage ); Icon = NewIcon(4 , Group_System_icon, BF_XSIZE, BF_YSIZE ,GL_ShowUtilitiesGroup ); AddPageControlObj(305, 166, Icon, GL_HomePage ); Icon = NewIcon(32 , STLogo, 40, 22 ,MOD_NullFunc ); AddPageControlObj(240, 216, Icon, GL_HomePage ); LabelBkgnd = NewLabel(33, (uint8_t *)"",GL_HORIZONTAL,GL_FONT_SMALL,GL_Red, GL_FALSE); AddPageControlObj(195, 227, LabelBkgnd, GL_HomePage); /* add modules */ switch(GL_Group) { case CONNECTIVITY_GROUP : GL_ShowConnectivityGroup(); break; case MULTIMEDIA_GROUP : GL_ShowMultimediaGroup(); break; case UTILITIES_GROUP : GL_ShowUtilitiesGroup(); break; } GL_HomePage->CustomPreDraw = DrawBackgroundZone; /* time section */ /* Get info from RTC here */ RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure); sec = RTC_TimeStructure.RTC_Seconds; min = RTC_TimeStructure.RTC_Minutes; hour = RTC_TimeStructure.RTC_Hours; sprintf((char *)TempStr, "%02d:%02d:%02d", hour , min, sec); LabelTime = NewLabel(30,TempStr,GL_HORIZONTAL,GL_FONT_SMALL,0x1253, GL_FALSE); AddPageControlObj(60, 215, LabelTime, GL_HomePage); RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure); year = RTC_DateStructure.RTC_Year + 2000; month = RTC_DateStructure.RTC_Month; day = RTC_DateStructure.RTC_Date; sprintf((char *)TempStr, "%02d %s %04d", day , strMonth[month-1], year); LabelDate = NewLabel(31,TempStr,GL_HORIZONTAL,GL_FONT_SMALL,0x1253, GL_FALSE); AddPageControlObj(88, 227, LabelDate, GL_HomePage); RefreshPage(GL_HomePage); vTaskResume(Core_Time_Task_Handle); Global_Config.b.Force_Background_Refresh = 1; }
/* Send RTC Date value to hyperterminal */ void demo0(void) { /* Get RTC Date value */ Year = RTC_GetYear(); Month = RTC_GetMonth(); Date = RTC_GetDate(RTC_CLOCK_MODE); Day = RTC_GetDay(RTC_CLOCK_MODE); /* Set UART0 display */ /* Dispaly year */ RTC_Disp_YMD[0] = ' '; RTC_Disp_YMD[1] = (Year / 10U) + 0x30U; RTC_Disp_YMD[2] = (Year % 10U) + 0x30U; RTC_Disp_YMD[3] = '-'; /* Display month */ RTC_Disp_YMD[4] = (Month / 10U) + 0x30U; RTC_Disp_YMD[5] = (Month % 10U) + 0x30U; RTC_Disp_YMD[6] = '-'; /* Display date */ RTC_Disp_YMD[7] = (Date / 10U) + 0x30U; RTC_Disp_YMD[8] = (Date % 10U) + 0x30U; RTC_Disp_YMD[9] = ' '; RTC_Disp_YMD[10] = ' '; RTC_Disp_YMD[11] = ' '; /* Display day */ switch (Day) { case RTC_SUN: RTC_Disp_YMD[12] = 'S'; RTC_Disp_YMD[13] = 'U'; RTC_Disp_YMD[14] = 'N'; break; case RTC_MON: RTC_Disp_YMD[12] = 'M'; RTC_Disp_YMD[13] = 'O'; RTC_Disp_YMD[14] = 'N'; break; case RTC_TUE: RTC_Disp_YMD[12] = 'T'; RTC_Disp_YMD[13] = 'U'; RTC_Disp_YMD[14] = 'E'; break; case RTC_WED: RTC_Disp_YMD[12] = 'W'; RTC_Disp_YMD[13] = 'E'; RTC_Disp_YMD[14] = 'D'; break; case RTC_THU: RTC_Disp_YMD[12] = 'T'; RTC_Disp_YMD[13] = 'H'; RTC_Disp_YMD[14] = 'U'; break; case RTC_FRI: RTC_Disp_YMD[12] = 'F'; RTC_Disp_YMD[13] = 'R'; RTC_Disp_YMD[14] = 'I'; break; case RTC_SAT: RTC_Disp_YMD[12] = 'S'; RTC_Disp_YMD[13] = 'A'; RTC_Disp_YMD[14] = 'T'; break; default: /* Do nothing */ break; } RTC_Disp_YMD[15] = '\0'; UART_Print(UART, RTC_Disp_YMD); }
/** * @brief Start recording * @param None * @retval None */ static void RECORDER_Start (void) { GL_PageControls_TypeDef* item; uint8_t time[6]; RTC_TimeTypeDef RTC_TimeStructure; RTC_DateTypeDef RTC_DateStructure; /*Create file name */ if ( RTC_Error == 0) { RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure); RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure); sprintf((char *)RecFileName, "Rec_%02d%02d%d%02d%02d%02d.wav", RTC_DateStructure.RTC_Date, RTC_DateStructure.RTC_Month, RTC_DateStructure.RTC_Year + 2000, RTC_TimeStructure.RTC_Hours, RTC_TimeStructure.RTC_Minutes, RTC_TimeStructure.RTC_Seconds); } else { /* Wait until one RNG number is ready */ while(RNG_GetFlagStatus(RNG_FLAG_DRDY)== RESET) { } RecoveryRecorderCounter = RNG_GetRandomNumber() & 0x7FFFFFFF; sprintf((char *)RecFileName, "Rec_%014d.wav", (int)RecoveryRecorderCounter); } RECORDER_GetDefaultDirectory(); strcat ((char *)REC_DefaultPath,"/"); strcat((char *)REC_DefaultPath, (char *)RecFileName); RefreshLabel(RecordPage , REC_FILNAME_ID, (uint8_t *)" "); if (AudioRecorder_Open(REC_DefaultPath)) { memset (RecFileName, 0, sizeof(RecFileName)); RefreshLabel(RecordPage , REC_FILNAME_ID, (uint8_t *)"Error Open File !"); return; } else { RefreshLabel(RecordPage , REC_FILNAME_ID, RecFileName); } /* Graphical update */ DestroyPageControl (RecordPage, REC_STRT_ID); RefreshPageControl(RecordPage, REC_STRT_ID); DestroyPageControl (RecordPage, REC_PLAY_ID); RefreshPageControl(RecordPage, REC_PLAY_ID); DestroyPageControl (RecordPage, REC_PAUSE_ID); RefreshPageControl(RecordPage, REC_PAUSE_ID); item = NewIcon (REC_STOP_ID, rec_stop_icon, 40, 40, RECORDER_Stop); AddPageControlObj(170,135,item, RecordPage); RefreshPageControl(RecordPage, REC_STOP_ID); item = NewIcon (REC_PAUSE_ID, rec_pause_icon, 40, 40, RECORDER_Pause); AddPageControlObj(110,135,item, RecordPage); RefreshPageControl(RecordPage, REC_PAUSE_ID); item = NewIcon (REC_CANCEL_ID, rec_cancel_icon, 40, 40, RECORDER_Cancel); AddPageControlObj(50,135,item, RecordPage); RefreshPageControl(RecordPage, REC_CANCEL_ID); sprintf((char *)time, "%02d:%02d", 0, 0); RefreshLabel(RecordPage, REC_TIME_ID, time); REC_GL_State = REC_GL_RECORDING; Recorder_UsedStorage = REC_DefaultPath[0]; AudioRecorder_Start(); }
static void RtcStartWakeUpAlarm( uint32_t timeoutValue ) { uint16_t rtcSeconds = 0; uint16_t rtcMinutes = 0; uint16_t rtcHours = 0; uint16_t rtcDays = 0; uint8_t rtcAlarmSeconds = 0; uint8_t rtcAlarmMinutes = 0; uint8_t rtcAlarmHours = 0; uint16_t rtcAlarmDays = 0; RTC_AlarmTypeDef RTC_AlarmStructure; RTC_TimeTypeDef RTC_TimeStruct; RTC_DateTypeDef RTC_DateStruct; RtcClearStatus( ); RtcTimerContext = RtcGetCalendarValue( ); RTC_GetTime( RTC_Format_BIN, &RTC_TimeStruct ); RTC_GetDate( RTC_Format_BIN, &RTC_DateStruct ); timeoutValue = timeoutValue / RTC_ALARM_TIME_BASE; if( timeoutValue > 2160000 ) // 25 "days" in tick { // drastically reduce the computation time rtcAlarmSeconds = RTC_TimeStruct.RTC_Seconds; rtcAlarmMinutes = RTC_TimeStruct.RTC_Minutes; rtcAlarmHours = RTC_TimeStruct.RTC_Hours; rtcAlarmDays = 25 + RTC_DateStruct.RTC_Date; // simply add 25 days to current date and time if( ( RTC_DateStruct.RTC_Year == 0 ) || ( RTC_DateStruct.RTC_Year % 4 == 0 ) ) { if( rtcAlarmDays > DaysInMonthLeapYear[ RTC_DateStruct.RTC_Month - 1 ] ) { rtcAlarmDays = rtcAlarmDays % DaysInMonthLeapYear[ RTC_DateStruct.RTC_Month - 1]; } } else { if( rtcAlarmDays > DaysInMonth[ RTC_DateStruct.RTC_Month - 1 ] ) { rtcAlarmDays = rtcAlarmDays % DaysInMonth[ RTC_DateStruct.RTC_Month - 1]; } } } else { rtcSeconds = ( timeoutValue % SecondsInMinute ) + RTC_TimeStruct.RTC_Seconds; rtcMinutes = ( ( timeoutValue / SecondsInMinute ) % SecondsInMinute ) + RTC_TimeStruct.RTC_Minutes; rtcHours = ( ( timeoutValue / SecondsInHour ) % HoursInDay ) + RTC_TimeStruct.RTC_Hours; rtcDays = ( timeoutValue / SecondsInDay ) + RTC_DateStruct.RTC_Date; rtcAlarmSeconds = ( rtcSeconds ) % 60; rtcAlarmMinutes = ( ( rtcSeconds / 60 ) + rtcMinutes ) % 60; rtcAlarmHours = ( ( ( ( rtcSeconds / 60 ) + rtcMinutes ) / 60 ) + rtcHours ) % 24; rtcAlarmDays = ( ( ( ( ( rtcSeconds / 60 ) + rtcMinutes ) / 60 ) + rtcHours ) / 24 ) + rtcDays; if( ( RTC_DateStruct.RTC_Year == 0 ) || ( RTC_DateStruct.RTC_Year % 4 == 0 ) ) { if( rtcAlarmDays > DaysInMonthLeapYear[ RTC_DateStruct.RTC_Month - 1 ] ) { rtcAlarmDays = rtcAlarmDays % DaysInMonthLeapYear[ RTC_DateStruct.RTC_Month - 1 ]; } } else { if( rtcAlarmDays > DaysInMonth[ RTC_DateStruct.RTC_Month - 1 ] ) { rtcAlarmDays = rtcAlarmDays % DaysInMonth[ RTC_DateStruct.RTC_Month - 1 ]; } } } RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds = rtcAlarmSeconds; RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes = rtcAlarmMinutes; RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours = rtcAlarmHours; RTC_AlarmStructure.RTC_AlarmDateWeekDay = ( uint8_t )rtcAlarmDays; RTC_AlarmStructure.RTC_AlarmTime.RTC_H12 = RTC_TimeStruct.RTC_H12; RTC_AlarmStructure.RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date; RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_None; RTC_SetAlarm( RTC_Format_BIN, RTC_Alarm_A, &RTC_AlarmStructure ); /* Wait for RTC APB registers synchronisation */ RTC_WaitForSynchro( ); /* Enable RTC Alarm A Interrupt */ RTC_ITConfig( RTC_IT_ALRA, ENABLE ); /* Enable the Alarm A */ RTC_AlarmCmd( RTC_Alarm_A, ENABLE ); }
/** * @brief Main program. * @param None * @retval None */ int main(void) { /*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32f30x.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f30x.c file */ /* LEDs Init */ STM_EVAL_LEDInit(LED3); STM_EVAL_LEDInit(LED4); STM_EVAL_LEDInit(LED5); STM_EVAL_LEDInit(LED6); STM_EVAL_LEDInit(LED7); STM_EVAL_LEDInit(LED8); STM_EVAL_LEDInit(LED9); STM_EVAL_LEDInit(LED10); /* Enable PWR APB1 Clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); /* Allow access to Backup */ PWR_BackupAccessCmd(ENABLE); /* Reset RTC Domain */ RCC_BackupResetCmd(ENABLE); RCC_BackupResetCmd(DISABLE); /* Allow access to RTC */ PWR_BackupAccessCmd(ENABLE); /* The RTC Clock may varies due to LSI frequency dispersion */ /* Enable the LSI OSC */ RCC_LSICmd(ENABLE); /* Wait till LSI is ready */ while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) { } /* Select the RTC Clock Source */ RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); /* Enable the RTC Clock */ RCC_RTCCLKCmd(ENABLE); /* Wait for RTC APB registers synchronisation */ RTC_WaitForSynchro(); /* RTC prescaler configuration */ RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24; RTC_InitStructure.RTC_AsynchPrediv = 88; RTC_InitStructure.RTC_SynchPrediv = 470; RTC_Init(&RTC_InitStructure); /* Set the alarm 01h:00min:04s */ RTC_AlarmStructure.RTC_AlarmTime.RTC_H12 = RTC_H12_AM; RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours = 0x01; RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes = 0x00; RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds = 0x04; RTC_AlarmStructure.RTC_AlarmDateWeekDay = 0x31; RTC_AlarmStructure.RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date; /* Alarm mask hour, min and second:default Alarm generation each 1s */ RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_All; RTC_SetAlarm(RTC_Format_BCD, RTC_Alarm_A, &RTC_AlarmStructure); /* Enable RTC Alarm A Interrupt */ RTC_ITConfig(RTC_IT_ALRA, ENABLE); /* Enable the alarm */ RTC_AlarmCmd(RTC_Alarm_A, ENABLE); /* Set the date: Wednesday August 15th 2012 */ RTC_DateStructure.RTC_Year = 12; RTC_DateStructure.RTC_Month = RTC_Month_September; RTC_DateStructure.RTC_Date = 11; RTC_DateStructure.RTC_WeekDay = RTC_Weekday_Tuesday; RTC_SetDate(RTC_Format_BCD, &RTC_DateStructure); /* Set the time to 01h 00mn 00s AM */ RTC_TimeStructure.RTC_H12 = RTC_H12_AM; RTC_TimeStructure.RTC_Hours = 0x01; RTC_TimeStructure.RTC_Minutes = 0x00; RTC_TimeStructure.RTC_Seconds = 0x00; RTC_SetTime(RTC_Format_BCD, &RTC_TimeStructure); RTC_ClearFlag(RTC_FLAG_ALRAF); /* RTC Alarm A Interrupt Configuration */ /* EXTI configuration */ EXTI_ClearITPendingBit(EXTI_Line17); EXTI_InitStructure.EXTI_Line = EXTI_Line17; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /* Enable the RTC Alarm Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = RTC_Alarm_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /* Infinite loop */ while (1) { /* Get the RTC current Time */ RTC_GetTime(RTC_Format_BCD, &RTC_TimeStructure); /* Get the RTC current Date */ RTC_GetDate(RTC_Format_BCD, &RTC_DateStructure); /* Display time Format : hh:mm:ss */ // sprintf((char*)showtime,"%0.2d:%0.2d:%0.2d",RTC_TimeStructure.RTC_Hours, RTC_TimeStructure.RTC_Minutes, RTC_TimeStructure.RTC_Seconds); /* Display date Format : mm-dd-yy */ //sprintf((char*)showdate,"%0.2d-%0.2d-%0.2d",RTC_DateStructure.RTC_Month, RTC_DateStructure.RTC_Date, 2000 + RTC_DateStructure.RTC_Year); } }
/******************************************************************************* * Function Name: WriteSkierResult ******************************************************************************** * * Summary: * Start log system(mount fat) * * Parametrs: * *data - pointer from result skiers * Return: * resultF - result mount FAT system (from enum FRESULT) * *******************************************************************************/ uint32_t WriteSkierResult(skierDB_El *data) { uint8 resultF; uint count; uint32_t nameYear; uint32_t nameMonth; uint32_t nameDay; uint32_t date; /*get date from RTC*/ date = RTC_GetDate(); nameYear = RTC_GetYear(date)-2000; nameMonth = RTC_GetMonth(date); nameDay = RTC_GetDay(date); /*Construct name of file in format dd_mm_yyyy*/ sprintf(nameFile,"%02d_%02d_%d.txt",nameDay,nameMonth,nameYear); createFlag = 0; resultF = f_open(&fileO, nameFile, FA_WRITE | FA_OPEN_APPEND, &createFlag); if(resultF == RES_OK) { /*Construct save data*/ char start[LEN_DATA]; char finish[LEN_DATA]; char result[LEN_DATA]; char writeData[LEN_DATA_ALL]; RTC_DATE_TIME time; /*read unix time*/ RTC_UnixToDateTime(&time, data->unixStartSkier, RTC_24_HOURS_FORMAT); sprintf(start, "\t\t%02lu:%02lu:%02lu:%03u",RTC_GetHours(time.time),RTC_GetMinutes(time.time),RTC_GetSecond(time.time),data->millsStartSkier); RTC_UnixToDateTime(&time, data->unixFinishSkier, RTC_24_HOURS_FORMAT); sprintf(finish, "\t\t%02lu:%02lu:%02lu:%03u",RTC_GetHours(time.time),RTC_GetMinutes(time.time),RTC_GetSecond(time.time),data->millsFinishSkier); sprintf(result, "\t\t%02lu:%03u",(uint32)data->secondsWay,data->millsWay); sprintf(writeData,"\n\r%d%s%s%s\n\r",position, start, finish, result); if((position == 1) || (createFlag == 1)) { /*write new "cap"*/ uint32_t tmpTime ; tmpTime = RTC_GetTime(); f_printf(&fileO,"\r\nSystem started %02d:%02d:%02d\n\r", RTC_GetHours(tmpTime),RTC_GetMinutes(tmpTime),RTC_GetSecond(tmpTime)); f_printf(&fileO,"--------------------------------------------------\n\r"); f_printf(&fileO,"NUM\t\tSTART\t\t\tFINISH\t\t\tRESULT\n\r"); f_printf(&fileO,"--------------------------------------------------\n\r"); } /*write data*/ resultF = f_write(&fileO, writeData, strlen(writeData),&count); resultF = f_close(&fileO); position++; } return resultF; }
TimerTime_t RtcGetCalendarValue( void ) { TimerTime_t calendarValue = 0; uint8_t i = 0; RTC_TimeTypeDef RTC_TimeStruct; RTC_DateTypeDef RTC_DateStruct; RTC_GetTime( RTC_Format_BIN, &RTC_TimeStruct ); RTC_GetDate( RTC_Format_BIN, &RTC_DateStruct ); RTC_WaitForSynchro( ); if( ( PreviousYear == 99 ) && ( RTC_DateStruct.RTC_Year == 0 ) ) { Century++; } PreviousYear = RTC_DateStruct.RTC_Year; // century for( i = 0; i < Century; i++ ) { calendarValue += ( TimerTime_t )( DaysInCentury * SecondsInDay ); } // years for( i = 0; i < RTC_DateStruct.RTC_Year; i++ ) { if( ( i == 0 ) || ( i % 4 == 0 ) ) { calendarValue += DaysInLeapYear * SecondsInDay; } else { calendarValue += DaysInYear * SecondsInDay; } } // months if( ( RTC_DateStruct.RTC_Year == 0 ) || ( RTC_DateStruct.RTC_Year % 4 == 0 ) ) { for( i = 0; i < ( RTC_DateStruct.RTC_Month - 1 ); i++ ) { calendarValue += DaysInMonthLeapYear[i] * SecondsInDay; } } else { for( i = 0; i < ( RTC_DateStruct.RTC_Month - 1 ); i++ ) { calendarValue += DaysInMonth[i] * SecondsInDay; } } // days calendarValue += ( ( uint32_t )RTC_TimeStruct.RTC_Seconds + ( ( uint32_t )RTC_TimeStruct.RTC_Minutes * SecondsInMinute ) + ( ( uint32_t )RTC_TimeStruct.RTC_Hours * SecondsInHour ) + ( ( uint32_t )( RTC_DateStruct.RTC_Date * SecondsInDay ) ) ); return( calendarValue ); }
void rtc_getDate(RTC_DateTypeDef *date){ RTC_GetDate(RTC_Format_BIN, date); }
void RTCDue::getDate (int *day_of_week, int *day, int *month, uint16_t *year) { RTC_GetDate(RTC, (uint16_t*)year, (uint8_t*)month, (uint8_t*)day, (uint8_t*)day_of_week); --*day_of_week; }
int main(void) { char s[] = "1442936700,0,1,4,#2346W,3,#0800O#1900C#0900O#1800C"; // for str_processing test RCC_ClocksTypeDef RCC_Clocks; /* SysTick end of count event each 10ms */ RCC_GetClocksFreq(&RCC_Clocks); SysTick_Config(RCC_Clocks.HCLK_Frequency / 100); RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG, ENABLE); RNG_Cmd(ENABLE); /* Initialize the timer for dht11 */ tim_init(TIM2); /* Initialize the SRAM ****************************************************/ PSRAM_Init(); /* Initialize the LCD *****************************************************/ LCD_Init(); LCD_LOG_Init(); LCD_LOG_SetHeader((uint8_t*)" Ethernet test"); LCD_LOG_SetFooter ((uint8_t*)" localtime: "); /* Add your application code here */ /* Configure ethernet (GPIOs, clocks, MAC, DMA) */ ETH_BSP_Config(); /* Initilaize the LwIP stack */ LwIP_Init(); schedule_init(&schedule_got,schedule_string); // schedule string store in schedule_string DNS_Init(); //while(!schedule_got); // wait until string got LCD_DisplayStringLine(Line2, (uint8_t*)schedule_string); LCD_DisplayStringLine(Line3, (uint8_t*)"0"); /* Main Loop */ //process ste str form internet Str_Split(s, Init_time); // s is temp string RTC_Config(); Time_Date_Setting(Init_time->year, Init_time->mon, Init_time->day, Init_time->hour +3, Init_time->min, Init_time->sec); while (1) { uint8_t year, mon, day; uint8_t hour, min, sec; RTC_TimeTypeDef RTC_TimeStruct_main; RTC_DateTypeDef RTC_DateStruct_main; RTC_GetDate(RTC_Format_BIN, &RTC_DateStruct_main); RTC_GetTime(RTC_Format_BIN, &RTC_TimeStruct_main); year = RTC_DateStruct_main.RTC_Year; mon = RTC_DateStruct_main.RTC_Month; day = RTC_DateStruct_main.RTC_Date; hour = RTC_TimeStruct_main.RTC_Hours; min = RTC_TimeStruct_main.RTC_Minutes; sec = RTC_TimeStruct_main.RTC_Seconds; //detect whether it is time to turn on Motor and LED, then execute it. Soak(day, hour, min ); Water(day, hour, min, sec); Light(mon, day, hour, min); //detect over /* check if any packet received */ if (ETH_CheckFrameReceived()) { /* process received ethernet packet */ LwIP_Pkt_Handle(); } /* handle periodic timers for LwIP */ LwIP_Periodic_Handle(LocalTime); } }
u8 CopySelectJob(const TSA_JOB_MGR_MENU SelJob) { u16 SelectionIndex = (u16)(SelJob - JM_SEL1); u16 SelJobIndex = (PAGE_JOB_COUNT * (gJobPageNo - 1) + SelectionIndex) + 1; // 복사 가능한지 체크 if(SelJobIndex < 1 || SelJobIndex > gxFileCount) return FALSE; // 현재 시각 RTC_DateTypeDef RTC_DateStruct; RTC_TimeTypeDef RTC_TimeStruct; RTC_GetDate(RTC_Format_BIN, &RTC_DateStruct); RTC_GetTime(RTC_Format_BIN, &RTC_TimeStruct); // copy & 재배치 JOB_INFO srcInfo; STEP_MANAGER stepMgr; // 초기화 InitStepMgr(&stepMgr); /* Insert logic for(u16 nCount=gxFileCount; nCount>=SelJobIndex; nCount--) { ReadJobData(&srcInfo, &stepMgr, nCount); srcInfo.JobNo++; SaveJobData(srcInfo, &stepMgr, srcInfo.JobNo - 1); } // Page no calcuration gEditableJob = DISABLE; gPreJobMgrMenu = JM_NONE; if( SelJob == JM_SEL12 ) { gJobPageNo++; gJobMgrMenu = JM_SEL1; } else gJobMgrMenu = (TSA_JOB_MGR_MENU)(SelJob + 1); */ ReadJobData(&srcInfo, &stepMgr, SelJobIndex); srcInfo.JobNo = gxFileCount + 1; SaveJobData(srcInfo, &stepMgr, srcInfo.JobNo - 1); // Page no calcuration gEditableJob = DISABLE; gPreJobMgrMenu = JM_NONE; gJobPageNo = (gxFileCount / PAGE_JOB_COUNT) + 1; gJobMgrMenu = (TSA_JOB_MGR_MENU)(JM_SEL1 + gxFileCount % PAGE_JOB_COUNT); if(gJobMgrMenu >= JM_SEL1 && gJobMgrMenu <= JM_SEL12) gIsJobNotPlaySound = TRUE; // List reset RefreashJobList(gJobPageNo); // 리스트 초기화 DrawImage(PT_SEL_START_X, PT_SEL_START_Y, NM_BG_JOB_LIST); DisplayJobList(); return TRUE; }
/** * @brief Callback routine of the dialog * @param pMsg: pointer to a data structure of type WM_MESSAGE * @retval None */ static void _cbDialog(WM_MESSAGE * pMsg) { WM_HWIN hItem; int Id, NCode; RTC_TimeTypeDef RTC_TimeStructure; RTC_DateTypeDef RTC_DateStructure; uint8_t sec, min, hour, day, month; uint16_t year; uint8_t offset, max; static uint8_t TempStr[50]; switch (pMsg->MsgId) { case WM_PAINT: break; case WM_INIT_DIALOG: RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure); sec = RTC_TimeStructure.RTC_Seconds; min = RTC_TimeStructure.RTC_Minutes; hour = RTC_TimeStructure.RTC_Hours; RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure); year = RTC_DateStructure.RTC_Year + 2000; month = RTC_DateStructure.RTC_Month; day = RTC_DateStructure.RTC_Date; /* Initialization of 'System Information' */ hItem = pMsg->hWin; FRAMEWIN_SetFont(hItem, GUI_FONT_13B_ASCII); /* Initialization of 'Close' */ hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_CLOSE_CLOCK); BUTTON_SetFont(hItem, GUI_FONT_13B_ASCII); /* Set date in text mode */ hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_DATE); TEXT_SetFont(hItem, GUI_FONT_13B_1); TEXT_SetTextColor(hItem, 0x00804000); WM_CreateWindowAsChild(80, 45, 354, 23, pMsg->hWin, WM_CF_SHOW | WM_CF_HASTRANS, _cbClockWindow , 0); hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_CLOCK); TEXT_SetFont(hItem, &GUI_FontBauhaus9332); TEXT_SetTextColor(hItem, 0x00804000); /* Set Init values */ hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_DATE); /* Write date and clock */ sprintf((char *)TempStr, "%02d, %s, %04d",day , strMonth[month-1], year); TEXT_SetText(hItem, (char *)TempStr); hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_CLOCK); sprintf((char *)TempStr, "%02d:%02d:%02d",hour , min, sec); TEXT_SetText(hItem, (char *)TempStr); GetDateOffset (year, month, &offset , &max); CALENDAR_SetDefaultSize(CALENDAR_SI_HEADER, 25 ); CALENDAR_SetDefaultSize(CALENDAR_SI_CELL_X, 30 ); CALENDAR_SetDefaultSize(CALENDAR_SI_CELL_Y, 20 ); CALENDAR_SetDefaultFont(CALENDAR_FI_CONTENT,GUI_FONT_16B_1 ); CALENDAR_SetDefaultFont(CALENDAR_FI_HEADER, GUI_FONT_16B_1) ; CALENDAR_Create(pMsg->hWin, 15, 70, year, month, day, 2, ID_CALENDAR, WM_CF_SHOW); WM_InvalidateWindow(pMsg->hWin); break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); /* Id of widget */ NCode = pMsg->Data.v; /* Notification code */ switch (NCode) { case WM_NOTIFICATION_RELEASED: /* React only if released */ switch (Id) { case ID_BUTTON_CLOSE_CLOCK: GUI_EndDialog(pMsg->hWin, 0); break; case ID_BUTTON_SETTINGS_CLOCK: GUI_CreateDialogBox(_aDialogSettingsCreate, GUI_COUNTOF(_aDialogSettingsCreate), &_cbDialogSettings, pMsg->hWin, 0, 0); hNumPad = GUI_CreateDialogBox(_aDialogNumPad, GUI_COUNTOF(_aDialogNumPad), _cbDialogNumPad, WM_GetDesktopWindowEx(1), 0, 0); /* Create the numpad dialog */ WM_SetStayOnTop(hNumPad, 1); break; } break; case WM_NOTIFICATION_CHILD_DELETED: WM_NotifyParent(WM_GetParent(pMsg->hWin), 0x500); break; } break; default: WM_DefaultProc(pMsg); break; } }
/** * @brief Callback function of the Clock window * @param pMsg: pointer to a data structure of type WM_MESSAGE * @retval None */ static void _cbClockWindow(WM_MESSAGE * pMsg) { WM_HWIN hItem; static WM_HTIMER hTimerTime; RTC_TimeTypeDef RTC_TimeStructure; RTC_DateTypeDef RTC_DateStructure; uint8_t sec, min, hour, day, month; uint16_t year; static uint8_t TempStr[50]; static CALENDAR_DATE current_date; switch (pMsg->MsgId) { case WM_CREATE: RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure); current_date.Year = RTC_DateStructure.RTC_Year + 2000; current_date.Month = RTC_DateStructure.RTC_Month; current_date.Day = RTC_DateStructure.RTC_Date; /* Create timer */ hTimerTime = WM_CreateTimer(pMsg->hWin, 0, 1000, 0); break; case WM_TIMER: /* Write date and clock */ RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure); sec = RTC_TimeStructure.RTC_Seconds; min = RTC_TimeStructure.RTC_Minutes; hour = RTC_TimeStructure.RTC_Hours; RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure); year = RTC_DateStructure.RTC_Year + 2000; month = RTC_DateStructure.RTC_Month; day = RTC_DateStructure.RTC_Date; if((current_date.Day != day) ||(current_date.Month != month) ||(current_date.Year != year)) { current_date.Year = year = RTC_DateStructure.RTC_Year + 2000; current_date.Month = month = RTC_DateStructure.RTC_Month; current_date.Day = day = RTC_DateStructure.RTC_Date; hItem = WM_GetDialogItem(WM_GetParent(pMsg->hWin), ID_TEXT_DATE); sprintf((char *)TempStr, "%02d, %s, %04d",day , strMonth[month-1], year); TEXT_SetText(hItem, (char *)TempStr); hItem = WM_GetDialogItem(WM_GetParent(pMsg->hWin), ID_CALENDAR); CALENDAR_SetDate(hItem, ¤t_date); CALENDAR_SetSel(hItem, ¤t_date); WM_InvalidateWindow(hItem); } hItem = WM_GetDialogItem(WM_GetParent(pMsg->hWin), ID_TEXT_CLOCK); sprintf((char *)TempStr, "%02d:%02d:%02d",hour , min, sec); TEXT_SetText(hItem, (char *)TempStr); WM_InvalidateWindow(pMsg->hWin); WM_RestartTimer(pMsg->Data.v, 0); break; case WM_DELETE: WM_DeleteTimer(hTimerTime); break; default: WM_DefaultProc(pMsg); } }