请输入口令 发表于 2016-12-30 14:06:05

关于STM32f0C8T6 睡眠模式到底能不能用?

最近在做一个很简单的程序,然后客户必须要低功耗,开始用STC的单片机由于要使用5个1外部中断实现低功耗唤醒,功能实现不了,换stm32来是,产考了很多资料但不管怎么样就是进不了睡眠模式,要不就是进入了睡眠模式但却不能唤醒,而且用电流表测量电流竟然达到了40mA,折腾了好多天也一直没有个结果。有没有大神指导下的!下面是我参考官方例程写的程序!!int main(void)
{
       
        SYS_HSI_CLK_Config();

if (SysTick_Config(SystemCoreClock / 1000))
{
    while (1);//²¶»ñ´íÎó
}
       
       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
PWR_BackupAccessCmd(ENABLE);
RCC_BackupResetCmd(ENABLE);
RCC_BackupResetCmd(DISABLE);
       
SleepMode_Measure();
       
       
        LED_IO_Init();
       
       
while (1)
{
               
                switch(mode)
                {
                  case 1:SW_1() ;break;
                        case 2:SW_2() ;break;
                        case 3:SW_3() ;break;
                        case 4:SW_4() ;break;
                        case 5:SW_5() ;break;
                        default:         __WFI(); break; // Sys_Standby();rest_all(GPIOA,OUT_DATA,~OUT_DATA);
                }
               
                //test();
               
                GPIOC->ODR |=0x2000;       
                Delay(50);               
       
                GPIOC->ODR &=~0x2000;
                Delay(50);
   
}
}


void SleepMode_Measure()
{
       __IO uint32_t index = 0;
GPIO_InitTypeDef GPIO_InitStructure;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOC, ENABLE);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_Init(GPIOC, &GPIO_InitStructure);
   
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOC, DISABLE);
               
        EXTI0_1InitConfig();
        EXTI2_3InitConfig();
        EXTI4_15InitConfig();
       
        __WFI();
       

        /*
        while (1)
{
    for(index = 0; index < 0x7FFFF; index++);
}
        */
}void EXTI0_1InitConfig(void)
{
//Enable GPIOA clock
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

// Configure PA0 pin as input floating
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);

// Enable SYSCFG clock
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

// Connect EXTI0 Line to PA0 pin
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource1);

// Configure EXTI1 line
EXTI_InitStructure.EXTI_Line = EXTI_Line1;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);

// Enable and set EXTI0 Interrupt
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}void EXTI2_3InitConfig(void)
{
//Enable GPIOA clock
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

// Configure PA0 pin as input floating
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);

// Enable SYSCFG clock
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

// Connect EXTI0 Line to PA2 pin
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource2);
        // Connect EXTI0 Line to PA3 pin
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource3);
       
// Configure EXTI2 line
EXTI_InitStructure.EXTI_Line = EXTI_Line2;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
       
        // Configure EXTI3 line
       EXTI_InitStructure.EXTI_Line = EXTI_Line3;
       EXTI_Init(&EXTI_InitStructure);
               

// Enable and set EXTI2-3 Interrupt
NVIC_InitStructure.NVIC_IRQChannel = EXTI2_3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 0x01;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}void EXTI4_15InitConfig(void)
{
//Enable GPIOA clock
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

// Configure PA0 pin as input floating
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);

// Enable SYSCFG clock
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

// Connect EXTI0 Line to PA4 pin
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource4);
        // Connect EXTI0 Line to PA5 pin
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource5);
       
// Configure EXTI4 line
EXTI_InitStructure.EXTI_Line = EXTI_Line4;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
       
        // Configure EXTI5 line
        EXTI_InitStructure.EXTI_Line = EXTI_Line5;
        EXTI_Init(&EXTI_InitStructure);
               

// Enable and set EXTI4-15 Interrupt
NVIC_InitStructure.NVIC_IRQChannel = EXTI4_15_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 0x10;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
       
        //Sys_Enter_Standby();
       
}


Paderboy 发表于 2016-12-30 15:33:32

:loveliness:如果不熟悉,可以参考下hal库里的例程。。。很多例程都有。。。

peter001 发表于 2016-12-30 17:52:59

降电流除了进入低功耗模式外,还要注意晶振频率,很多功耗来源于时钟频率导致的静态功耗

五哥1 发表于 2016-12-30 19:55:39

网上下一些程序参考下,CUBE 设置很简单,但是要对这个熟练使用。

请输入口令 发表于 2017-1-3 12:02:28

谢谢建议,但这边资料找了好多也试了就是唤不醒睡眠!

5265325 发表于 2017-1-4 09:20:28

要低功耗可以考虑L系列
页: [1]
查看完整版本: 关于STM32f0C8T6 睡眠模式到底能不能用?