完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
本文将使用寄存器版本实现关机模式
寄存器版本跟库函数版本实现基本一致, 可以通过查看库函数版 去看底层代码 更方便去理解寄存器版本 寄存器操作 根据上两张图可以进行操作 相关步骤
使用 STM32 的待机模式了,并且可以通过 WK_UP 来唤醒 CPU,我们最终要实现这样一个功能:通过长按(3 秒)WK_UP 按键开机 实现代码 #include "WakeUp.h" #include "Nvic.h" #include "Led.h" void WakeUp_Stand(void) { RCC->APB1ENR |= 1 << 28; //外设时钟第28为PWR SCB->SCR |= 1 << 2; //系统控制时钟设置深睡眠 //电源控制寄存器 PWR->CR |= 1 << 2; //清除唤醒位 PWR->CR |= 1 << 1; //设置PDDS 进入深睡眠 //电压状态寄存器 PWR->CSR |= 1 << 8; //按下wkup键唤醒 } u8 Check_WKUP(void) { u8 t = 0; while(1) { if(WKUP_KD) { t++; Delay_ms(30); if(t >= 100) { Led_Show(); return 1; } } else { Led_Show(); return 0; } } } void WKUP_Init(void) { RCC->APB2ENR |= 1 << 2; //先使能外设 IO PORTA 时钟 RCC->APB2ENR |= 1 << 0; //开启辅助时钟 GPIOA->CRL &= 0XFFFFFFF0; //PA0 设置成输入 GPIOA->CRL |= 0X00000008; Ex_Config(GPIO_A,0,RTIR); //PA0 上升沿触发 //(检查是否是正常开)机 if(Check_WKUP() == 0) WakeUp_Stand();//不是开机,进入待机模式 Nvic_Init(2,2,EXTI0_IRQn,2); //抢占 2,子优先级 2,组 2 } void Sys_Enter_Standy(void) { RCC->APB2RSTR |= 0x01FC; WakeUp_Stand(); } //中断,检测到 PA0 脚的一个上升沿. //中断线 0 线上的中断检测 void EXTI0_IRQHandler(void) { EXTI->PR = 1 << 0; //清除 LINE10 上的中断标志位 if(Check_WKUP()) { Sys_Enter_Standy(); }//关机? } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1874 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1658 浏览 1 评论
1143 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
759 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1720 浏览 2 评论
1963浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
789浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
612浏览 3评论
628浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
590浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-11 20:18 , Processed in 0.593088 second(s), Total 44, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号