RTC_WakeUp中断唤醒STM32F4停止模式
来源:互联网 发布:淘宝内部优惠券群号 编辑:程序博客网 时间:2024/05/22 08:07
RTC_WakeUp唤醒STM32F4停止模式(借鉴的是原子哥写的代码):
首先我们先初始化RTC配置:
//RTC初始化u8 MyRTC_Init(void){ RTC_InitTypeDef RTC_InitStructrue; u16 retry=0x1FFF; RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//使能PWR时钟 PWR_BackupAccessCmd(ENABLE);//使能后备寄存器 if(RTC_ReadBackupRegister(RTC_BKP_DR0)!=0x5050) { RCC_LSEConfig(RCC_LSE_ON);//开启低速外部时钟 if(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET)//读取外部低速时钟是否准备就绪 { retry++; delay_ms(10); } if(retry==0) return 1;//LSE开启失败 RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);//选择LSE作为RTC时钟 RCC_RTCCLKCmd(ENABLE);//使能RTC时钟 RTC_InitStructrue.RTC_AsynchPrediv=0x7F;//RTC异步分频系数127 RTC_InitStructrue.RTC_SynchPrediv=0xFF;//RTC同步分频系数255 RTC_Init(&RTC_InitStructrue);//RTC初始化函数 RTC_WriteBackupRegister(RTC_BKP_DR0,0x5050); } return 0;}
然后配置RTC_WakeUp:
void RTC_Set_WakeUp(u16 waketime){ EXTI_InitTypeDef EXTI_InitStruct; NVIC_InitTypeDef NVIC_InitStruct; RTC_WakeUpCmd(DISABLE);//关闭Wake Up RTC_WakeUpClockConfig(RTC_WakeUpClock_CK_SPRE_16bits);//时钟选择1Hz RTC_SetWakeUpCounter(waketime);//设置WakeUp自动重装载值 RTC_ClearITPendingBit(RTC_IT_WUT);//清除WakeUp中断标志 EXTI_ClearITPendingBit(EXTI_Line22);//清除Line22中断标志 RTC_ITConfig(RTC_IT_WUT,ENABLE);//开启WakeUp中断标志 RTC_WakeUpCmd(ENABLE);//开启WakeUp EXTI_InitStruct.EXTI_Line=EXTI_Line22;//LINE22 EXTI_InitStruct.EXTI_LineCmd=ENABLE; EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt; EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Rising;//上升沿触发 EXTI_Init(&EXTI_InitStruct); NVIC_InitStruct.NVIC_IRQChannel=RTC_WKUP_IRQn;//选择WakeUp中断 NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0x01; NVIC_InitStruct.NVIC_IRQChannelSubPriority=0x02; NVIC_Init(&NVIC_InitStruct);}
编写RTC_WakeUp中断函数(记得初始化系统时钟):
void RTC_WKUP_IRQHandler(){ while(RTC_GetFlagStatus(RTC_FLAG_WUTF)!=RESET) { RTC_ClearFlag(RTC_FLAG_WUTF); SystemInit(); LED1=!LED1; } EXTI_ClearITPendingBit(EXTI_Line22);}
然后就是main函数了:
int main(void){ u8 t=0; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2 delay_init(168); //初始化延时函数 uart_init(9600); //初始化串口波特率为9600 LED_Init(); //初始化LED KEY_Init(); MyRTC_Init(); while(1) { LED0=!LED0; RTC_Set_WakeUp(5);//时钟频率选的1Hz,5S产生一次RTC_WakeUp中断 printf("t=%d\n\r",t); PWR_EnterSTOPMode(PWR_LowPowerRegulator_ON,PWR_STOPEntry_WFI); t++; if(t>30) t=0; }
把USART1接串口调试助手上,变量t从0开始每5秒加1,同时LED每5秒反转一次状态.
**注意哈:
停止模式是烧录不进程序的,要烧录程序的话,要先按住RESET键,点download后,松手就能下进去了.**
阅读全文
1 0
- RTC_WakeUp中断唤醒STM32F4停止模式
- stm32进入停止模式,中断 唤醒
- 亲测鸡汤!!stm32用于进入停止模式的中断和用于产生唤醒的中断,后者的抢占优先级一定要高,否则无法唤醒!
- stm32f4 ADC DMA 模式 中断进不去解决
- 中断唤醒
- STM32F4定时器 -- 定时中断
- STM32停止模式唤醒不恢复时钟的后果
- 关于STM32使用RTC唤醒停止模式的设置
- stm32F4的NVIC和中断
- STM32F4使用FreeRTOS的中断
- STM32F4使用FreeRTOS的中断
- linux中实现fiq模式(关于arm中断,唤醒中断)
- 笔记:linux中实现fiq模式(关于arm中断,唤醒中断)
- 按键中断,休眠,唤醒
- 可唤醒中断
- RTC唤醒中断
- STM32F4的GPIO模式
- stm32从停止模式唤醒到系统稳定需要多少时间
- 用GAN还原语义标注图!还能手动改细节(附论文、代码)
- JAVA集合框架之AbstractCollection抽象类和AbstractList抽象类
- 每天一道LeetCode-----移除有序链表中的重复节点
- 628. Maximum Product of Three Numbers数组中三个数乘积最大
- 组合数学笔记C8
- RTC_WakeUp中断唤醒STM32F4停止模式
- CSS书写规范与理论
- HDU 1241 Oil Deposits 深搜(DFS)
- Failed to parse mapping resource......
- react-native调起第三方高德地图导航URL解释
- 关于IDEA 创建WebService实例访问404问题的解决
- JS实现文字向上无缝滚动轮播
- JavaScript、jQuery、AJAX、JSON 之间的关系
- 用C++实现2048