/** * @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_stm32f0xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f0xx.c file */ RTC_TimeTypeDef RTC_TimeStruct; /* Initialize the LCD */ STM320518_LCD_Init(); /* Clear the LCD */ LCD_Clear(LCD_COLOR_WHITE); /* Set the LCD Back Color */ LCD_SetBackColor(Blue); /* Set the LCD Text Color */ LCD_SetTextColor(White); /* Displays MESSAGE1 on line 1 */ LCD_DisplayStringLine(LINE(0), (uint8_t *)MESSAGE1); /* Set the LCD Text Color */ LCD_SetTextColor(Red); /* Set the LCD Back Color */ LCD_SetBackColor(Red); LCD_DrawFullRect(31, 292,264,34); /* Set the LCD Back Color */ LCD_SetBackColor(White); LCD_DrawFullRect(33, 290 ,260,30); /* Configure the external interrupt "RIGHT" and "LEFT" buttons */ STM_EVAL_PBInit(BUTTON_RIGHT,BUTTON_MODE_EXTI); STM_EVAL_PBInit(BUTTON_LEFT,BUTTON_MODE_EXTI); /* Configure the RTC peripheral by selecting the clock source.*/ RTC_Config(); /* Configure the RTC tamper register : To Clear all the Backup data register */ RTC_TamperConfig(); /* Set the LCD Text, Back Colors and Text size */ LCD_SetTextColor(Black); LCD_SetBackColor(Cyan); LCD_SetFont(&Font12x12); LCD_DisplayStringLine(LINE(18), (uint8_t *)MESSAGE2); /* Set the LCD Back Color */ LCD_SetBackColor(Blue); LCD_SetTextColor(White); LCD_DisplayStringLine(LINE(19), (uint8_t *)MESSAGE3); /* Set text size */ LCD_SetFont(&Font16x24); /* Set the LCD Text Color */ LCD_SetTextColor(Blue); /* Initialize time Stucture */ RTC_TimeStructInit(&RTC_TimeStruct); /* Infinite loop */ while (1) { /* Set the LCD Back Color and text size */ LCD_SetFont(&Font16x24); LCD_SetBackColor(White); /* Check on the event 'start' */ if(StartEvent != 0x0) { /* Get the RTC sub second fraction */ SecondFraction = (((256 - (uint32_t)RTC_GetSubSecond()) * 1000) / 256); /* Get the Curent time */ RTC_GetTime(RTC_Format_BIN, &RTC_TimeStruct); /* Refresh : Display the curent time and the sub second on the LCD */ RTC_Time_Display(37, Black , RTC_Get_Time(SecondFraction , &RTC_TimeStruct)); } else { /* Re-initialize the Display time on the LCD */ RTC_Time_InitDisplay(); } } }
/** * @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_stm32f4xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f4xx.c file */ /* Initialize the LCD */ STM324xG_LCD_Init(); /* Clear the LCD */ LCD_Clear(White); /* Set the LCD Back Color */ LCD_SetBackColor(Blue); /* Set the LCD Text Color */ LCD_SetTextColor(White); /* Displays MESSAGE1 on line 1 */ LCD_DisplayStringLine(LINE(0), (uint8_t *)MESSAGE1); /* RTC configuration */ RTC_Config(); /* Set the LCD Text Color */ LCD_SetTextColor(Red); /* Set the LCD Back Color */ LCD_SetBackColor(White); /* Draw rectangle on the LCD */ LCD_DrawRect(43, 300, 30, 260); /* Configure the external interrupt "WAKEUP" and "KEY" buttons */ STM_EVAL_PBInit(BUTTON_WAKEUP,BUTTON_MODE_EXTI); STM_EVAL_PBInit(BUTTON_KEY,BUTTON_MODE_EXTI); /* Configure the RTC tamper register */ RTC_TamperConfig(); /* Set the LCD Text Color */ LCD_SetTextColor(Blue); /* Displays MESSAGE2 on line 5 */ LCD_DisplayStringLine(LINE(5), (uint8_t *)MESSAGE2); /* Infinite loop */ while (1) { /* Set The LCD font size */ LCD_SetFont(&Font16x24); /* Set the LCD Back Color */ LCD_SetBackColor(White); /* Check on the event 'start'*/ if(Startevent != 0x0) { /* Get the RTC sub second fraction */ Secondfraction = 1000 - ((uint32_t)((uint32_t)RTC_GetSubSecond() * 1000) / (uint32_t)0x3FF); } else { /* Idle */ Secondfraction =0x0; } /* Get the Curent time */ RTC_GetTime(RTC_Format_BCD, &RTC_TimeStruct); /* Display the curent time and the sub second on the LCD */ RTC_Time_display(Line2, Black , RTC_Get_Time(Secondfraction , &RTC_TimeStruct)); } }
/** * @brief Main program * @param None * @retval None */ int main(void) { uint32_t index = 0; /* STM32F4xx HAL library initialization: - Configure the Flash prefetch, instruction and Data caches - Configure the Systick to generate an interrupt each 1 msec - Set NVIC Group Priority to 4 - Global MSP (MCU Support Package) initialization */ HAL_Init(); /* Configure LED1, LED2, LED3 and LED4 */ BSP_LED_Init(LED1); BSP_LED_Init(LED2); BSP_LED_Init(LED3); BSP_LED_Init(LED4); /* Configure the system clock to 168 MHz */ SystemClock_Config(); RtcHandle.Instance = RTC; /*##-1- Configure the RTC peripheral #######################################*/ /* Configure RTC prescaler and RTC data registers */ /* RTC configured as follow: - Hour Format = Format 24 - Asynch Prediv = Value according to source clock - Synch Prediv = Value according to source clock - OutPut = Output Disable - OutPutPolarity = High Polarity - OutPutType = Open Drain */ RtcHandle.Init.HourFormat = RTC_HOURFORMAT_24; RtcHandle.Init.AsynchPrediv = RTC_ASYNCH_PREDIV; RtcHandle.Init.SynchPrediv = RTC_SYNCH_PREDIV; RtcHandle.Init.OutPut = RTC_OUTPUT_DISABLE; RtcHandle.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; RtcHandle.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; if(HAL_RTC_Init(&RtcHandle) != HAL_OK) { /* Initialization Error */ Error_Handler(); } /* Clear the Tamper Flag */ __HAL_RTC_TAMPER_CLEAR_FLAG(&RtcHandle,RTC_FLAG_TAMP1F); /*##-2- Configure RTC Tamper ###############################################*/ /* Configure RTC Tamper */ RTC_TamperConfig(); /*##-3- Write Data on the Back Up registers ################################*/ for(index = 0; index < BACKUP_COUNT; index++) { HAL_RTCEx_BKUPWrite(&RtcHandle,aBKPDataReg[index], 0xDF59 + (index * 0x5A)); } /*##-4- Check Data is stored on the Back Up registers ######################*/ for(index = 0; index < BACKUP_COUNT; index++) { if(HAL_RTCEx_BKUPRead(&RtcHandle, aBKPDataReg[index]) != (0xDF59 + (index * 0x5A))) { Error_Handler(); } } /* Turn LED2 on */ BSP_LED_On(LED2); /*##-5- Wait for the tamper button is pressed ##############################*/ while(TamperStatus != SET); /*##-6- Deactivate the tamper ##############################################*/ HAL_RTCEx_DeactivateTamper(&RtcHandle, RTC_TAMPER_1); /*##-7- Check Data is cleared on the Back Up registers #####################*/ for(index = 0; index < BACKUP_COUNT; index++) { if(HAL_RTCEx_BKUPRead(&RtcHandle, aBKPDataReg[index]) != 0x00) { Error_Handler(); } } /* Infinite loop */ while (1) { /* Toggle LED4 */ BSP_LED_Toggle(LED4); /* Delay */ HAL_Delay(100); } }
/** * @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_stm32f0xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f0xx.c file */ RTC_TimeTypeDef RTC_TimeStruct; RTC_TimeTypeDef RTC_TimeStructureInit; RTC_TimeTypeDef RTC_StampTimeStruct; /* Configure the external interrupt "RIGHT" and "LEFT" buttons */ STM_EVAL_PBInit(BUTTON_RIGHT,BUTTON_MODE_EXTI); STM_EVAL_PBInit(BUTTON_LEFT,BUTTON_MODE_EXTI); /* Configure the RTC peripheral by selecting the clock source.*/ RTC_Config(); /* LCD Display init */ Display_Init(); /* Configure the RTC tamper register : To Clear all the Backup data register */ RTC_TamperConfig(); /* Initialize time Stucture */ RTC_TimeStructInit(&RTC_TimeStruct); /* Infinite loop */ while (1) { /* Set the LCD Back Color and text size */ LCD_SetFont(&Font16x24); LCD_SetBackColor(White); /* Check on the event 'start' */ if(StartEvent != 0x0) { /* Get the RTC sub second fraction */ SecondFraction = (((256 - (uint32_t)RTC_GetSubSecond()) * 1000) / 256); /* Get the Curent time */ RTC_GetTime(RTC_Format_BIN, &RTC_TimeStruct); /* Refresh : Display the curent time and the sub second on the LCD */ RTC_Time_Display(37, Black , RTC_Get_Time(SecondFraction , &RTC_TimeStruct)); } else { /* Re-initialize the Display time on the LCD */ RTC_Time_InitDisplay(); } /* Left button is pressed */ if (Button_State == LEFT_ON) { /* Enable Tamper interrupt */ RTC_ITConfig(RTC_IT_TAMP, ENABLE); /* Enabale the tamper 1 */ RTC_TamperCmd(RTC_Tamper_1 , ENABLE); /* Set the LCD Back Color */ LCD_SetBackColor(White); /* Clear the LCD line 5 */ LCD_ClearLine(Line5); /* Get the current time */ RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructureInit); CurrentTimeSec = (RTC_TimeStructureInit.RTC_Hours * 3600) + (RTC_TimeStructureInit.RTC_Minutes * 60) + RTC_TimeStructureInit.RTC_Seconds; /* start count */ StartEvent = 0x1; /* Reinitialize Button_State variable */ Button_State = 0; } /* Right button is pressed */ else if (Button_State == RIGHT_ON) { uint16_t Colorx; if (BackupIndex < 5) { if((uint8_t)(BackupIndex% 2) != 0x0) { /* Set LCD backcolor*/ LCD_SetBackColor(Blue2); Colorx = White; } else { /* Set LCD backcolor*/ LCD_SetBackColor(Cyan); Colorx = Black; } SubSecFrac = 0; /* Get the Current sub second and time */ SubSecFrac = (((256 - (uint32_t)RTC_GetSubSecond()) * 1000) / 256); RTC_GetTime(RTC_Format_BIN, &RTC_StampTimeStruct); LCD_SetFont(&Font16x24); /* Display result on the LCD */ RTC_Time_Display( LINE(3 + BackupIndex), Colorx, RTC_Get_Time(SubSecFrac , &RTC_StampTimeStruct) ); if (BackupIndex < 2) { /* Save time register to Backup register ( the first 5 register is reserved for time) */ RTC_WriteBackupRegister(BKPDataReg[BackupIndex],(uint32_t)RTC->TR); /* Save sub second time stamp register ( the latest 6 register is reserved for time) */ RTC_WriteBackupRegister(BKPDataReg[BackupIndex + 2], SubSecFrac); } } else { /* the backup register is full with 10trials */ /* Set the LCD Back Color */ LCD_SetBackColor(White); LCD_SetFont(&Font12x12); /* Set the LCD Text Color */ LCD_SetTextColor(Red); LCD_DisplayStringLine(LINE(16), (uint8_t *)MESSAGE4); LCD_DisplayStringLine(LINE(17), (uint8_t *)MESSAGE5); } BackupIndex++; /* Set the LCD Back Color */ LCD_SetBackColor(White); /* Reinitialize Button_State variable */ Button_State = 0; } /* TAMPER button is pressed */ else if (Button_RTC == RTC_TAMP) { /* Set the LCD Back Color */ LCD_SetBackColor(White); LCD_SetFont(&Font16x24); /* Clear LCD line 5 to 9 */ for (i=0; i < 5; i++) { /* Clear all the LCD lignes from 3 to 7 */ LCD_ClearLine(LINE(3+i)); } /* reset Counter */ BackupIndex = 0 ; /* Enetr to idle */ StartEvent =0x0; LCD_SetFont(&Font12x12); RTC_Time_InitDisplay(); LCD_SetFont(&Font12x12); LCD_ClearLine(LINE(16)); LCD_ClearLine(LINE(17)); /* Enable Tamper interrupt */ RTC_ITConfig(RTC_IT_TAMP, DISABLE); /* Enabale the tamper 1 */ RTC_TamperCmd(RTC_Tamper_1 , DISABLE); /* Reinitialize Button_RTC variable */ Button_RTC = 0; } } }