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

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

3天内不再提示

基于CW32L083评估板的简易低功耗功能测试

CW32生态社区 来源:CW32生态社区 2023-08-28 14:16 次阅读

使用CW32L083的评估板完成简易低功耗例程实验。

功能定义如下:在正常运行模式下,LED1每1s翻转一次。当按下KEY2按键时,LED1灯灭,进入低功耗模式。当再次按下KEY2后,重新回到正常的运行模式,LED1每一秒翻转一次。通过以上方式可以测量,正常运行模式与低功耗模式的功耗。

0767af74-4556-11ee-a2ef-92fbcf53809c.png

查看CW32L083评估板的原理图,KEY2按键对应的GPIO口为PA05口,当键按下时,PA05读入为低电平。LED1指示灯对应的GPIO口为PC03,当PC03端口输出高电平时,指示灯亮。

配置为引脚输入,并开启下降沿中断,在中断服务函数改变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();
PC02_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(); //进入休眠


  RCC_HSI_Enable( RCC_HSIOSC_DIV6); //配置系统时钟为HSI 8M 
InitTick(8000000ul); //初始化SysTick 
LED_Init();         //LED初始化     
  } 
}
 
//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中断标志
     } 
}

休眠配置寄存器定义如下

078f5038-4556-11ee-a2ef-92fbcf53809c.png

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

运行结果如下

从外界给L083开发板供3.3V电,使用常见的万用表测试。

运行模式下LED1指示灯灭时的功耗为2.955MA。

07bedcea-4556-11ee-a2ef-92fbcf53809c.png

运行模式下LED1指示灯亮时的功耗为3.849MA。

08db23ae-4556-11ee-a2ef-92fbcf53809c.png

进入超低功耗模式下功耗为0.64uA。

09351a80-4556-11ee-a2ef-92fbcf53809c.png

这是本期测试的简易低功耗功能测试,下期我们就用UART来控制深度休眠模式的实现。

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

    关注

    240

    文章

    23128

    浏览量

    658234
  • 低功耗
    +关注

    关注

    10

    文章

    2362

    浏览量

    103580
  • uart
    +关注

    关注

    22

    文章

    1227

    浏览量

    101160
  • 评估板
    +关注

    关注

    1

    文章

    505

    浏览量

    29273
  • CW32
    +关注

    关注

    1

    文章

    183

    浏览量

    575

原文标题:外部中断唤醒实验 ——以CW32L083VXTX评估板为实验对象,进行低功耗测试系列实验讲解(5)

文章出处:【微信号:CW32生态社区,微信公众号:CW32生态社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于CW32L083的线控器方案设计

    基于武汉芯源推出的CW32L083设计的空调线控器产品.
    的头像 发表于 06-25 14:23 5w次阅读
    基于<b class='flag-5'>CW32L083</b>的线控器方案设计

    CW32L083 RTC初始化设置

    介绍CW32L083的RTC初始化设置
    的头像 发表于 06-24 10:16 1468次阅读
    <b class='flag-5'>CW32L083</b> RTC初始化设置

    基于CW32L083设计的超低功耗温湿度计

    基于CW32L083设计的超低功耗温湿度计,可以用电池供电,实现数年超长工作时间。
    的头像 发表于 06-25 12:08 2.7w次阅读
    基于<b class='flag-5'>CW32L083</b>设计的超<b class='flag-5'>低功耗</b>温湿度计

    基于CW32L083的空调遥控器方案设计

    基于武汉芯源半导体推出的CW32L083而设计的的空调遥控器方案
    的头像 发表于 06-21 16:03 1480次阅读
    基于<b class='flag-5'>CW32L083</b>的空调遥控器方案设计

    移植RT-Thread nano到CW32L083

    移植RT-Thread Nano到CW32L083开发上,并成功运行。
    的头像 发表于 07-03 09:04 2.2w次阅读
    移植RT-Thread nano到<b class='flag-5'>CW32L083</b>

    CW32L083VXTX为对象进行低功耗测试系列实验讲解(4)

    CW32L083VxTx StartKit 评估为用户提供一种经济且灵活的方式使用 CW32L083VxTx 芯片构建系统原型,可进行性能、功耗
    的头像 发表于 08-25 09:14 1241次阅读
    以<b class='flag-5'>CW32L083</b>VXTX<b class='flag-5'>板</b>为对象进行<b class='flag-5'>低功耗</b><b class='flag-5'>测试</b>系列实验讲解(4)

    请问如何优化CW32L083微控制器的功耗

    在进行低功耗设计时,如何优化CW32L083系列微控制器的功耗
    发表于 01-17 07:16

    武汉芯源Cortex-M0+ 32位低功耗MCU CW32L083系列产品介绍

    ,且有LCD显示、低功耗要求的应用场合,该系列目前可提供LQFP64、LQFP80、LQFP100三种封装形式。CW32L083系列封装展示01 CW32L083系列主要功能
    发表于 08-24 09:12

    分享武汉芯源CW32L083VxTx_StartKit开发资料

    CW32L083VxTx StartKit 评估为用户提供一种经济且灵活的方式使用 CW32L083VxTx构建系统原型。特别适用于超低功耗
    发表于 06-08 10:00

    CW32L083产品介绍

    CW32L083是一款基于eFlash的单芯片低功耗微控制器,集成了ARM®Cortex®-M0+ 核心,主频高达64MHz,高速嵌入式存储器(高达256K字节的FLASH和 高达24K字节
    发表于 09-14 06:41

    CW32L083微控制器数据手册

    CW32L083 是基于 eFlash 的单芯片低功耗微控制器,集成了主频高达 64MHz 的 ARM® Cortex®-M0+ 内核、高速嵌入式存储器(多至 256K 字节 FLASH 和多至
    发表于 09-14 06:27

    武汉芯源CW32L083开发介绍

    CW32L083VxTxStartKit评估为用户提供一种经济且灵活的方式使用CW32L083VxTx芯片构建系统原型,可进行性能、功耗
    的头像 发表于 10-20 11:41 846次阅读
    武汉芯源<b class='flag-5'>CW32L083</b>开发<b class='flag-5'>板</b>介绍

    CW32L083实现SHT30驱动

    CW32L083驱动SHT30,并显示到LCD屏上。
    的头像 发表于 06-22 09:57 2984次阅读
    <b class='flag-5'>CW32L083</b>实现SHT30驱动

    CW32L083不同主频功耗测试

    频率固定为48MHz,频率精度低于HSE时钟。RC振荡器输出时钟的频率受芯片加工过程、工作电压、环境温度等因素影响,CW32L083提供了HSIOSC时钟频率校准
    的头像 发表于 06-27 16:21 737次阅读
    <b class='flag-5'>CW32L083</b>不同主频<b class='flag-5'>功耗</b><b class='flag-5'>测试</b>

    CW32L083如何实现AUTOTRIM时钟校准?

    CW32L083如何实现AUTOTRIM时钟校准?
    的头像 发表于 11-07 17:17 606次阅读
    <b class='flag-5'>CW32L083</b>如何实现AUTOTRIM时钟校准?