搜索
bottom↓
回复: 10

UCos下如何实现单片机的低功耗休眠?

[复制链接]

出0入0汤圆

发表于 2014-8-26 16:05:22 | 显示全部楼层 |阅读模式
第一次用STM32跑ucos。
需要在某条串口指令下达后进入低功耗休眠(是单片机休眠不是系统任务)状态,要怎么做?直接在某个任务里调用STM32库函数的休眠函数?
电路是依靠红外管脚的跳变唤醒的,醒来后按我们的需要是不用管之前的状态,系统重新初始化一下,相当于复位了,然后等待串口命令;
或者是醒来后能有个标志位置1,然后主动串口发一下告诉系统这块电路醒了。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2014-8-26 20:21:37 来自手机 | 显示全部楼层
有个wakeup引脚

出0入0汤圆

 楼主| 发表于 2014-8-27 09:43:50 | 显示全部楼层
顶起,请大家确实帮我解决一下。

出0入0汤圆

发表于 2014-10-22 08:38:45 来自手机 | 显示全部楼层
搜索下freertos的低功耗做法,有很多内容

出0入0汤圆

 楼主| 发表于 2014-10-22 09:41:42 | 显示全部楼层
已经自己解决了,做之前考虑的太多,实际做起来其实不难。

出0入0汤圆

发表于 2014-10-22 09:45:52 | 显示全部楼层
silence_sky 发表于 2014-10-22 09:41
已经自己解决了,做之前考虑的太多,实际做起来其实不难。

不打算分享下你的思路么

出0入0汤圆

 楼主| 发表于 2014-10-22 13:37:29 | 显示全部楼层
真没东西,配置下就好了。大概粘贴一下:配下管脚,任务里一头睡下去就行。不唤醒不会醒。醒来后一定会有任务调度,而且是最高优先级的,正好我最高优先级的任务就是串口,过去后直接发条消息,上位机就知道下面醒了。

  GPIO_INIT.GPIO_Pin = GPIO_Pin_0;            //管脚0
  GPIO_INIT.GPIO_Mode = GPIO_Mode_IPU; //弱上拉
  GPIO_Init(GPIOC, &GPIO_INIT);         
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource0);      
  /* Configure EXTI0 line */
  EXTI_InitStructure.EXTI_Line = EXTI_Line0;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//EXTI_Mode_Event;//事件中断不用清标志
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
//------------------------------------------------------------------------
void Task_SLEEP(void *p_arg)
{
  u8 serr;
  u32 i;
  while(1)
  {
    OSSemPend(Sem_SLEEP,0,&serr);//
    for(i=0;i<12000;i++);//延时1ms;
    SysTick->CTRL &=~0x01;  //关SysTick
    RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);// 切换时钟到HSI内部8Mhz
    while(RCC_GetSYSCLKSource() != 0x00)
    {}
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Disable);    //关闭预取指
    FLASH_SetLatency(FLASH_Latency_0);    // Flash零等待——因为唤醒后是内部8Mhz运行
    PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFE); //调压器关、事件唤醒
    RCC_Configuration();   //必须复位FLASH和时钟
    SysTick->CTRL |=0x01;  //
  }
}

出0入0汤圆

发表于 2014-10-22 14:47:10 | 显示全部楼层
silence_sky 发表于 2014-10-22 09:41
已经自己解决了,做之前考虑的太多,实际做起来其实不难。

跟大家分享一下呗

出0入0汤圆

发表于 2015-8-5 19:11:54 来自手机 | 显示全部楼层
楼主这个问题是怎么解决的?能和大家分享一下吗?

出0入0汤圆

 楼主| 发表于 2015-8-7 11:21:20 | 显示全部楼层
airwolf09921 发表于 2015-8-5 19:11
楼主这个问题是怎么解决的?能和大家分享一下吗?

只看标题,不看下面几层的帖子吗?

出0入0汤圆

发表于 2015-8-12 01:15:24 | 显示全部楼层
silence_sky 发表于 2015-8-7 11:21
只看标题,不看下面几层的帖子吗?

不好意思 不是很明白
根据 OSSemPend(Sem_SLEEP,0,&serr);//
的意思推断
您的意思是 中断ISR里面唤醒后 PostSem 一下
对吗
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 07:55

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表