完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
不知道是不是配置不对 请大神帮忙看看 用的是STM32l151c8t6 就是进不去中断 到了制定的闹钟时间 没有进中断 求帮忙瞄一瞄是什么地方没配置好
void RTC_conig(void) { static NVIC_InitTypeDef NVIC_InitStructure; static EXTI_InitTypeDef EXTI_InitStructure; static RTC_InitTypeDef RTC_InitStructure; static RTC_TimeTypeDef RTC_TimeStructure; static RTC_DateTypeDef RTC_DateStruct; static RTC_AlarmTypeDef RTC_AlarmStruct; static uint32_t AsynchPrediv = 0, SynchPrediv = 0; uint8_t ret; RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); /*!< Allow access to RTC */ PWR_RTCAccessCmd(ENABLE); /*!< 使能外部低速时钟 */ RCC_LSEConfig(RCC_LSE_ON); /*!< 等待外部低速时钟就绪 */ while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) {} /*!< 配置RTC时钟来源 */ RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); /*!< 使能RTC时钟 */ RCC_RTCCLKCmd(ENABLE); /*!< Wait for RTC APB registers synchronisation */ RTC_WaitForSynchro(); //配置日历 /* 配置RTC数据寄存器以及时钟分频 */ SynchPrediv = 255; AsynchPrediv = 127;//分频为1Hz RTC_InitStructure.RTC_AsynchPrediv = AsynchPrediv; RTC_InitStructure.RTC_SynchPrediv = SynchPrediv; RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;//24小时制 /* 检查RTC初始化 */ if (RTC_Init( RTC_InitStructure) == ERROR) { printf("nr /!\***** RTC Prescaler Config failed ********/!\ nr"); } // while(!ret) // { // ret = RTC_EnterInitMode(); // } RTC_TimeStructure.RTC_H12 = RTC_HourFormat_24;//RTC_H12_PM; RTC_TimeStructure.RTC_Hours = 9; RTC_TimeStructure.RTC_Minutes = 59; RTC_TimeStructure.RTC_Seconds = 1; RTC_SetTime(RTC_Format_BIN, RTC_TimeStructure); RTC_DateStruct.RTC_Date=4; RTC_DateStruct.RTC_Month=6; RTC_DateStruct.RTC_WeekDay=1; RTC_DateStruct.RTC_Year=18; RTC_SetDate( RTC_Format_BIN, RTC_DateStruct ); //配置自动定时功能 /* 中断配置 *******************************************************/ 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); /*使能 RTC Wakeup 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); //先关闭 RTC_AlarmCmd(RTC_Alarm_A,DISABLE); 才能使用RTC_SetAlarm ret = RTC_AlarmCmd(RTC_Alarm_A,DISABLE); printf("ret = %drn",ret); RTC_AlarmStruct.RTC_AlarmTime.RTC_H12=RTC_HourFormat_24; RTC_AlarmStruct.RTC_AlarmTime.RTC_Hours=9; RTC_AlarmStruct.RTC_AlarmTime.RTC_Minutes=59; RTC_AlarmStruct.RTC_AlarmTime.RTC_Seconds=20; // RTC_AlarmStruct.RTC_AlarmDateWeekDay= // RTC_AlarmStruct.RTC_AlarmDateWeekDaySel= RTC_AlarmStruct.RTC_AlarmMask=RTC_AlarmMask_Seconds | RTC_AlarmMask_Minutes | RTC_AlarmMask_Hours; RTC_SetAlarm(RTC_Format_BIN,RTC_Alarm_A, RTC_AlarmStruct); RTC_ClearFlag(RTC_FLAG_ALRAF); ret = RTC_AlarmCmd(RTC_Alarm_A,ENABLE); printf("ret2 = %drn",ret); /* RTC 唤醒中端配置: Clock Source: RTCDiv_16, Wakeup Time Base: 4s */ // RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16); // RTC_SetWakeUpCounter(0x1FFF);//0x1FFF = 8191; 4s = (8191+1)*(1/(32768/16)) /* 使能 the Wakeup Interrupt */ // RTC_ITConfig(RTC_IT_ALRA, ENABLE); RTC_ITConfig(RTC_IT_ALRA, ENABLE); } ==================中断处理函数======================== void RTC_Alarm_IRQHandler( void ) { if( RTC_GetITStatus( RTC_IT_ALRA ) != RESET ) { RtcRecoverMcuStatus( ); printf("====RTC_Alarm_IRQHandler======rn"); TimerIrqHandler( ); RTC_ClearITPendingBit( RTC_IT_ALRA ); EXTI_ClearITPendingBit( EXTI_Line17 ); } } |
|
相关推荐
1个回答
|
|
首先,我们需要确保STM32L151C8T6的RTC闹钟中断配置正确。以下是一些关键步骤和检查点,以确保您的配置正确:
1. 时钟配置:确保RTC时钟已正确配置。通常,我们需要使能LSI或LSE作为RTC的时钟源。以下是启用LSI时钟的示例代码: ```c RCC_LSICmd(ENABLE); while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET); // 等待LSI时钟稳定 RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); ``` 2. 使能RTC:确保RTC时钟已使能。 ```c RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); ``` 3. RTC初始化:使用`RTC_InitTypeDef`结构体初始化RTC。 ```c RTC_InitStructure.RTC_AsynchPrediv = 0x7F; RTC_InitStructure.RTC_SynchPrediv = 0xFF; RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24; RTC_Init(&RTC_InitStructure); ``` 4. 设置闹钟时间:使用`RTC_TimeTypeDef`结构体设置闹钟时间。 ```c RTC_TimeStructure.RTC_Hours = 12; RTC_TimeStructure.RTC_Minutes = 0; RTC_TimeStructure.RTC_Seconds = 0; RTC_SetAlarm(RTC_Format_BIN, &RTC_TimeStructure, RTC_Alarm_A); ``` 5. 使能闹钟中断:使能RTC闹钟A中断。 ```c RTC_ITConfig(RTC_IT_ALRA, ENABLE); ``` 6. NVIC配置:配置NVIC以允许RTC闹钟中断。 ```c NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); ``` 7. EXTI配置:如果您使用外部中断作为闹钟触发器,请确保EXTI配置正确。 8. 使能中断:确保全局中断和RTC中断使能。 ```c __enable_irq(); ``` 9. 中断服务例程:实现RTC闹钟中断服务例程。 ```c void RTC_IRQHandler(void) { if (RTC_GetITStatus(RTC_IT_ALRA) != RESET) { RTC_ClearITPendingBit(RTC_IT_ALRA); // 在此处添加您的代码 } } ``` 请检查您的代码,确保以上步骤都已正确执行。如果问题仍然存在,请检查硬件连接,确保RTC模块没有受到外部干扰。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1786 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1622 浏览 1 评论
1089 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
730 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1680 浏览 2 评论
1943浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
740浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
577浏览 3评论
600浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
562浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 00:35 , Processed in 1.023223 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号