当前位置: 首页 > news >正文

基于野火F407开发板实现电源管理-睡眠模式

1.创建新工程,工程目录如下

2.创建bsp_exti.c,bsp_exti.h,main.c这三个新文件

bsp_exti.c代码如下:

#include "./exti/bsp_exti.h"

static void NVIC_Config(void)
{
//定义结构体
NVIC_InitTypeDef NVIC_InitStructure;
//定义NVIC优先组
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
//编写NVIC结构体成员
//编写KEY1引脚中断
NVIC_InitStructure.NVIC_IRQChannel = KEY1_INT_EXTI_IRQ;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

    //编写KEY2引脚中断
NVIC_InitStructure.NVIC_IRQChannel = KEY2_INT_EXTI_IRQ;
NVIC_Init(&NVIC_InitStructure);

}


void EXTI_GPIO_Config(void)
{
//编写EXTI和GPIO结构体成员
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitSturecture;

    //开启时钟
RCC_AHB1PeriphClockCmd(KEY1_INT_GPIO_CLK | KEY2_INT_GPIO_CLK,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);

    //配置中断
NVIC_Config();

    //编写GPIO结构体成员
//按键KEY1
GPIO_InitStructure.GPIO_Pin = KEY1_INT_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(KEY1_INT_GPIO_PORT,&GPIO_InitStructure);

    //编写EXTI结构体成员
EXTI_InitSturecture.EXTI_Line = KEY1_INT_EXTI_LINE;
EXTI_InitSturecture.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitSturecture.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitSturecture.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitSturecture);

    //将KEY1引脚连接到SYSCFG
SYSCFG_EXTILineConfig(KEY1_INT_EXTI_PORTSOURCE,KEY1_INT_EXTI_PINSOURCE);

    //编写GPIO结构体成员
//按键KEY2
GPIO_InitStructure.GPIO_Pin = KEY2_INT_GPIO_PIN;
GPIO_Init(KEY2_INT_GPIO_PORT,&GPIO_InitStructure);

    //编写EXTI结构体成员
EXTI_InitSturecture.EXTI_Line =  KEY2_INT_EXTI_LINE;
EXTI_InitSturecture.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitSturecture.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitSturecture.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitSturecture);

//将KEY2引脚连接到SYSCFG
SYSCFG_EXTILineConfig(KEY2_INT_EXTI_PORTSOURCE,KEY2_INT_EXTI_PINSOURCE);

}

bsp_exti.h代码如下:

#ifndef __EXTI_H
#define    __EXTI_H

#include "stm32f4xx.h"

//引脚定义
/*******************************************************/
#define KEY1_INT_GPIO_PORT                GPIOA
#define KEY1_INT_GPIO_CLK                 RCC_AHB1Periph_GPIOA
#define KEY1_INT_GPIO_PIN                 GPIO_Pin_0
#define KEY1_INT_EXTI_PORTSOURCE          EXTI_PortSourceGPIOA
#define KEY1_INT_EXTI_PINSOURCE           EXTI_PinSource0
#define KEY1_INT_EXTI_LINE                EXTI_Line0
#define KEY1_INT_EXTI_IRQ                 EXTI0_IRQn

#define KEY1_IRQHandler                   EXTI0_IRQHandler

#define KEY2_INT_GPIO_PORT                GPIOC
#define KEY2_INT_GPIO_CLK                 RCC_AHB1Periph_GPIOC
#define KEY2_INT_GPIO_PIN                 GPIO_Pin_13
#define KEY2_INT_EXTI_PORTSOURCE          EXTI_PortSourceGPIOC
#define KEY2_INT_EXTI_PINSOURCE           EXTI_PinSource13
#define KEY2_INT_EXTI_LINE                EXTI_Line13
#define KEY2_INT_EXTI_IRQ                 EXTI15_10_IRQn

#define KEY2_IRQHandler                   EXTI15_10_IRQHandler


void EXTI_GPIO_Config(void);
#endif /* __EXTI_H */

main.c代码如下:

#include "stm32f4xx.h"
#include "./usart/bsp_debug_usart.h"
#include "./led/bsp_led.h"
#include "./exti/bsp_exti.h"
static void Delay(__IO uint32_t nCount);
/**
* @brief  主函数
* @param  无
* @retval 无
*/
int main(void)
{    
LED_GPIO_Config();

/*初始化USART 配置模式为 115200 8-N-1,中断接收*/
Debug_USART_Config();

EXTI_GPIO_Config();

  printf("\r\n 欢迎使用野火  STM32 F407 开发板。\r\n");
printf("\r\n 野火F407 睡眠模式例程\r\n");

printf("\r\n 实验说明:\r\n");

    printf("\r\n 1.本程序中,绿灯表示STM32正常运行,红灯表示睡眠状态,蓝灯表示刚从睡眠状态被唤醒\r\n");
printf("\r\n 2.程序运行一段时间后自动进入睡眠状态,在睡眠状态下,可使用KEY1或KEY2唤醒\r\n");
printf("\r\n 3.本实验执行这样一个循环:\r\n ------》亮绿灯(正常运行)->亮红灯(睡眠模式)->按KEY1或KEY2唤醒->亮蓝灯(刚被唤醒)-----》\r\n");
printf("\r\n 4.在睡眠状态下,DAP下载器无法给STM32下载程序,\r\n 可按KEY1、KEY2唤醒后下载,\r\n 或按复位键使芯片处于复位状态,然后在电脑上点击下载按钮,再释放复位按键,即可下载\r\n");

while(1)
{    
//正常执行任务
printf("\r\n STM32正常运行,绿灯亮起");
LED_GREEN;
Delay(0x3FFFFFF);
//进入睡眠低功耗模式,执行任务完毕
printf("\r\n 进入睡眠模式,按下KEY1或KEY2引脚唤醒");
//使用红灯指示进入睡眠模式
LED_RED;
//进入睡眠模式
__WFI();
//等待中断被唤醒
//中断唤醒亮蓝灯
LED_BLUE;
Delay(0x1FFFFFF);
printf("\r\n 睡眠模式退出 \r\n");
}    
}


static void Delay(__IO uint32_t nCount)
{
for (; nCount != 0; nCount--);  
}

3.代码编译成功,烧录进开发板


文章转载自:

http://sBUpape6.fqfkx.cn
http://A14ishex.fqfkx.cn
http://6HtcOdbE.fqfkx.cn
http://O868F5FL.fqfkx.cn
http://JHe4ltWh.fqfkx.cn
http://8DCZIiCB.fqfkx.cn
http://AQjqpD6f.fqfkx.cn
http://iTf9KJ6l.fqfkx.cn
http://zoI5LSZ4.fqfkx.cn
http://iKIucAp1.fqfkx.cn
http://6GZwxEkP.fqfkx.cn
http://2vfngs9z.fqfkx.cn
http://01w2YxSe.fqfkx.cn
http://XTUZXEZO.fqfkx.cn
http://0nwdas3E.fqfkx.cn
http://udyY3T0v.fqfkx.cn
http://VKBeQDro.fqfkx.cn
http://32vAjJxh.fqfkx.cn
http://92RqEMpr.fqfkx.cn
http://Ku4IAAmL.fqfkx.cn
http://KOXHeq6r.fqfkx.cn
http://PTrMM6r8.fqfkx.cn
http://cpdHFnMd.fqfkx.cn
http://SW9sHfHN.fqfkx.cn
http://YQ6fpDOl.fqfkx.cn
http://EESIa6z7.fqfkx.cn
http://BJhfQfjP.fqfkx.cn
http://MyTUCCVb.fqfkx.cn
http://H481Oqvj.fqfkx.cn
http://Ezf7fva8.fqfkx.cn
http://www.dtcms.com/a/375712.html

相关文章:

  • 【数组】长度最小的子数组
  • 从生日悖论看哈希函数的冲突问题
  • UDS诊断详解(二)27服务安全访问流程
  • 如何解决Ubuntu下vi编辑器方向键变字母的问题?
  • [硬件电路-172]:浮空、单点接地、多点接地的比较
  • DNS协议
  • 网络编程---UDP
  • 深入了解linux系统—— 线程同步
  • 基于Mysql+SpringBoot+vue框架-桂林旅游景点导游平台源码
  • 案例二:登高千古第一绝句
  • 将「本地仓库」推送(关联)到「远程仓库」 远程仓库的修改 Pull 到关联的本地仓库
  • 玄机--IIS日志分析
  • ART的GC算法
  • 【CAD.NET】dwg存储为png
  • 前端日志回捞系统的性能优化实践|得物技术
  • 基于R语言机器学习方法在生态经济学领域中的实践技术应用
  • 【1分钟速通】 HTML快速入门
  • Spring IocDI(二)
  • 《QT 108好类》之16 QComboBox类
  • 物联网平台中的MongoDB(一)服务模块设计与架构实现
  • QT里的QSlider滑块样式设计【记录】
  • HTTP/3.0:网络通信的技术革新与性能飞跃
  • Spring Boot--yml配置信息书写和获取
  • 笔记7 FreeRTOS低功耗模式和内存管理
  • 慧荣SM770新一代USB显示接口芯片方案,支持三路并行4K显示扩展方案
  • 嵌入式基础知识——关键字
  • 小红书卡片制作源码后台
  • MySQL,SQL Server,PostgreSQL三种数据库的区别
  • 基于Yolov8实现在Label-Studio实现半自动标注
  • Spring Boot---自动配置原理和自定义Starter