你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

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

  5.   if (SysTick_Config(SystemCoreClock / 1000))
  6.   {
  7.     while (1);//²¶»ñ´íÎó
  8.   }
  9.        
  10.        
  11.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
  12.   PWR_BackupAccessCmd(ENABLE);
  13.   RCC_BackupResetCmd(ENABLE);
  14.   RCC_BackupResetCmd(DISABLE);
  15.        
  16.   SleepMode_Measure();
  17.        
  18.        
  19.         LED_IO_Init();
  20.        
  21.        
  22.   while (1)
  23.   {
  24.                
  25.                 switch(mode)
  26.                 {
  27.                   case 1:SW_1() ;break;
  28.                         case 2:SW_2() ;break;
  29.                         case 3:SW_3() ;break;
  30.                         case 4:SW_4() ;break;
  31.                         case 5:SW_5() ;break;
  32.                         default:         __WFI(); break; // Sys_Standby();rest_all(GPIOA,OUT_DATA,~OUT_DATA);
  33.                 }
  34.                
  35.                 //test();
  36.                
  37.                 GPIOC->ODR |=0x2000;       
  38.                 Delay(50);               
  39.          
  40.                 GPIOC->ODR &=~0x2000;
  41.                 Delay(50);
  42.    
  43.   }
  44. }
复制代码

  1. void SleepMode_Measure()
  2. {
  3.          __IO uint32_t index = 0;
  4.   GPIO_InitTypeDef GPIO_InitStructure;

  5.   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOC, ENABLE);

  6.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  7.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  8.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  9.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
  10.   GPIO_Init(GPIOA, &GPIO_InitStructure);
  11.   GPIO_Init(GPIOB, &GPIO_InitStructure);
  12.   GPIO_Init(GPIOC, &GPIO_InitStructure);
  13.      
  14.   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOC, DISABLE);
  15.                
  16.         EXTI0_1InitConfig();
  17.         EXTI2_3InitConfig();
  18.         EXTI4_15InitConfig();
  19.        
  20.         __WFI();
  21.        

  22.         /*
  23.         while (1)
  24.   {
  25.     for(index = 0; index < 0x7FFFF; index++);
  26.   }
  27.         */
  28. }
复制代码
  1. void EXTI0_1InitConfig(void)
  2. {
  3.   //Enable GPIOA clock
  4.   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

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

  10.   // Enable SYSCFG clock
  11.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
  12.   
  13.   // Connect EXTI0 Line to PA0 pin
  14.   SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource1);

  15.   // Configure EXTI1 line
  16.   EXTI_InitStructure.EXTI_Line = EXTI_Line1;
  17.   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  18.   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  19.   EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  20.   EXTI_Init(&EXTI_InitStructure);

  21.   // Enable and set EXTI0 Interrupt
  22.   NVIC_InitStructure.NVIC_IRQChannel = EXTI0_1_IRQn;
  23.   NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;
  24.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  25.   NVIC_Init(&NVIC_InitStructure);
  26. }
复制代码
  1. void EXTI2_3InitConfig(void)
  2. {
  3.   //Enable GPIOA clock
  4.   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

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

  10.   // Enable SYSCFG clock
  11.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
  12.   
  13.   // Connect EXTI0 Line to PA2 pin
  14.   SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource2);
  15.         // Connect EXTI0 Line to PA3 pin
  16.   SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource3);
  17.        
  18.   // Configure EXTI2 line
  19.   EXTI_InitStructure.EXTI_Line = EXTI_Line2;
  20.   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  21.   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  22.   EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  23.   EXTI_Init(&EXTI_InitStructure);
  24.        
  25.         // Configure EXTI3 line
  26.          EXTI_InitStructure.EXTI_Line = EXTI_Line3;
  27.          EXTI_Init(&EXTI_InitStructure);
  28.                  

  29.   // Enable and set EXTI2-3 Interrupt
  30.   NVIC_InitStructure.NVIC_IRQChannel = EXTI2_3_IRQn;
  31.   NVIC_InitStructure.NVIC_IRQChannelPriority = 0x01;
  32.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  33.   NVIC_Init(&NVIC_InitStructure);
  34. }
复制代码
  1. void EXTI4_15InitConfig(void)
  2. {
  3.   //Enable GPIOA clock
  4.   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

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

  10.   // Enable SYSCFG clock
  11.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
  12.   
  13.   // Connect EXTI0 Line to PA4 pin
  14.   SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource4);
  15.         // Connect EXTI0 Line to PA5 pin
  16.   SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource5);
  17.        
  18.   // Configure EXTI4 line
  19.   EXTI_InitStructure.EXTI_Line = EXTI_Line4;
  20.   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  21.   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  22.   EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  23.   EXTI_Init(&EXTI_InitStructure);
  24.        
  25.         // Configure EXTI5 line
  26.         EXTI_InitStructure.EXTI_Line = EXTI_Line5;
  27.         EXTI_Init(&EXTI_InitStructure);
  28.                  

  29.   // Enable and set EXTI4-15 Interrupt
  30.   NVIC_InitStructure.NVIC_IRQChannel = EXTI4_15_IRQn;
  31.   NVIC_InitStructure.NVIC_IRQChannelPriority = 0x10;
  32.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  33.   NVIC_Init(&NVIC_InitStructure);
  34.        
  35.         //Sys_Enter_Standby();
  36.        
  37. }
复制代码



收藏 1 评论5 发布时间:2016-12-30 14:06

举报

5个回答
Paderboy 回答时间:2016-12-30 15:33:32
如果不熟悉,可以参考下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系列

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版