chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

CW32 UART低功耗模式介紹

CW32生態(tài)社區(qū) ? 來源:CW32生態(tài)社區(qū) ? 2025-10-09 17:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

嵌入式系統(tǒng)的設(shè)計(jì)中,低功耗設(shè)計(jì)(Low-Power Design)是許多設(shè)計(jì)人員必須面對的問題,其原因在于嵌入式系統(tǒng)被廣泛應(yīng)用于便攜式和移動(dòng)性較強(qiáng)的產(chǎn)品中去,而這些產(chǎn)品不是一直都有充足的電源供應(yīng),往往是靠電池來供電,所以設(shè)計(jì)人員從每一個(gè)細(xì)節(jié)來考慮降低功率消耗,從而盡可能地延長電池使用時(shí)間。因此,大部分芯片都會(huì)有低功耗模式,以CW32L083為例,它就是一個(gè)32位低功耗微控制器。

一、芯片模式介紹

1.CW32L083工作模式

CW32L083 支持三種工作模式,由內(nèi)嵌的電源管理模塊自動(dòng)完成電源的統(tǒng)一管理。三種工作模式是:

? 運(yùn)行模式(Active mode)

? 休眠模式(Sleep mode)

? 深度休眠模式(DeepSleep mode)

電源上電后,系統(tǒng)自動(dòng)進(jìn)入運(yùn)行模式。用戶可通過軟件程序,進(jìn)入休眠或深度休眠兩種低功耗運(yùn)行狀態(tài);在低功耗運(yùn)行狀態(tài)時(shí),可通過硬件中斷觸發(fā)喚醒機(jī)制,使系統(tǒng)返回到運(yùn)行模式。

2.進(jìn)入休眠模式或深度休眠模式

使用 M0+ 內(nèi)核的 ARM 等待中斷專用指令,WFI(Wait for Interrupt),配合 M0+ 內(nèi)核的系統(tǒng)控制寄存器(SCR, System Control Register)的 SLEEPONEXIT 和 SLEEPDEEP 位域,可實(shí)現(xiàn)立即進(jìn)入或退出(中斷服務(wù)程序)時(shí)進(jìn) 入休眠模式或深度休眠模式。

? 立即進(jìn)入

執(zhí)行 WFI 指令,MCU 將立即進(jìn)入休眠模式(SLEEPDEEP 為 0 時(shí))或深度休眠模式(SLEEPDEEP 為 1 時(shí))

? 退出時(shí)進(jìn)入

將 SLEEPONEXIT 位置 1,當(dāng)退出最低優(yōu)先級的中斷服務(wù)程序后,MCU 會(huì)進(jìn)入休眠模式(SLEEPDEEP 為 0 時(shí)) 或深度休眠模式(SLEEPDEEP 為 1 時(shí)),而不需執(zhí)行 WFI 指令 。

在深度休眠模式下,系統(tǒng)將自動(dòng)關(guān)閉高速時(shí)鐘。如用戶需要在深度休眠模式下使部分外設(shè)仍保持運(yùn)行,則須在進(jìn)入深度休眠模式前,啟動(dòng)相應(yīng)的低速時(shí)鐘并將該外設(shè)時(shí)鐘設(shè)置為此低速時(shí)鐘。

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

在休眠模式或深度休眠模式下,均可通過中斷來喚醒 CPU,返回到運(yùn)行模式。但是,值得注意的是,如果用戶在中斷服務(wù)程序中執(zhí)行 WFI 命令進(jìn)入休眠(包括深度休眠),則需要比此中斷更高優(yōu)先級的中斷才能喚醒 CPU,因此,我們強(qiáng)烈建議用戶在準(zhǔn)備進(jìn)入休眠前,應(yīng)先處理完所有中斷服務(wù)程序,并且清除所有中斷請求和中斷標(biāo)志。

使用中斷退出休眠模式,用戶必須在進(jìn)入休眠(包括深度休眠)前使能此中斷的允許位。

中斷喚醒退出深度休眠模式時(shí),CPU 運(yùn)行狀態(tài)與退出休眠模式相同。

4.UART控制深度休眠模式

UART控制器工作在雙時(shí)鐘域下,支持在深度休眠模式下進(jìn)行正常的數(shù)據(jù)收發(fā),并通過接收完成中斷喚醒 MCU回到運(yùn)行模式。

如果設(shè)置了傳輸時(shí)鐘 UCLK來源為低速時(shí)鐘,當(dāng)系統(tǒng)進(jìn)入深度休眠模式后,高速時(shí)鐘將停止,低速時(shí)鐘保持運(yùn)行,UART仍可以進(jìn)行正常的數(shù)據(jù)收發(fā)(波特率僅支持 2400 bps、4800 bps 和 9600 bps)。 要實(shí)現(xiàn)深度休眠模式下使用 UART 喚醒功能,需在進(jìn)入深度休眠模式之前使能 UART 接收完成中斷(即設(shè)置 UARTx_IER.RC 為 1),數(shù)據(jù)接收完成時(shí),接收完成中斷將喚醒MCU恢復(fù)到運(yùn)行模式。

如果設(shè)置了傳輸時(shí)鐘 UCLK 來源為高速時(shí)鐘,當(dāng)系統(tǒng)進(jìn)入深度休眠模式后,高速時(shí)鐘會(huì)停止運(yùn)行,UAR不會(huì)接收數(shù)據(jù)。此時(shí),仍可通過GPIO中斷喚醒 MCU,實(shí)現(xiàn)在深度休眠模式下接收數(shù)據(jù),參考配置步驟如下:

步驟 1:使能 UARTx_RXD 對應(yīng)引腳的 GPIO 下降沿中斷;

步驟 2:設(shè)置 UARTx_CR1.START 為 1,選擇 RXD 信號起始位判定方式為低電平;

步驟 3:使能 UART 接收(即設(shè)置 UARTx_CR1.RXEN 為 1);

步驟 4:進(jìn)入深度休眠模式;

步驟 5:等待主機(jī)發(fā)送數(shù)據(jù),產(chǎn)生 GPIO 下降沿中斷,喚醒 MCU;

步驟 6:關(guān)閉 RXD 對應(yīng)引腳的 GPIO 中斷功能,等待 RXD 接收完成。

二、實(shí)例演示

UART深度休眠模式示例(傳輸時(shí)鐘為LSI)

程序運(yùn)行一段時(shí)間后進(jìn)入深度休眠模式,PC發(fā)送數(shù)據(jù)可喚醒MCU,喚醒后UART輪詢接收數(shù)據(jù),并存儲(chǔ)到TxRxBuffer緩沖區(qū),UART接收到'n'后不再接收數(shù)據(jù),然后將TxRxBuffer緩沖區(qū)中的數(shù)據(jù)回傳至PC。傳輸結(jié)束后,LED1閃爍5s,并再次進(jìn)入深度休眠模式。

1.外設(shè)時(shí)鐘使能

void RCC_Configuration(void)
{
    InitTick(8000000); //復(fù)位后延時(shí)
    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); //外設(shè)時(shí)鐘使能
}

2.配置GPIO

void GPIO_Configuration(void)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    DEBUG_UART_AFTX; //UART TX RX 復(fù)用
    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; // 傳輸時(shí)鐘源LSI
    UART_InitStructure.UART_UclkFreq = UARTyz_UclkFreq; // 傳輸時(shí)鐘UCLK頻率
    UART_InitStructure.UART_StartBit = UART_StartBit_FE; // 起始位判定方式
    UART_InitStructure.UART_StopBits = UART_StopBits_1; // 停止位長度
    UART_InitStructure.UART_Parity = UART_Parity_No ; // 校驗(yàn)方式
    UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None;
    UART_InitStructure.UART_Mode = UART_Mode_Rx | UART_Mode_Tx; // 發(fā)送/接收使能
UART_Init(DEBUG_UARTx, &UART_InitStructure);
}

4.配置低功耗模式

void PWR_Configuration(void)
{
    PWR_InitTypeDef PWR_InitStructure = {0};//低功耗模式配置結(jié)構(gòu)體指針
    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)//進(jìn)入睡眠模式
{
    __WFI();
}

5.配置NVIC中斷

void NVIC_Configuration(void)
{
    NVIC_SetPriority(DEBUG_UART_IRQ, 0); //優(yōu)先級,無優(yōu)先級分組
    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.發(fā)送8位數(shù)組

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位數(shù)組

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喚醒時(shí),保持原系統(tǒng)時(shí)鐘來源
    UART_SendString(DEBUG_UARTx, "rnCW32L083 UART DeepSleep mode LSE/LSIrn");
    while(1)
    {
        //進(jìn)入深度休眠模式
        UART_SendString(DEBUG_UARTx, "rnEnter DeepSleep modern");
        UART_SendString(DEBUG_UARTx, "rnPC send data to wake up MCUrn");
        UART_ITConfig(DEBUG_UARTx, UART_IT_RC, ENABLE); //使能UARTx RC中斷
        PWR_GotoLpmMode();
        UART_ITConfig(CW_UART5, UART_IT_RC, DISABLE); //失能UARTx RC中斷
        //喚醒后輪詢收發(fā)
        TxRxBufferSize = UART_RecvBuf_Polling(DEBUG_UARTx, TxRxBuffer);
        UART_SendBuf_Polling(DEBUG_UARTx, TxRxBuffer, TxRxBufferSize);
        for(int i = 0; i

9.測試結(jié)果

結(jié)果顯示,通過PC發(fā)送123456后喚醒MCU, 喚醒后UART輪詢接收數(shù)據(jù),并存儲(chǔ)到TxRxBuffer緩沖區(qū),UART接收到'n'后不再接收數(shù)據(jù),然后將TxRxBuffer緩沖區(qū)中的數(shù)據(jù)回傳至PC收到123456。傳輸結(jié)束后,LED1閃爍5s,并再次進(jìn)入深度休眠模式。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5174

    文章

    19973

    瀏覽量

    324335
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1286

    瀏覽量

    105506
  • CW32
    +關(guān)注

    關(guān)注

    1

    文章

    278

    瀏覽量

    1542
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    基于CW32的MP3播放器設(shè)計(jì)

    使用武漢芯源半導(dǎo)體CW32系列MCU作為主控一款小巧的MP3。采用CW32L系列低功耗芯片。
    的頭像 發(fā)表于 09-06 16:45 ?2584次閱讀
    基于<b class='flag-5'>CW32</b>的MP3播放器設(shè)計(jì)

    【應(yīng)用筆記】CW32 自舉程序中使用的 ISP 協(xié)議

    提供的 ISP 模式,通過 UART 串口方便地實(shí)現(xiàn)對 CW32 微控制器片上 FLASH主存儲(chǔ)器的擦除和燒寫。本應(yīng)用筆記將介紹如何進(jìn)入 CW32
    發(fā)表于 06-06 13:26

    基于低功耗32位MCU CW32系列的智能溫控器的應(yīng)用

    時(shí)鐘和日歷--支持由 Sleep/DeepSleep 模式喚醒●段碼屏顯示綜上可以看出, CW32系列MCU既可以縮短運(yùn)算處理時(shí)間,又能在超低能耗模式下實(shí)現(xiàn)自主運(yùn)行,還具有段碼屏顯示,非常適合
    發(fā)表于 08-16 10:20

    CW32 低功耗模式的特性介紹

    CW32系列芯片支持3種工作模式,運(yùn)行模式、休眠模式以及深度休眠模式,本文以CW32L083為例
    發(fā)表于 12-30 10:51

    CW32為表計(jì)數(shù)智化助力,現(xiàn)身青島環(huán)球表計(jì)大會(huì)

    的支持表計(jì)應(yīng)用。 具體到表計(jì)市場的應(yīng)用,技術(shù)總監(jiān)張總介紹CW32在智能水表、智能燃?xì)獗硪约爸悄茈姳砩系膽?yīng)用。 這也體現(xiàn)了低功耗CW32L系列已得到部分智能表計(jì)市場的認(rèn)可。
    發(fā)表于 05-05 14:24

    CW32單片機(jī)在智能馬桶的應(yīng)用介紹

    和調(diào)節(jié)。本文將介紹CW32單片機(jī)在智能馬桶的詳細(xì)應(yīng)用。 圖:CW32的智能馬桶控制板 CW32單片機(jī)在智能馬桶的應(yīng)用介紹 1.溫度感應(yīng)與控
    發(fā)表于 12-20 10:06

    基于低功耗32位MCU CW32系列的智能溫控器的應(yīng)用

    CW32系列MCU既可以縮短運(yùn)算處理時(shí)間,又能在超低能耗模式下實(shí)現(xiàn)自主運(yùn)行,還具有段碼屏顯示,非常適合低功耗要求的智能溫控器。
    的頭像 發(fā)表于 08-16 10:49 ?1280次閱讀
    基于<b class='flag-5'>低功耗</b>32位MCU <b class='flag-5'>CW32</b>系列的智能溫控器的應(yīng)用

    CW32 低功耗模式的特性介紹

    CW32系列芯片支持3種工作模式,運(yùn)行模式、休眠模式以及深度休眠模式,本文以CW32L083為例
    的頭像 發(fā)表于 12-30 10:53 ?1869次閱讀
    <b class='flag-5'>CW32</b> <b class='flag-5'>低功耗</b><b class='flag-5'>模式</b>的特性<b class='flag-5'>介紹</b>

    CW32單片機(jī)UART波特率設(shè)置介紹

    CW32單片機(jī)UART波特率設(shè)置介紹
    的頭像 發(fā)表于 10-24 17:35 ?1543次閱讀
    <b class='flag-5'>CW32</b>單片機(jī)<b class='flag-5'>UART</b>波特率設(shè)置<b class='flag-5'>介紹</b>

    CW32單片機(jī)UART基本數(shù)據(jù)收發(fā)功能介紹

    CW32單片機(jī)UART基本數(shù)據(jù)收發(fā)功能介紹
    的頭像 發(fā)表于 10-24 16:50 ?1400次閱讀
    <b class='flag-5'>CW32</b>單片機(jī)<b class='flag-5'>UART</b>基本數(shù)據(jù)收發(fā)功能<b class='flag-5'>介紹</b>

    CW32的SPI單工模式主從通信介紹

    CW32的SPI單工模式主從通信介紹
    的頭像 發(fā)表于 10-24 15:50 ?1605次閱讀
    <b class='flag-5'>CW32</b>的SPI單工<b class='flag-5'>模式</b>主從通信<b class='flag-5'>介紹</b>

    CW32 PWM輸出功能介紹

    CW32 PWM輸出功能介紹
    的頭像 發(fā)表于 09-27 16:12 ?1740次閱讀
    <b class='flag-5'>CW32</b> PWM輸出功能<b class='flag-5'>介紹</b>

    CW32實(shí)時(shí)時(shí)鐘(RTC)介紹

    CW32實(shí)時(shí)時(shí)鐘(RTC)介紹
    的頭像 發(fā)表于 10-24 15:36 ?1841次閱讀
    <b class='flag-5'>CW32</b>實(shí)時(shí)時(shí)鐘(RTC)<b class='flag-5'>介紹</b>

    應(yīng)用筆記-CW32 自舉程序中使用的 ISP 協(xié)議

    ,通過UART串口方便地實(shí)現(xiàn)對CW32微控制器片上FLASH主存儲(chǔ)器的擦除和燒寫。本應(yīng)用筆記將介紹如何進(jìn)入CW32微控制器ISP模式,以及所
    發(fā)表于 06-06 13:37 ?7次下載

    基于CW32的物聯(lián)網(wǎng)應(yīng)用

    CW32】基于CW32的物聯(lián)網(wǎng)應(yīng)用
    的頭像 發(fā)表于 11-02 15:55 ?1469次閱讀
    基于<b class='flag-5'>CW32</b>的物聯(lián)網(wǎng)應(yīng)用