历史上的今天
返回首页

历史上的今天

今天是:2025年07月08日(星期二)

正在发生

2019年07月08日 | STM32F10x CPU低功耗模式之停机模式

2019-07-08 来源:eefocus

/* 按键初始化(按键唤醒)*/

void User_Init(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;

    EXTI_InitTypeDef EXTI_InitStructure;

    NVIC_InitTypeDef NVIC_InitStructure;


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);


    /* 按键 KEY1、KEY2、KEY3、KEY4*/

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 ;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

    GPIO_Init(GPIOA, &GPIO_InitStructure);


    EXTI_ClearITPendingBit(EXTI_Line11);

    EXTI_InitStructure.EXTI_Line = EXTI_Line11;

    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

    EXTI_InitStructure.EXTI_LineCmd = ENABLE;

    EXTI_Init(&EXTI_InitStructure);


    NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

    NVIC_Init(&NVIC_InitStructure);

}

/* 按键外部中断函数 */

void EXTI15_10_IRQHandler(void)

{

    if(EXTI_GetITStatus(EXTI_Line11) != RESET)

    {

        EXTI_ClearITPendingBit(EXTI_Line11);

        if(WakeUpState == 0)

            Flag_WakeUp = UPDATE;     // 唤醒成功标志

    }

}


/* 进入停机模式*/

void Sys_Enter_Stop(void)

{

    PWR_EnterSTOPMode (PWR_Regulator_LowPower, PWR_STOPEntry_WFI);

    WakeUpState = 0;

}


/*恢复系统时钟函数*/


/* 此段引用于某位大神,能否唤醒成功就靠这一段了*/


static void SysClkConfig_STOP(void)

{

    /* After wake-up from STOP reconfigure the system clock */

    /* Enable HSE */

    RCC_HSEConfig(RCC_HSE_ON);

    /* Wait till HSE is ready */

    while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET)

    {}

    /* Enable PLL */

    RCC_PLLCmd(ENABLE);


    /* Wait till PLL is ready */

    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)

    {}

    /* Select PLL as system clock source */

    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    /* Wait till PLL is used as system clock source */

    while(RCC_GetSYSCLKSource() != 0x08)

    {}

}




推荐阅读

史海拾趣

问答坊 | AI 解惑

嵌入式工程师是怎样炼成的

原文引自嵌入式领域非著名讲师  牛牛猛的博客 http://blog.eeworld.net/mistyeyed 嵌入式工程师是怎样炼成的(一)---- 引言         2005年的3月,我独自来到北京。晴空万里,微风和煦,灿烂的阳光让人有些惊喜地 ...…

查看全部问答>

请教关于ARM的两个问题

如题: 1、ARM中的 BANK是什么意思?是一个什么单位吗? 2、看 PXA270中MSC0寄存器的BIT3和BIT19的描述都是定义我的FLASH联接是多少位的   可是,我的 BSP在初始化 时将BIT19设置成32位,BIT3设置成16位 …

查看全部问答>

AT+CREG?返回总是+CREG: 0,5

AT+CREG? +CREG: 0,5 OK 最开始是0,2 表示正在寻找网络嘛。 但是过一会儿之后就回复0,5, 我看了解释说的是在漫游状态,但是我的卡是本地卡 没有漫游,为什么长时间都是这个状态,这样一来,就没法上网 这个是怎么一回事,谢谢…

查看全部问答>

请问哪些开发板提供的bsp能支持kitl调试的?

我曾经借过一个yc2440和sky2440,他们的bsp都不支持kitl调试,还有友善之臂的micro2440,好像也不支持kitl调试?现在找到一个立宇泰 2440 5.0 BSP SMDK2440A的,据说能够支持kitl调试,但是我是菜鸟,不会移植(也不知道能不能移植到smdk2440上去, ...…

查看全部问答>

大家帮我看一下,AD采样值抖动严重,用什么办法解决?

现在出现的情况是AD的显示结果后两位老是闪烁,我试过隆低系统频,加大AD采样定时器的分频,但问题依旧,这种方法对吗?还有别的好方法吗? 程序如下: #include <msp430x13x.h> #define vref 3300 void clock_init(void) { DCOCTL = 0x00; ...…

查看全部问答>

stm 12864并行程序

本帖最后由 paulhyde 于 2014-9-15 08:58 编辑 stm   12864并行程序  …

查看全部问答>

CCS4环境下可以直接编译生成HEX 或BIN文件吗?

请问“CCS4环境下可以直接编译生成 HEX 或BIN文件吗?”,通常都是通过HEX转换工具如HEX2000.EXE然后编写.cmd和.bat文件实现,不知道CCS4可否直接转换,再编译生成.BIN文件呢?…

查看全部问答>

求助:为什么AD中断进不去呢?

RT                    求高手帮忙void main(void){  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT  P6SEL |= 0x10;   &nb ...…

查看全部问答>

【项目外包】电子合成式次声波发生器

电子合成式次声波发生器 项目预算:¥ 50,000~80,000 开发周期: 60天 项目分类: 嵌入式 竞标要求: 项目标签: 声波发射 ...…

查看全部问答>