2024年2月27日发(作者:保晨)
{ return ((byte/10)<<4) + (byte%10);}/** * @brief Configure the current time and date. * @param None * @retval None */static void RTC_AlarmConfig(void){ RTC_AlarmTypeDef salarmstructure; /*##-1- Configure the RTC Alarm peripheral #################################*/ /* Set Alarm to 01:17:30 RTC Alarm Generation: Alarm on Hours, Minutes and Seconds */ = RTC_ALARM_A; = 0x1; s = 0x24; s = 0x00; if(HAL_RTC_SetAlarm_IT(&hrtc,&salarmstructure,RTC_FORMAT_BCD) != HAL_OK) { /* Initialization Error */ Error_Handler(); }}/** * @brief Display the current time. * @param showtime : pointer to buffer * @retval None */static void RTC_TimeShow(uint8_t* showtime){ RTC_DateTypeDef sdatestructureget; RTC_TimeTypeDef stimestructureget; /* Get the RTC current Time */ HAL_RTC_GetTime(&hrtc, &stimestructureget, RTC_FORMAT_BIN); /* Get the RTC current Date */ HAL_RTC_GetDate(&hrtc, &sdatestructureget, RTC_FORMAT_BIN); /* Display time Format : hh:mm:ss */ sprintf((char*)showtime,"%02d:%02d:%02d",, s, s);}/* USER CODE END 0 */int main(void){ /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ 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 */ /*##-1- Configure Alarm ####################################################*/ /* Configure RTC Alarm */ RTC_AlarmConfig();
HAL_RTCEx_SetSecond_IT(&hrtc); /* USER CODE END 2 */
/* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ /*##-2- Display the updated Time #########################################*/ RTC_TimeShow(aShowTime); } /* USER CODE END 3 */}/** System Clock Configuration*/void SystemClock_Config(void){ RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_PeriphCLKInitTypeDef PeriphClkInit; /**Initializes the CPU, AHB and APB busses clocks
*/ RCC_atorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE; RCC_te = RCC_HSE_ON; RCC_divValue = RCC_HSE_PREDIV_DIV1; RCC_te = RCC_HSI_ON; RCC_te = RCC_LSI_ON; RCC_te = RCC_PLL_ON; RCC_rce = RCC_PLLSOURCE_HSE; RCC_ = RCC_PLL_MUL9; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } /**Initializes the CPU, AHB and APB busses clocks
*/ RCC_ype = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_Source = RCC_SYSCLKSOURCE_PLLCLK; RCC_Divider = RCC_SYSCLK_DIV1; RCC_1CLKDivider = RCC_HCLK_DIV2; RCC_2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } ClockSelection = RCC_PERIPHCLK_RTC; ckSelection = RCC_RTCCLKSOURCE_LSI; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } /**Configure the Systick interrupt time
*/ HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); /**Configure the Systick
*/ HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); /* SysTick_IRQn interrupt configuration */ HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);}/* RTC init function */static void MX_RTC_Init(void){ RTC_TimeTypeDef sTime; RTC_DateTypeDef DateToUpdate; /**Initialize RTC Only
*/ ce = RTC; Prediv = RTC_AUTO_1_SECOND; = RTC_OUTPUTSOURCE_NONE;
if (HAL_RTC_Init(&hrtc) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } /**Initialize RTC and set the Time and Date
*/ if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR1) != 0x32F2){ = 0x1; s = 0x17; s = 0x0; if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } y = RTC_WEEKDAY_FRIDAY; = RTC_MONTH_JULY; = 0x14; = 0x17; if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR1,0x32F2); }}/** Configure pins as
* Analog
* Input
* Output * EVENT_OUT * EXTI*/static void MX_GPIO_Init(void){ /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE();}/* USER CODE BEGIN 4 */void HAL_RTCEx_RTCEventCallback (RTC_HandleTypeDef *hrtc){ rtc_event_flag++;
}/** * @brief Alarm callback * @param hrtc : RTC handle * @retval None */void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc){ rtc_alarm_flag++;
}/* USER CODE END 4 *//** * @brief This function is executed in case of error occurrence. * @param None * @retval None */void _Error_Handler(char * file, int line){ /* USER CODE BEGIN Error_Handler_Debug */ /* User can add his own implementation to report the HAL error return state */ while(1) { } /* USER CODE END Error_Handler_Debug */
}#ifdef USE_FULL_ASSERT
/** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */void assert_failed(uint8_t* file, uint32_t line){ /* USER CODE BEGIN 6 */ /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %drn", file, line) */ /* USER CODE END 6 */}#endif/** * @} */
/** * @}*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/仿真测试结果
2024年2月27日发(作者:保晨)
{ return ((byte/10)<<4) + (byte%10);}/** * @brief Configure the current time and date. * @param None * @retval None */static void RTC_AlarmConfig(void){ RTC_AlarmTypeDef salarmstructure; /*##-1- Configure the RTC Alarm peripheral #################################*/ /* Set Alarm to 01:17:30 RTC Alarm Generation: Alarm on Hours, Minutes and Seconds */ = RTC_ALARM_A; = 0x1; s = 0x24; s = 0x00; if(HAL_RTC_SetAlarm_IT(&hrtc,&salarmstructure,RTC_FORMAT_BCD) != HAL_OK) { /* Initialization Error */ Error_Handler(); }}/** * @brief Display the current time. * @param showtime : pointer to buffer * @retval None */static void RTC_TimeShow(uint8_t* showtime){ RTC_DateTypeDef sdatestructureget; RTC_TimeTypeDef stimestructureget; /* Get the RTC current Time */ HAL_RTC_GetTime(&hrtc, &stimestructureget, RTC_FORMAT_BIN); /* Get the RTC current Date */ HAL_RTC_GetDate(&hrtc, &sdatestructureget, RTC_FORMAT_BIN); /* Display time Format : hh:mm:ss */ sprintf((char*)showtime,"%02d:%02d:%02d",, s, s);}/* USER CODE END 0 */int main(void){ /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ 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 */ /*##-1- Configure Alarm ####################################################*/ /* Configure RTC Alarm */ RTC_AlarmConfig();
HAL_RTCEx_SetSecond_IT(&hrtc); /* USER CODE END 2 */
/* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ /*##-2- Display the updated Time #########################################*/ RTC_TimeShow(aShowTime); } /* USER CODE END 3 */}/** System Clock Configuration*/void SystemClock_Config(void){ RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_PeriphCLKInitTypeDef PeriphClkInit; /**Initializes the CPU, AHB and APB busses clocks
*/ RCC_atorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE; RCC_te = RCC_HSE_ON; RCC_divValue = RCC_HSE_PREDIV_DIV1; RCC_te = RCC_HSI_ON; RCC_te = RCC_LSI_ON; RCC_te = RCC_PLL_ON; RCC_rce = RCC_PLLSOURCE_HSE; RCC_ = RCC_PLL_MUL9; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } /**Initializes the CPU, AHB and APB busses clocks
*/ RCC_ype = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_Source = RCC_SYSCLKSOURCE_PLLCLK; RCC_Divider = RCC_SYSCLK_DIV1; RCC_1CLKDivider = RCC_HCLK_DIV2; RCC_2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } ClockSelection = RCC_PERIPHCLK_RTC; ckSelection = RCC_RTCCLKSOURCE_LSI; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } /**Configure the Systick interrupt time
*/ HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); /**Configure the Systick
*/ HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); /* SysTick_IRQn interrupt configuration */ HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);}/* RTC init function */static void MX_RTC_Init(void){ RTC_TimeTypeDef sTime; RTC_DateTypeDef DateToUpdate; /**Initialize RTC Only
*/ ce = RTC; Prediv = RTC_AUTO_1_SECOND; = RTC_OUTPUTSOURCE_NONE;
if (HAL_RTC_Init(&hrtc) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } /**Initialize RTC and set the Time and Date
*/ if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR1) != 0x32F2){ = 0x1; s = 0x17; s = 0x0; if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } y = RTC_WEEKDAY_FRIDAY; = RTC_MONTH_JULY; = 0x14; = 0x17; if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR1,0x32F2); }}/** Configure pins as
* Analog
* Input
* Output * EVENT_OUT * EXTI*/static void MX_GPIO_Init(void){ /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE();}/* USER CODE BEGIN 4 */void HAL_RTCEx_RTCEventCallback (RTC_HandleTypeDef *hrtc){ rtc_event_flag++;
}/** * @brief Alarm callback * @param hrtc : RTC handle * @retval None */void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc){ rtc_alarm_flag++;
}/* USER CODE END 4 *//** * @brief This function is executed in case of error occurrence. * @param None * @retval None */void _Error_Handler(char * file, int line){ /* USER CODE BEGIN Error_Handler_Debug */ /* User can add his own implementation to report the HAL error return state */ while(1) { } /* USER CODE END Error_Handler_Debug */
}#ifdef USE_FULL_ASSERT
/** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */void assert_failed(uint8_t* file, uint32_t line){ /* USER CODE BEGIN 6 */ /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %drn", file, line) */ /* USER CODE END 6 */}#endif/** * @} */
/** * @}*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/仿真测试结果