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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

CKS32F4xx系列低功耗模式STOP模式

jf_pJlTbmA9 ? 來源:中科芯MCU ? 作者:中科芯MCU ? 2023-11-06 17:08 ? 次閱讀

在本章節(jié)中,首先向大家介紹電源系統(tǒng)結(jié)構(gòu),接著簡述三種低功耗模式,最后重點介紹CKS32F4xx系列如何進入STOP模式以及使用按鍵實現(xiàn)中斷喚醒。

CKS32F4xx電源系統(tǒng)介紹

wKgaomUDxAqAWADiAAFEKvLWiVg971.png

CKS32F4xx系列的電源系統(tǒng)框圖

CKS32F4xx系列的器件工作電壓(VDD)為1.8~3.6V。

①備份域電路:包含LSE振蕩器、RTC、備份寄存器及備份SRAM。電源開關自動切換VDD和VBAT供電。

②調(diào)壓器電路(1.2V域):為備份域及待機電路外的所有數(shù)字電路供電,其中包括內(nèi)核、數(shù)字外設及RAM。

ADC電路和參考電壓:ADC工作電源使用VDDA引腳輸入,使用VSSA作為獨立的地連接,VREF引腳則為ADC提供測量使用的參考電壓。

低功耗模式簡介

CKS32F4xx系列按功耗由高到低排列,分別是運行、睡眠、停止(STOP)和待機(STANDBY)四種工作模式。上電復位后,CKS32F4xx系列會處于正常運行狀態(tài),當不需要繼續(xù)運行內(nèi)核時,就可以選擇進入后面的三種低功耗模式降低功耗。這三種模式中,電源消耗不同、喚醒時間不同、喚醒源不同,用戶需要根據(jù)應用需求,選擇最佳的低功耗模式。其中,最低功耗的是待機模式,停機模式(STOP)是次低功耗的,最后是睡眠模式。低功耗相關寄存器主要有SCB_SCR、PWR_CR、PWR_CSR,進入各種低功耗需要調(diào)用的指令有WFI或WFE,以下做簡要介紹。

1.SCB_SCR(系統(tǒng)控制寄存器)

wKgaomUDxAyAW2s-AAA4ylwKEnM241.png

wKgZomUDxA6AdYMcAACy_ijj-xE440.jpg

若進入停止模式or待機模式,需將SLEEPDEEP置1。

2.PWR_CR(電源控制寄存器)

wKgZomUDxA-AITDZAAOMYUqQ5vE359.png

若進入停止模式,需將PDDS清0,LPDS選調(diào)節(jié)器模式;若進入待機模式,需將PDDS置1,清除喚醒位CWUF。

3.PWR_CSR(電源控制/狀態(tài)寄存器)

wKgaomUDxBGAR8w-AAOSoIyhhew142.png

芯片處于待機模式下,需使用使用WKUP引腳喚醒并需要清除WUF標記位。

注:WKUP上升沿才能喚醒待機狀態(tài),清除WUF標記位實則需操作CWUF位。

4.WFI與WFE指令

實質(zhì)上都是內(nèi)核指令,在庫文件core_cmInstr.h中把這些指令封裝成了函數(shù),調(diào)用它們都能進入低功耗模式。調(diào)用時,需要使用函數(shù)的格式“__WFI();”和“__WFE();”,這是因為__w?及__wfe是編譯器內(nèi)置的函數(shù),函數(shù)內(nèi)部使用調(diào)用了相應的匯編指令。其中WFI指令決定了它需要用中斷喚醒,而WFE則決定了它可用事件來喚醒。

以下表格是對三種低功耗模式的簡要概述。

wKgaomUDxBKAU9eeAAEk7zuEscM308.jpg

本章中,我們主要對CKS32F4xx系列的低功耗模式—停止模式(STOP)做詳細介紹。該模式中,由于其1.2V區(qū)域的部分電源沒有關閉,會保留內(nèi)核的寄存器、內(nèi)存的信息,所以從STOP模式喚醒,并重新開啟時鐘后,還可以從上次停止處繼續(xù)執(zhí)行代碼。停止模式可以由任意一個外部中斷(EXTI)喚醒。在停止模式中可以選擇電壓調(diào)節(jié)器為開模式或低功耗模式,可選擇內(nèi)部FLASH工作在正常模式或掉電模式。那我們?nèi)绾芜M入STOP模式,可以按照下述表格中的步驟執(zhí)行即可:

wKgaomUDxBOAUMUFAAIct7PHd98353.jpg

CKS32F4xx系列標準庫把進入STOP模式這部分的操作封裝到PWR_EnterSTOPMode函數(shù)中了,并且需要注意的是進入STOP模式后,CKS32F4xx系列的所有IO都保持在停止前的狀態(tài),且當它被喚醒時,CKS32F4xx系列使用HSI作為系統(tǒng)時鐘運行,由于系統(tǒng)時鐘會影響很多外設的工作狀態(tài),所以一般我們在喚醒后會重新開啟HSE,把系統(tǒng)時鐘設置為原來的狀態(tài)。上面表格也提到在停止模式中,還可以控制FLASH的供電,使用庫函數(shù)PWR_FlashPowerDownCmd配置進入掉電狀態(tài)還是正常供電狀態(tài),本質(zhì)上是封裝了一個對FPDS寄存器位操作的語句,使用時需要再進入停止模式前被調(diào)用,可以進一步降低功耗。

采用EXTI喚醒STOP模式實驗

程序設計主要要點如下:

①初始化用于喚醒的中斷按鍵;

②配置不用的I/O端口;

③設置停滯狀態(tài)是FLASH掉電以及選擇電壓調(diào)節(jié)器的工作模式并進入停止狀態(tài);

④使用按鍵中斷喚醒芯片;

⑤重啟HSE時鐘,使系統(tǒng)完全恢復停止之前的狀態(tài)。

1)初始化用于喚醒的中斷按鍵

此處選擇連接PB1引腳的按鍵用于將芯片從STOP模式喚醒,代碼如下:

voidCKS_EXTI_Init(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
EXTI_InitTypeDefEXTI_InitStructure;
NVIC_InitTypeDefNVIC_InitStructure;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);

/*ConfigurePB1asEXTI*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_Init(GPIOB, GPIO_InitStructure);

/*ConfigurePB1toEXTIline1*/
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB,EXTI_PinSource1);

/*EXTIconfiguration*/
EXTI_InitStructure.EXTI_Line=EXTI_Line1;
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
EXTI_Init( EXTI_InitStructure);

/*NVICconfiguration*/
NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init( NVIC_InitStructure);
}

在CKS_EXTI_Init函數(shù)中,首先使能GPIOB時鐘,又因為用到外部中斷,所以必須先使能SYSCFG時鐘,接著對GPIOB初始化為上拉輸入,并調(diào)用函數(shù) SYSCFG_EXTILineConfig配置GPIOB.1連接到中斷線1,最后初始化EXTI中斷線以及NVIC中斷優(yōu)先級。

voidEXTI1_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line1)!=RESET)
{
EXTI_ClearITPendingBit(EXTI_Line1);
}
}

在中斷服務函數(shù)EXTI1_IRQHandler內(nèi),主要是清除LINE1上的中斷標志位。

2)配置未使用的I/O口

進入STOP模式之前,需要對I/O進行處理,若不處理很多配置為輸入浮空的I/O口在受到外界干擾的時候,狀態(tài)不定,消耗大量的電流,代碼如下:

voidCKS_Stop_Mode_IO_Set(void)
{
/*setpinsnotusedtoAIN*/
GPIO_InitTypeDefGPIO_InitStructure;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOI,ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;

GPIO_Init(GPIOA, GPIO_InitStructure);
GPIO_Init(GPIOC, GPIO_InitStructure);
GPIO_Init(GPIOD, GPIO_InitStructure);
GPIO_Init(GPIOF, GPIO_InitStructure);
GPIO_Init(GPIOG, GPIO_InitStructure);
GPIO_Init(GPIOH, GPIO_InitStructure);
GPIO_Init(GPIOI, GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=(~GPIO_Pin_1);
GPIO_Init(GPIOB, GPIO_InitStructure);
}

由上述代碼可知,我們將沒用到的I/O全部設置為模擬輸入,保留PB1作為按鍵,產(chǎn)生外部中斷來將芯片從STOP模式喚醒。

3)芯片進入STOP模式

該部分代碼一般是程序執(zhí)行一段時間再調(diào)用,我們先使用PWR_FlashPowerDownCmd配置停止模式下FLASH使用掉電模式,隨后調(diào)用PWR_EnterSTOPMode把調(diào)壓器設置在低功耗模式,最后使用WFI指令進入停止狀態(tài)。由上文可知,WFI進入停止模式可由任意的EXTI的中斷喚醒,所以此處使用按鍵中斷喚醒是可行的,代碼如下:

voidCKS_Set_Stop_Mode(void)
{
PWR_FlashPowerDownCmd(ENABLE);
PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);
}

4)主函數(shù)配置

本例程中主函數(shù)主要對上文所述函數(shù)調(diào)用,程序編譯下載至開發(fā)板,先進行相關外設初始化后,直接進入STOP模式,此時按下按鍵,芯片可立即被喚醒,隨即又進入STOP模式,循環(huán)往復,主函數(shù)代碼如下:

intmain(void)
{
GPIO_Configuration();
CKS_EXTI_Init();
CKS_Stop_Mode_IO_Set();
while(1)
{
CKS_Stop_Mode_IO_Set();
CKS_Set_Stop_Mode();
SystemInit();
Delay(0xffffff);
}
}

來源:中科芯MCU

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

    關注

    146

    文章

    16665

    瀏覽量

    347751
  • 低功耗
    +關注

    關注

    10

    文章

    2286

    瀏覽量

    103321
  • 電源系統(tǒng)

    關注

    3

    文章

    596

    瀏覽量

    37661
  • STOP模式
    +關注

    關注

    0

    文章

    9

    瀏覽量

    3051
收藏 人收藏

    評論

    相關推薦

    MCU微課堂|CKS32F4xx系列產(chǎn)品時鐘配置

    ,并且高時鐘頻率將導致功耗增加、抗電磁干擾能力變?nèi)?,因此?b class='flag-5'>CKS32F4xx系列產(chǎn)品內(nèi)部具備多個時鐘源。本文將對CKS32F4xx系列產(chǎn)品時
    發(fā)表于 12-12 10:17 ?750次閱讀

    CKS32F4xx系列MCU的低功耗模式之睡眠模式

    本課講為大家講解CKS32F4xx系列產(chǎn)品的低功耗模式之睡眠(Sleep)模式。MCU為滿足某些應用場景:如小型化低容量設備,長期監(jiān)測設備等
    發(fā)表于 06-26 10:02 ?569次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>MCU的<b class='flag-5'>低功耗</b><b class='flag-5'>模式</b>之睡眠<b class='flag-5'>模式</b>

    CKS32F4xx系列DSP功能介紹

    CKS32F4xx系列使用高性能的32位內(nèi)核,支持浮點運算單元(FPU),同時還支持DSP指令以及存儲保護(MPU)用來加強應用的安全性。
    的頭像 發(fā)表于 03-04 13:43 ?1378次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>DSP功能介紹

    CKS32F4xx系列產(chǎn)品串口DMA傳輸

    在上一講,我們講過CKS32F4xx系列的6個串口都支持DMA傳輸。因此本節(jié)我們對CKS32F4xx系列的DMA進行介紹,同時利用DMA對串口數(shù)據(jù)進行傳輸。
    的頭像 發(fā)表于 04-10 11:18 ?906次閱讀

    CKS32F4xx系列低功耗模式之STANDBY模式

    本章中,我們主要對CKS32F4xx系列的待機模式(STANDBY)做詳細介紹。在該模式下,芯片功耗最低,1.2V供電區(qū)域、PLL、HSI和
    的頭像 發(fā)表于 07-07 09:41 ?1001次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b><b class='flag-5'>低功耗</b><b class='flag-5'>模式</b>之STANDBY<b class='flag-5'>模式</b>

    CKS32F4xx系列RNG功能設置

    ? MCU 微課堂 CKS32F4xx 系 列RNG功能 隨機數(shù)發(fā)生器簡介 ? ? CKS32F4xx系列自帶了硬件隨機數(shù)發(fā)生器(RNG),RNG處理器是一個以連續(xù)模擬噪聲為基礎的隨機數(shù)發(fā)生器,在
    的頭像 發(fā)表于 09-08 10:01 ?489次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>RNG功能設置

    CKS32F4xx系列DAC功能

    CKS32F4xx系列DAC功能
    的頭像 發(fā)表于 11-06 16:56 ?747次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>DAC功能

    CKS32F4xx系列ADC多通道DMA電壓采集

    CKS32F4xx系列ADC多通道DMA電壓采集
    的頭像 發(fā)表于 11-06 16:53 ?885次閱讀

    CKS32F4xx系列ADC單通道電壓采集

    CKS32F4xx系列ADC單通道電壓采集
    的頭像 發(fā)表于 11-06 16:54 ?863次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>ADC單通道電壓采集

    CKS32F4xx系列低功耗模式STANDBY模式

    CKS32F4xx系列低功耗模式STANDBY模式
    的頭像 發(fā)表于 11-06 16:57 ?382次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b><b class='flag-5'>低功耗</b><b class='flag-5'>模式</b>STANDBY<b class='flag-5'>模式</b>

    CKS32F4xx系列低功耗模式SLEEP模式

    CKS32F4xx系列低功耗模式SLEEP模式
    的頭像 發(fā)表于 11-06 16:59 ?570次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b><b class='flag-5'>低功耗</b><b class='flag-5'>模式</b>SLEEP<b class='flag-5'>模式</b>

    CKS32F4xx系列產(chǎn)品Timer的基本使用方法-比較輸出

    CKS32F4xx系列產(chǎn)品Timer的基本使用方法-比較輸出
    的頭像 發(fā)表于 11-09 17:39 ?702次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>產(chǎn)品Timer的基本使用方法-比較輸出

    CKS32F4xx系列產(chǎn)品Timer的基本使用方法-定時操作

    CKS32F4xx系列產(chǎn)品Timer的基本使用方法-定時操作
    的頭像 發(fā)表于 11-09 17:41 ?493次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>產(chǎn)品Timer的基本使用方法-定時操作

    MCU微課堂 | CKS32F4xx系列產(chǎn)品SPI通信

    MCU微課堂 | CKS32F4xx系列產(chǎn)品SPI通信
    的頭像 發(fā)表于 10-24 17:12 ?580次閱讀
    MCU微課堂 | <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>產(chǎn)品SPI通信

    MCU微課堂 | CKS32F4xx系列產(chǎn)品GPIO口配置

    MCU微課堂 | CKS32F4xx系列產(chǎn)品GPIO口配置
    的頭像 發(fā)表于 10-24 15:14 ?653次閱讀
    MCU微課堂 | <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>產(chǎn)品GPIO口配置