【经验】芯源CW32系列单片机低功耗模式介绍及UART深度休眠模式示例

2023-05-31 武汉芯源半导体公众号
MCU,32位低功耗微控制器,单片机,CW32 MCU,32位低功耗微控制器,单片机,CW32 MCU,32位低功耗微控制器,单片机,CW32 MCU,32位低功耗微控制器,单片机,CW32

在嵌入式系统的设计中,低功耗设计(Low-Power Design)是许多设计人员必须面对的问题,其原因在于嵌入式系统被广泛应用于便携式和移动性较强的产品中去,而这些产品不是一直都有充足的电源供应,往往是靠电池来供电,所以设计人员从每一个细节来考虑降低功率消耗,从而尽可能地延长电池使用时间。因此,大部分芯片都会有低功耗模式,以芯源半导体CW32L083为例,它就是一个32位低功耗微控制器


一、芯片模式介绍

1.CW32L083工作模式

CW32L083 支持三种工作模式,由内嵌的电源管理模块自动完成电源的统一管理。三种工作模式是: 

• 运行模式(Active mode) 

• 休眠模式(Sleep mode) 

• 深度休眠模式(DeepSleep mode) 

电源上电后,系统自动进入运行模式。用户可通过软件程序,进入休眠或深度休眠两种低功耗运行状态;在低功耗运行状态时,可通过硬件中断触发唤醒机制,使系统返回到运行模式。


2.进入休眠模式或深度休眠模式

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

• 立即进入 

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

• 退出时进入 

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


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


3.退出休眠模式或深度休眠模式

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

使用中断退出休眠模式,用户必须在进入休眠(包括深度休眠)前使能此中断的允许位。

中断唤醒退出深度休眠模式时,CPU 运行状态与退出休眠模式相同。


4.UART控制深度休眠模式

UART控制器工作在双时钟域下,支持在深度休眠模式下进行正常的数据收发,并通过接收完成中断唤醒 MCU回到运行模式。

如果设置了传输时钟 UCLK来源为低速时钟,当系统进入深度休眠模式后,高速时钟将停止,低速时钟保持运行,UART仍可以进行正常的数据收发(波特率仅支持 2400 bps、4800 bps 和 9600 bps)。要实现深度休眠模式下使用 UART 唤醒功能,需在进入深度休眠模式之前使能 UART 接收完成中断(即设置 UARTx_IER.RC 为 1),数据接收完成时,接收完成中断将唤醒MCU恢复到运行模式。

如果设置了传输时钟 UCLK 来源为高速时钟,当系统进入深度休眠模式后,高速时钟会停止运行,UAR不会接收数据。此时,仍可通过GPIO中断唤醒 MCU,实现在深度休眠模式下接收数据,参考配置步骤如下: 

步骤 1:使能 UARTx_RXD 对应引脚的 GPIO 下降沿中断; 

步骤 2:设置 UARTx_CR1.START 为 1,选择 RXD 信号起始位判定方式为低电平; 

步骤 3:使能 UART 接收(即设置 UARTx_CR1.RXEN 为 1); 

步骤 4:进入深度休眠模式; 

步骤 5:等待主机发送数据,产生 GPIO 下降沿中断,唤醒 MCU; 

步骤 6:关闭 RXD 对应引脚的 GPIO 中断功能,等待 RXD 接收完成。


二、实例演示:UART深度休眠模式示例(传输时钟为LSI)

程序运行一段时间后进入深度休眠模式,PC发送数据可唤醒MCU,唤醒后UART轮询接收数据,并存储到TxRxBuffer缓冲区,UART接收到'\n'后不再接收数据,然后将TxRxBuffer缓冲区中的数据回传至PC。传输结束后,LED1闪烁5s,并再次进入深度休眠模式。


1.外设时钟使能

void RCC_Configuration(void)

{

    InitTick(8000000); //复位后延时

    SysTickDelay(1000);

    RCC_HSI_Enable(RCC_HSIOSC_DIV6); //SYSCLK = HSI = 8MHz = HCLK = PCLK

    RCC_LSI_Enable();

    RCC_AHBPeriphClk_Enable(DEBUG_UART_GPIO_CLK | RCC_AHB_PERIPH_GPIOC, ENABLE);

    DEBUG_UART_APBClkENx(DEBUG_UART_CLK, ENABLE); //外设时钟使能

}‍


2.配置GPIO

void GPIO_Configuration(void)

{

    GPIO_InitTypeDef GPIO_InitStructure = {0};

    DEBUG_UART_AFTX; //UART TX RX 复用

    DEBUG_UART_AFRX;

    GPIO_InitStructure.Pins = DEBUG_UART_TX_GPIO_PIN;

    GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;

    GPIO_Init(DEBUG_UART_TX_GPIO_PORT, &GPIO_InitStructure);

    GPIO_InitStructure.Pins = DEBUG_UART_RX_GPIO_PIN;

    GPIO_InitStructure.Mode = GPIO_MODE_INPUT_PULLUP;

    GPIO_Init(DEBUG_UART_RX_GPIO_PORT, &GPIO_InitStructure);

    GPIO_InitStructure.Pins = GPIO_PIN_3; //PC3 LED1

    GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;

    GPIO_Init(CW_GPIOC, &GPIO_InitStructure);

    PC03_SETLOW();

}


3.配置UART

void UART_Configuration(void)

{

    UART_InitTypeDef UART_InitStructure = {0};


    UART_InitStructure.UART_BaudRate = UARTyz_BaudRate; // 波特率

    UART_InitStructure.UART_Over = UART_Over_sp; // 专用采样

    UART_InitStructure.UART_Source = UART_Source_LSI; // 传输时钟源LSI

    UART_InitStructure.UART_UclkFreq = UARTyz_UclkFreq; // 传输时钟UCLK频率

    UART_InitStructure.UART_StartBit = UART_StartBit_FE; // 起始位判定方式

    UART_InitStructure.UART_StopBits = UART_StopBits_1; // 停止位长度

    UART_InitStructure.UART_Parity = UART_Parity_No ; // 校验方式

    UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None;

    UART_InitStructure.UART_Mode = UART_Mode_Rx | UART_Mode_Tx; // 发送/接收使能

UART_Init(DEBUG_UARTx, &UART_InitStructure);

}


4.配置低功耗模式

void PWR_Configuration(void)

{

    PWR_InitTypeDef PWR_InitStructure = {0};//低功耗模式配置结构体指针

    PWR_InitStructure.PWR_Sevonpend = PWR_Sevonpend_Disable;

    PWR_InitStructure.PWR_SleepDeep = PWR_SleepDeep_Enable; //Deep Sleep使能

    PWR_InitStructure.PWR_SleepOnExit = PWR_SleepOnExit_Disable;

    PWR_Config(&PWR_InitStructure);// 低功耗模式配置

}

void PWR_GotoLpmMode(void)//进入睡眠模式

{

    __WFI();

}


5.配置NVIC中断

void NVIC_Configuration(void)

{

    NVIC_SetPriority(DEBUG_UART_IRQ, 0); //优先级,无优先级分组

    NVIC_EnableIRQ(DEBUG_UART_IRQ); //UARTx中断使能

}

void UART2_UART5_IRQHandler(void)

{

 if(UART_GetITStatus(CW_UART5, UART_IT_RC) != RESET)

    {

        UART_ClearITPendingBit(CW_UART5, UART_IT_RC);

}

}


6.发送8位数组

void UART_SendBuf_Polling(UART_TypeDef* UARTx, uint8_t *TxBuf, uint8_t TxCnt)

{

    while(TxCnt)

    {

        UART_SendData_8bit(UARTx, *TxBuf);

        while(UART_GetFlagStatus(UARTx, UART_FLAG_TXE) == RESET);

        TxBuf++;

        TxCnt--;

    }

    while(UART_GetFlagStatus(UARTx, UART_FLAG_TXBUSY) == SET);

}


7.接收8位数组

uint8_t UART_RecvBuf_Polling(UART_TypeDef* UARTx, uint8_t *RxBuf)

{

    uint8_t RxCnt = 0;

    RxBuf[RxCnt] = UART_ReceiveData_8bit(UARTx);

    RxCnt++;

    do

    { 

        while(UART_GetFlagStatus(UARTx, UART_FLAG_RC) == RESET); //等待RC

        UART_ClearFlag(UARTx, UART_FLAG_RC); //清RC

        if(UART_GetFlagStatus(UARTx, UART_FLAG_PE|UART_FLAG_FE)) //ERROR: PE or FE

        {

            UART_ClearFlag(UARTx, UART_FLAG_PE|UART_FLAG_FE);

            RxCnt = 0x00;

        }

        else

        {

            RxBuf[RxCnt] = UART_ReceiveData_8bit(UARTx);

            RxCnt++;

        }

    }

    while(RxBuf[RxCnt-1] != '\n');

    return RxCnt;

}


8.主程序

int32_t main(void)

    RCC_Configuration();//配置RCC

    GPIO_Configuration();//配置GPIO

    UART_Configuration();//配置UART

    PWR_Configuration();//配置低功耗模式

    NVIC_Configuration();//配置NVIC

    InitTick(HCLKFREQ); //初始化SysTick

    RCC_WAKEUPCLK_Config(RCC_SYSCTRL_WAKEUPCLKDIS); //DeepSleep唤醒时,保持原系统时钟来源


    UART_SendString(DEBUG_UARTx, "\r\nCW32L083 UART DeepSleep mode LSE/LSI\r\n");

    while(1)

    {

        //进入深度休眠模式

        UART_SendString(DEBUG_UARTx, "\r\nEnter DeepSleep mode\r\n");

        UART_SendString(DEBUG_UARTx, "\r\nPC send data to wake up MCU\r\n");

        UART_ITConfig(DEBUG_UARTx, UART_IT_RC, ENABLE); //使能UARTx RC中断

        PWR_GotoLpmMode();

        UART_ITConfig(CW_UART5, UART_IT_RC, DISABLE); //失能UARTx RC中断

        //唤醒后轮询收发

        TxRxBufferSize = UART_RecvBuf_Polling(DEBUG_UARTx, TxRxBuffer); 

        UART_SendBuf_Polling(DEBUG_UARTx, TxRxBuffer, TxRxBufferSize);

        for(int i = 0; i<10; i++)  //闪灯

        {

            PC03_TOG();

            SysTickDelay(500);

        }

    }

}


9.测试结果

结果显示,通过PC发送123456后唤醒MCU, 唤醒后UART轮询接收数据,并存储到TxRxBuffer缓冲区,UART接收到'\n'后不再接收数据,然后将TxRxBuffer缓冲区中的数据回传至PC收到123456。传输结束后,LED1闪烁5s,并再次进入深度休眠模式。

授权代理商:世强先进(深圳)科技股份有限公司
技术资料,数据手册,3D模型库,原理图,PCB封装文件,选型指南来源平台:世强硬创平台www.sekorm.com
现货商城,价格查询,交期查询,订货,现货采购,在线购买,样品申请渠道:世强硬创平台电子商城www.sekorm.com/supply/
概念,方案,设计,选型,BOM优化,FAE技术支持,样品,加工定制,测试,量产供应服务提供:世强硬创平台www.sekorm.com
集成电路,电子元件,电子材料,电气自动化,电机,仪器全品类供应:世强硬创平台www.sekorm.com
  • +1 赞 0
  • 收藏
  • 评论 0

本文由ll转载自武汉芯源半导体公众号,原文标题为:CW32单片机UART低功耗模式介绍,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

平台合作

评论

   |   

提交评论

全部评论(0

暂无评论

相关推荐

【经验】武汉芯源CW32系列MCU PWM输出功能指南

脉冲宽度调制(PWM),是在数字电路中达到模拟输出效果的一种手段,常见应用电机调速,照明灯调光等。在MCU中,主要通过定时器单元来时实现PWM输出,以CW32L083VxTx为例,LPTIM,GTIM,ATIM都可以输出PWM信号。

2023-02-23 -  设计经验 代理服务 技术支持 采购服务

武汉芯源CW32系列单片机数字电压电流表产品硬件设计指南

本文基于武汉芯源CW32系列单片机,介绍数字电压电流表产品硬件设计指南,希望对各位工程师有所帮助。

2024-06-20 -  设计经验 代理服务 技术支持 采购服务

【经验】CW32F030C8T6单片机如何通过看手册配置时钟树

本章简单展示了如何查找手册来配置寄存器,且再次强调库函数的本质就是操作寄存器。单片机都会有一个时钟树,时钟树的图可以在编程手册(不是数据表和内核手册)中找到。部分单片机想要工作在高工作频率下,需要设置flash等待时间并打开缓存和预取指令使能。

2023-10-02 -  设计经验 代理服务 技术支持 采购服务

武汉芯源半导体CW32L010系列安全低功耗MCU:驱动高速风筒新力量

MCU作为高速风简控制系统的核心,承担着传感器数据采集、高速电机控制、用户界面交互以及安全保护等多重任务。武汉芯源半导体CW32L010系列MCU可支持低成本、高性能、低功耗、高度集成的高速风筒方案,以满足市场对高效、安全、智能的高速风筒需求。

2024-12-12 -  应用方案 代理服务 技术支持 采购服务

【经验】芯源CW32系列MCU电容式触摸按键设计指南

芯源半导体的CW32系列MCU电容式触摸按键设计指南向客户提供利用CW32内部资源结合软件编程实现电容式触摸按键有效触摸检测的方法。本指南内容重点在于工作原理、软件检测过程以及调试指引。通过本文可了解到如何利用内置电压比较器和内置定时器及软件配合,实现灵活方便的按键检测。在介绍标准演示板和演示软件的性能参数同时,还会给出详细的调试建议以及设计参数选择倾向分析,帮助客户快速自信地完成设计并实施调试。

2023-07-27 -  设计经验 代理服务 技术支持 采购服务

CW32L010 ARM® Cortex®-M0+ 32 位低功耗微控制器用户手册

本手册为CW32L010微控制器用户手册,提供了关于如何使用该微控制器内存和外设的详细信息。内容涵盖系统架构、存储器组织、电源控制、复位和时钟管理、中断系统、RAM和FLASH存储器、GPIO端口、CRC、RTC、定时器、看门狗定时器、UART、SPI、I2C、红外调制发送器、ADC、模拟电压比较器、低电压检测器、调试接口、数字签名等。手册详细介绍了各个模块的功能、工作原理、编程方法和注意事项。

武汉芯源  -  微控制器,ARM® CORTEX®-M0+ 32位低功耗微控制器,CW32L010

2024 年10月  - 用户指南  - Rev 1.1 代理服务 技术支持 采购服务

【应用】基于CW32L系列MCU的指夹式血氧仪,实现更高精度测量

主控芯片建议使用CW32F003(20pin)资源足够,还便宜。CW32抗干扰性能可轻松通过ESD 8KV认证,加之优秀的ADC性能,是血氧仪类产品的不二之选

2023-09-07 -  应用方案 代理服务 技术支持 采购服务

介绍MCU的ARM处理器——Cortex-M0+内核

ARM Cortex-M0+是2012年3月14日ARM公司发布的一款低功耗效率、能效最高的ARM处理器,可用于存在设计约束的嵌入式应用。它具有最小的硅面积和极少的代码量,从而使开发人员能够以16和8位的价位实现32位性能。处理器的低门数使其能够部署在需要简单功能的应用中。本文中武汉芯源来给大家介绍Cortex-M0+内核,希望对各位工程师有所帮助。

2024-05-31 -  技术探讨 代理服务 技术支持 采购服务

CW32L010 ARM®Cortex®-M0+低功耗32位MCU参考手册

本资料为CW32L010微控制器参考手册,旨在为应用开发者提供关于如何使用该微控制器内存和外设的完整信息。手册内容涵盖系统架构、内存组织、电源控制、复位和时钟控制、中断、RAM和FLASH内存、GPIO、CRC、RTC、定时器、看门狗定时器、UART、SPI、I2C、红外调制发射器、ADC、电压比较器、低压检测器、调试接口和数字签名等模块的详细说明和编程指南。

武汉芯源  -  ARM® CORTEX®-M0+ LOW-POWER 32-BIT MCU,ARM®CORTEX®-M0+低功耗32位MCU,MCU,CW32L010

2024/9/23  - 用户指南  - Rev 1.0 代理服务 技术支持 采购服务

【技术】武汉芯源CW32单片机UART基本数据收发功能介绍

通用异步收发器是一种通用串行数据总线,常用于系统内各子模块间的数据交换。本文将以武汉芯源推出的CW32系列单片机的CW32L083为例,介绍UART基本数据收发功能。

2023-04-25 -  技术探讨 代理服务 技术支持 采购服务

【经验】解析武汉芯源半导体MCU CW32L083模拟电压比较器的使用方法

武汉芯源半导体MCU CW32L083内部集成2个模拟电压比较器(VC),用于比较两路模拟输入电压,并将比较结果从引脚输出。本文中将为大家解析武汉芯源半导体MCU CW32L083模拟电压比较器的使用方法。

2022-12-21 -  设计经验 代理服务 技术支持 采购服务

Application of CW32L083 Series MCU in Air Purifiers, Supported by Built in Independent Calibration RTC

The air purifier introduced in this article adopts the CW32L083 series microcontroller as the control core of the air purifier, and combines important components such as sensors, displays, drivers, and wireless transceivers to complete the required functions of the controller system.

2024-11-05 -  应用方案 代理服务 技术支持 采购服务

【产品】武汉芯源CW32L083系列MCU中断系统介绍

本文针对武汉芯源CW32L083系列MCU,同系列产品亦可参考。ARM® Cortex®-M0+内核的嵌套向量中断控制器(NVIC),用于管理中断和异常。NVIC和处理器内核紧密相连,可以实现低延迟的异常和中断处理。

2022-12-02 -  产品 代理服务 技术支持 采购服务

如何使用CW32单片机通过ESP8266连接OneNET物联网平台,发送温湿度数据到平台,并接受平台的云控制?

本实验使用到了CW32-48F大学计划开发板、DHT11温湿度传感器模块、ESP8266WIFI模块及Keil5开发环境。

2023-12-06 -  设计经验 代理服务 技术支持 采购服务

M0+产品行业新标杆诞生,武汉芯源CW32L010安全低功耗MCU集合多项技术性能优势

2024年9月26日,武汉芯源半导体带着最新产品CW32L010安全低功耗MCU作客电巢直播间,举行了一场璀璨的XR技术新品发布会,此次直播,武汉芯源半导体技术总监 张亚凡、北中国区销售总监 孙秀艳与大家分享了武汉芯源半导体的发展历程和重要时刻,全面介绍和讲解了新品CW32L010实现的技术优势。

2024-11-05 -  原厂动态 代理服务 技术支持 采购服务
展开更多

电子商城

查看更多

品牌:武汉芯源

品类:通用MCU

价格:¥8.4750

现货: 300,010

品牌:武汉芯源

品类:MCU

价格:

现货: 200,000

品牌:武汉芯源

品类:通用MCU

价格:¥7.0625

现货: 300,000

品牌:武汉芯源

品类:通用MCU

价格:¥7.6275

现货: 300,000

品牌:武汉芯源

品类:通用MCU

价格:¥4.8025

现货: 300,000

品牌:武汉芯源

品类:通用MCU

价格:¥7.6275

现货: 300,000

品牌:武汉芯源

品类:通用MCU

价格:¥4.8025

现货: 300,000

品牌:武汉芯源

品类:通用MCU

价格:¥7.0625

现货: 300,000

品牌:武汉芯源

品类:通用MCU

价格:¥5.6500

现货: 300,000

品牌:武汉芯源

品类:MCU

价格:

现货: 100,000

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

现货市场

查看更多

品牌:RENESAS

品类:16-BIT MCU

价格:¥5.5190

现货:910,635

品牌:RENESAS

品类:MCU

价格:¥5.1500

现货:200,000

品牌:RENESAS

品类:microcontroller

价格:¥2.8532

现货:188,410

品牌:恒烁

品类:MCU

价格:¥1.0800

现货:154,600

品牌:ADI

品类:MCU

价格:¥6.6000

现货:100,000

品牌:RENESAS

品类:MCU

价格:¥5.8041

现货:86,925

品牌:RENESAS

品类:32-BIT GENERAL MCU

价格:¥7.3800

现货:76,715

品牌:RENESAS

品类:32-BIT GENERAL MCU

价格:¥15.3000

现货:75,000

品牌:Microchip

品类:MCU

价格:¥9.0000

现货:64,841

品牌:ST

品类:MCU

价格:¥15.5600

现货:58,800

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

服务

查看更多

压力传感器定制

可定制板装式压力传感器支持产品量程从5inch水柱到100 psi气压;数字输出压力传感器压力范围0.5~60inH2O,温度补偿范围-20~85ºС;模拟和数字低压传感器可以直接与微控制器通信,具备多种小型SIP和DIP封装可选择。

提交需求>

TFT LCD液晶显示屏/模组定制

可定制显示屏的尺寸0.96”~15.6”,分辨率80*160~3840*2160,TN/IPS视角,支持RGB、MCU、SPI、MIPI、LVDS、HDMI接口,配套定制玻璃、背光、FPCA/PCBA。

最小起订量: 1000 提交需求>

查看更多

授权代理品牌:接插件及结构件

查看更多

授权代理品牌:部件、组件及配件

查看更多

授权代理品牌:电源及模块

查看更多

授权代理品牌:电子材料

查看更多

授权代理品牌:仪器仪表及测试配组件

查看更多

授权代理品牌:电工工具及材料

查看更多

授权代理品牌:机械电子元件

查看更多

授权代理品牌:加工与定制

世强和原厂的技术专家将在一个工作日内解答,帮助您快速完成研发及采购。
我要提问

954668/400-830-1766(工作日 9:00-18:00)

service@sekorm.com

研发客服
商务客服
服务热线

联系我们

954668/400-830-1766(工作日 9:00-18:00)

service@sekorm.com

投诉与建议

E-mail:claim@sekorm.com

商务合作

E-mail:contact@sekorm.com

收藏
收藏当前页面