新手上路
- 积分
- 43
- 金钱
- 43
- 注册时间
- 2017-7-23
- 在线时间
- 11 小时
|

楼主 |
发表于 2019-1-14 17:10:58
|
显示全部楼层
已解决:
思路:
主程序:
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 */
RtcClock_Config();
MY_RTC_Init();
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
RTC_Alarm_EXTI17_NVIC_INIT();
RTC_Alarm_IT_Enable(&hrtc);
RTC_Alarm_Set(2019,1,15,15,34,30);
printf("Start!\r\n");
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_Delay(200);
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); //灭
HAL_Delay(200);
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); //亮
HAL_Delay(200);
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); //灭
HAL_Delay(200);
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); //亮
HAL_Delay(200);
/* 检测系统是否是从待机模式启动的 */
if (__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET)
{
printf("待机唤醒复位\r\n");
/* 清除待机标志位 */
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
}
else
{
printf("系统是上电启动\r\n");
}
RTC_Get();
printf("%2d年%2d月%2d日 ------ ", calendar.w_year, calendar.w_month, calendar.w_date);
printf("%2d点%2d分%2d秒 ------ ", calendar.hour, calendar.min, calendar.sec);
printf("星期%d\r\n", calendar.week);
//SleepMode();
StopMode_IT();
//StandbyMode();
printf("Exit stop mode!\r\n");
// HAL_GPIO_TogglePin(SIGNAL_GPIO_Port, SIGNAL_Pin);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
//used for wake up the stop mode
void RTC_Alarm_EXTI17_NVIC_INIT(void)
{
HAL_NVIC_SetPriority(RTC_Alarm_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(RTC_Alarm_IRQn);
}
HAL_StatusTypeDef RTC_Alarm_IT_Enable(RTC_HandleTypeDef *hrtc)
{
/* Process Locked */
__HAL_LOCK(hrtc);
hrtc->State = HAL_RTC_STATE_BUSY;
/* Clear the ALARM EXTI flag */
__HAL_RTC_ALARM_EXTI_CLEAR_FLAG();
/* Clear flag alarm A */
__HAL_RTC_ALARM_CLEAR_FLAG(hrtc, RTC_FLAG_ALRAF);
/* Configure the Alarm interrupt */
__HAL_RTC_ALARM_ENABLE_IT(hrtc,RTC_IT_ALRA);
/* RTC Alarm Interrupt Configuration: EXTI configuration */
__HAL_RTC_ALARM_EXTI_ENABLE_IT();
__HAL_RTC_ALARM_EXTI_ENABLE_RISING_EDGE();
hrtc->State = HAL_RTC_STATE_READY;
__HAL_UNLOCK(hrtc);
return HAL_OK;
}
添加中断向量函数
/* used for wake up the stop mode */
void RTC_Alarm_IRQHandler(void)
{
HAL_RTC_AlarmIRQHandler(&hrtc);
}
|
|