0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CW32 低功耗模式的特性介绍

武汉芯源半导体有限公司 2022-12-30 10:53 次阅读

CW32系列芯片支持3种工作模式,运行模式、休眠模式以及深度休眠模式,本文以CW32L083为例介绍低功耗模式的特性。MCU上电以后,系统自动进入运行模式,可以通过软件配置,进入休眠或者深度休眠两种低功耗模式,进入低功耗运行状态后,可以通过外设中断触发唤醒机制,使得系统返回到运行模式,三种工作模式的转换机制如下图所示:

poYBAGOuTwSAKUO3AAA1NDr3uj0735.jpg

三种模式下CPU时钟及外设状态:

• 运行模式(Active mode)

运行模式下 CPU 正常运行,所有模块用户均可正常使用。

• 休眠模式(Sleep mode)

休眠模式下,CPU 停止运行,所有外设不受影响,所有I/O引脚保持状态不变。

• 深度休眠模式(DeepSleep mode)

深度休眠模式下,CPU停止运行,高速时钟(HSE、HSIOSC)自动关闭,低速时钟(LSE、 LSI、RC10K、RC150K)保持原状态不变。深度休眠模式的功耗远小于休眠模式。

CW32L083可以使用等待中断专用指令,WFI(Wait for Interrupt),配合系统控制寄存器(SCR, System Control Register)的SLEEPONEXIT和SLEEPDEEP位域,可实现立即进入或退出(中断服务程序)时进入休眠模式或深度休眠模式。

• 立即进入

执行WFI指令,MCU将立即进入休眠模式(SLEEPDEEP为0时)或深度休眠模式(SLEEPDEEP为1时)

• 退出时进入

将SLEEPONEXIT位置1,当退出最低优先级的中断服务程序后,MCU会进入休眠模式(SLEEPDEEP为0时)或深度休眠模式(SLEEPDEEP为 1时),而不需执行WFI指令 。

pYYBAGOuUiKADJYpAAC0GU7OciQ366.png

注:在深度休眠模式下,系统将自动关闭高速时钟,如果需要在深度休眠模式下使部分外设仍保持运行,则需要在进入深度休眠模式前,启动相应的低速时钟并将该外设时钟设置为此低速时钟。

在休眠模式或深度休眠模式下,均可通过中断来唤醒CPU,返回到运行模式。如果用户在中断服务程序中执行WFI命令进入休眠(包括深度休眠),则需要比此中断更高优先级的中断才能唤醒CPU,因此,强烈建议在准备进入休眠前,应先处理完所有中断服务程序,并且清除所有中断请求和中断标志,以下是配置进入低功耗模式时所需注意的事项。

•建议在进入低功耗模式前加一段时间的延迟,以免出现上电就进入低功耗模式,无法烧录程序。

•系统可以配置从Deepsleep唤醒后,系统时钟来源是HSI还是进入休眠前的时钟。

•系统进入低功耗模式,端口状态不会发生改变,此时需要客户根据实际应用来配置端口状态来达到理想的功耗值,未用端口建议配置为模拟模式。

•其他的RTC等低功耗运行模块因在深度休眠下高速时钟停止运行,所以如果需要在深度休眠模式下运行RTC等模块,需配置模块时钟源为LSI或LSE。

根据上述内容,可以配置CW32L083的低功耗应用的例程,具体的代码可以查看CW32L083的固件库中PWR_CurrentConsumption这一例程,配置PA04和PA05为引脚输入,并开启下降沿中断,在中断服务函数改变gKeyStatus的值,从而使得MCU在main中进入低功耗休眠模式。


volatile uint8_t gKeyStatus; 
volatile uint32_t gFlagWakeUpIrq = 0; 
int main(void)
{
    RCC_HSI_Enable( RCC_HSIOSC_DIV6); //配置系统时钟为HSI 8M
    InitTick(8000000ul); //初始化SysTick
    LED_Init();        //LED初始化
    BSP_PB_Init(); //按键初始化
    while (1)
    {
       gKeyStatus = 0;//在没有进入低功耗模式前,PC03每间隔1s翻转一次状态
       do
       {
     PC03_TOG();        //翻转LED1
       SysTickDelay(1000);  //延迟1s.
       } while (gKeyStatus == 0);      
       PC03_SETLOW();        //PC03置低
       DeepSleepModeTest();   //进入深度睡眠模式
     }
}

//按键初始化,设置PA05沿下降沿触发中断
void BSP_PB_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    //打开GPIOA时钟
    REGBITS_SET(CW_SYSCTRL->AHBEN, SYSCTRL_AHBEN_GPIOA_Msk);
    GPIO_InitStructure.Pins = GPIO_PIN_5;
    GPIO_InitStructure.Mode = GPIO_MODE_INPUT_PULLUP;
    GPIO_InitStructure.IT = GPIO_IT_FALLING;
    GPIO_Init(CW_GPIOA, &GPIO_InitStructure);
    GPIO_ConfigFilter(CW_GPIOA, GPIO_PIN_5, GPIO_FLTCLK_RC10K);
    //设置GPIOA的中断等级为3
    NVIC_SetPriority(GPIOA_IRQn, 0x03);
    GPIOA_INTFLAG_CLR(GPIOx_ICR_PIN5_Msk );
    NVIC_EnableIRQ(GPIOA_IRQn);
}

//LED I/O初始化
void LED_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    //打开GPIO时钟
    REGBITS_SET(CW_SYSCTRL->AHBEN, SYSCTRL_AHBEN_GPIOC_Msk);
    GPIO_InitStructure.Pins = GPIO_PIN_2 | GPIO_PIN_3;
    GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_Init(CW_GPIOC, &GPIO_InitStructure);
    PC03_SETLOW();
}

void DeepSleepModeTest(void)
{
  GPIO_InitTypeDef GPIO_InitStructure = { 0 };
  PWR_InitTypeDef PWR_InitStructure = { 0 };

  //打开GPIO时钟
  REGBITS_SET(CW_SYSCTRL->AHBEN,SYSCTRL_AHBEN_GPIOA_Msk|\
  SYSCTRL_AHBEN_GPIOB_Msk | \
  SYSCTRL_AHBEN_GPIOC_Msk | SYSCTRL_AHBEN_GPIOF_Msk);

  GPIO_InitStructure.Mode = GPIO_MODE_ANALOG;
  GPIO_InitStructure.IT = GPIO_IT_NONE;
  GPIO_InitStructure.Pins = GPIO_PIN_All;
  GPIO_Init(CW_GPIOA, &GPIO_InitStructure);
  GPIO_Init(CW_GPIOB, &GPIO_InitStructure);
  GPIO_Init(CW_GPIOC, &GPIO_InitStructure);
  GPIO_Init(CW_GPIOF, &GPIO_InitStructure);
  //关闭GPIO时钟
  REGBITS_CLR(CW_SYSCTRL->AHBEN,SYSCTRL_AHBEN_GPIOA_Msk| \
  SYSCTRL_AHBEN_GPIOB_Msk | \
  SYSCTRL_AHBEN_GPIOC_Msk | SYSCTRL_AHBEN_GPIOF_Msk);
  BSP_PB_Init();            //按键初始化
  // 唤醒后自动使用内部高速时钟(HSI)
  RCC_WAKEUPCLK_Config(RCC_SYSCTRL_WAKEUPCLKEN);
  PWR_InitStructure.PWR_Sevonpend = PWR_Sevonpend_Disable;
  PWR_InitStructure.PWR_SleepDeep = PWR_SleepDeep_Enable;
  PWR_InitStructure.PWR_SleepOnExit = PWR_SleepOnExit_Disable;
  PWR_Config(&PWR_InitStructure);
  PWR_GotoLpmMode();
  SYSCLKConfig_DeepSleep();
  LED_Init();
  SysTickDelay(200);
  PC02_SETHIGH();
  }
}
//GPIOA中断服务函数
void GPIOA_IRQHandler(void)
{
 if(REGBITS_GET(CW_GPIOA->ISR, GPIOx_ISR_PIN5_Msk) > 0)
    {
        gKeyStatus = 1;
        GPIOA_INTFLAG_CLR(GPIOx_ICR_PIN5_Msk);//清除CW_GPIO中断标志
    }

}

上述代码可以看到在未进入低功耗模式之前,LED1每1s翻转一次,通过按键KEY2进入低功耗模式后,LED1灯灭,当再次按下KEY2后,重新回到正常的运行模式,LED1每一秒翻转一次。通过测量可以得到,进入到低功耗模式之后,功耗显著降低。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6039

    文章

    44573

    浏览量

    636296
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17173

    浏览量

    351625
  • 微控制
    +关注

    关注

    1

    文章

    51

    浏览量

    14506
  • 32位MCU
    +关注

    关注

    8

    文章

    193

    浏览量

    66718
收藏 人收藏

    评论

    相关推荐

    如何实现EEPROM的低功耗模式

    内容进行擦除和重写。在许多应用中,尤其是在电池供电的设备中,低功耗模式对于延长设备的使用寿命至关重要。以下是实现EEPROM低功耗模式的一些方法: 1. 选择合适的EEPROM类型 选
    的头像 发表于 12-16 16:54 337次阅读

    方案介绍|CW32L010安全低功耗MCU:驱动高速风筒新力量

    芯源半导体CW32L010系列MCU可支持低成本、高性能、低功耗、高度集成的高速风筒方案,以满足市场对高效、安全、智能的高速风筒需求。 本文将介绍武汉芯源半导体CW32L010系列单片
    发表于 12-10 09:57

    武汉芯源半导体CW32芯片重庆地区线下技术交流会成功举办

    2024年10月19日,武汉芯源半导体授权CW32生态社区主办的“CW32芯片-重庆地区技术交流会”在重庆市科技工作者众创之家成功举办。此次交流会汇聚重庆地区的嵌入式开发工程师和电子信息类企业代表,共同探讨CW32芯片在仪器仪表
    的头像 发表于 10-24 10:55 502次阅读

    CW32L010安全低功耗MCU,树立M0+产品行业新标杆!

    PWM 定时器。 CW32L010 可以在 -40℃到 85℃的温度范围内工作,供电电压宽达 1.62V ~ 5.5V。支持 Sleep 和 DeepSleep两种低功耗工作模式CW
    发表于 10-09 10:08

    低功耗8位单片机:技术特性与应用前景!

    分享低功耗8位单片机的技术特性、应用场景及其未来发展前景。 低功耗8位单片机的技术特性: 1. 低功耗设计
    发表于 09-26 14:09

    SD NAND SPI模式:如何实现低功耗运行

    最近,收到客户反馈,使用我们SD NAND过程中,使用SPI模式,对SD完成操作后,SD没有进入低功耗模式,未对SD进行任何操作的情况下测得的功耗仍在20mA左右。经过我们分析,发现S
    的头像 发表于 09-02 11:06 485次阅读
    SD NAND SPI<b class='flag-5'>模式</b>:如何实现<b class='flag-5'>低功耗</b>运行

    基于CW32直流电机PID学习套件介绍

    调速、正反转 电机驱动型号:TB6612 OLED型号:0.96寸_I2C_OLED 产品概述 CW32F030芯片在低功耗应用领域中脱颖而出,其采用前沿的低功耗架构与尖端技术,尤其适宜长时间运作的电池
    的头像 发表于 07-15 16:03 490次阅读
    基于<b class='flag-5'>CW32</b>直流电机PID学习套件<b class='flag-5'>介绍</b>

    【项目展示】基于CW32的遥控循迹小车

    CW32循迹小车.zip_免费高速下载|百度网盘-分享无限制  一、概述 CW32循迹、遥控小车具有循迹和遥控两种功能,小车的硬件模块由CW32F030C8T6小蓝板、智能小车控制底板、BT04-E
    的头像 发表于 05-31 17:33 1348次阅读
    【项目展示】基于<b class='flag-5'>CW32</b>的遥控循迹小车

    产教融合,校企合作——武汉芯源半导体首个CW32嵌入式创新实验室顺利揭牌!

    2024年4月24日上午,武汉芯源半导体有限公司与上海科学技术职业学院共同举办的“CW32嵌入式创新实验室揭牌仪式”在上海科学技术职业学院第二会议室隆重举行。活动现场,武汉芯源半导体与上海
    的头像 发表于 05-06 13:42 452次阅读
    产教融合,校企合作——武汉芯源半导体首个<b class='flag-5'>CW32</b>嵌入式创新实验室顺利揭牌!

    OTP低功耗语音芯片的工作原理与产品特性

    OTP低功耗语音芯片的工作原理:在于其独特的威廉希尔官方网站 设计以及先进的制程技术。该芯片采用了先进的低功耗设计策略,包括低漏电晶体管、动态电压调整以及智能休眠模式等,确保在保持高性能的同时实现低功耗
    的头像 发表于 04-30 08:06 648次阅读
    OTP<b class='flag-5'>低功耗</b>语音芯片的工作原理与产品<b class='flag-5'>特性</b>

    CW32量产烧录工具

    本节主要介绍CW32微控制器的烧录器CW-Writer,以及与之配合的软件CW-Programmer的使用方法。烧录器CW-Writer通过
    的头像 发表于 04-25 15:22 1419次阅读
    <b class='flag-5'>CW32</b>量产烧录工具

    CW32快速开发入门

    CW32快速开发入门
    的头像 发表于 04-24 18:56 2034次阅读
    <b class='flag-5'>CW32</b>快速开发入门

    基于CW32的无刷直流空心杯电机无感方波控制驱动方案

    1. 方案概述 本方案采用CW32F030C8T6作为主控芯片,采用无感方波控制算法控制无刷直流空心杯电机。CW32F030C8T6是一款高性能、低功耗的32位微控制器,具有丰富的片上外设资源,可以
    的头像 发表于 04-24 15:38 2054次阅读
    基于<b class='flag-5'>CW32</b>的无刷直流空心杯电机无感方波控制驱动方案

    CW-DAPLINK调试工具

    CW-DAPLINK是武汉芯源半导体有限公司专为CW32系列MCU的在线调试和编程工具而设计的。 它通过SWD接口和应用单板的MCU进行在线通信。通过CW-DAPLINK的全速USB接口,CW
    的头像 发表于 04-09 17:16 807次阅读
    <b class='flag-5'>CW</b>-DAPLINK调试工具

    ESP32-S3模组是怎么配置低功耗模式的?低功耗模式功耗大概是多少?

    经常有人问S3模组是怎么配置低功耗模式的?低功耗模式功耗大概是多少?下面小启就跟大家讲下S3模组低功耗
    的头像 发表于 01-26 08:03 4482次阅读
    ESP32-S3模组是怎么配置<b class='flag-5'>低功耗</b><b class='flag-5'>模式</b>的?<b class='flag-5'>低功耗</b><b class='flag-5'>模式</b>下<b class='flag-5'>功耗</b>大概是多少?