色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

APM32F10xx進入低功耗模式的問題分析

Geehy極海半導體 ? 來源:Geehy極海半導體 ? 2024-10-18 16:13 ? 次閱讀

1、前言

近日,在學習APM32開發板關于PMU模塊的內容,看到很多內容都是調用WFI內核指令進入低功耗模式,于是自己想嘗試調用WFE內核指令進入低功耗模式,但在APM32F10xx中,我運用按鍵中斷,在中斷調用PMU_EnterSTOPMode庫函數,用WFE內核指令進入STOP模式是存在問題的,后經查驗解決了問題,于是在此進行了內容記錄。

2、相關知識介紹

2.1、低功耗模式概述

當APM32在系統或者電源復位后,芯片處于運行狀態,此時HCLK為CPU提供時鐘,內核執行程序代碼,當CPU不需要運行時,可以采用低功耗模式來降低芯片運行的電流

2.2、低功耗模式

低功耗模式可分為睡眠模式和深度睡眠模式,其中深度睡眠模式分別停止模式和待機模式。而本文的重點則在于講解進入停止模式。

2.3、進入停止模式配置

wKgZoWcSGQOAfwZxAABt5xbwYxU267.jpg

如上,進入停止模式需要將SCB->SCR->SLEEPDEEP置為1,同時PMU->CTRL->PDDSCFG置為0,同時要執行WFI/WFE指令進入停止模式。其中,兩個內核指令的區別如下:

wKgaoWcSGQyAb63jAADUF0xEAB8844.jpg

如上,當調用WFI內核指令時,會直接進入睡眠/深度睡眠模式。當調用WFE指令時,會根據事件鎖存器的值來判斷能否直接進入睡眠/深度睡眠模式。如下,我做了一個流程圖:

wKgaoWcSGROARqqpAAB4FsOIHTY520.jpg

3、問題分析及解決

3.1、配置的關鍵代碼

int main(void)

{

RCM_EnableAPB1PeriphClock((RCM_APB1_PERIPH_T)(RCM_APB1_PERIPH_PMU | RCM_APB1_PERIPH_BAKR));

APM_MINI_LEDInit(LED2);

APM_MINI_LEDInit(LED3);

/* KEY1 KEY2 Set */

//APM_MINI_PBInit(BUTTON_KEY1,BUTTON_MODE_GPIO);

APM_MINI_PBInit(BUTTON_KEY1,BUTTON_MODE_EINT);

APM_MINI_PBInit(BUTTON_KEY2,BUTTON_MODE_EINT);

/* NVIC Priority Set */

NVIC_ConfigPriorityGroup(NVIC_PRIORITY_GROUP_1);

NVIC_EnableIRQRequest(EINT0_IRQn, 0, 1);

NVIC_EnableIRQRequest(EINT1_IRQn, 1, 1);

APM_MINI_LEDOn(LED2);

APM_MINI_LEDOff(LED3);

/* Enable PMU Periph Clock */

RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_PMU);

PMU_Reset();

while (1)

{

Delay(0x7FFFFF);

APM_MINI_LEDToggle(LED2);

}

}

voidEint1_Isr(void)

{

if (EINT_ReadIntFlag(KEY1_BUTTON_EINT_LINE)!= RESET)

{

APM_MINI_LEDOn(LED3);

APM_MINI_LEDOff(LED2);

/* Enter STOP Mode */

PMU_EnterSTOPMode(PMU_REGULATOR_LOWPOWER, PMU_STOP_ENTRY_WFE);

EINT_ClearIntFlag(KEY1_BUTTON_EINT_LINE);

}

}

voidEint0_Isr(void)

{

if (EINT_ReadIntFlag(KEY2_BUTTON_EINT_LINE)!= RESET)

{

SystemInit();

APM_MINI_LEDOff(LED3);

/* Wait for system init */

Delay(0xfffff);

EINT_ClearIntFlag(KEY2_BUTTON_EINT_LINE);

}

}

如上代碼,按下按鍵1后會進入睡眠模式,LED2燈滅,LED3常亮。按下按鍵2后會從睡眠模式中喚醒,LED2跳燈,LED3燈滅。但真實的現象便是按下按鍵1后,LED2仍處于跳燈狀態,但LED3常亮,因此我初步判斷第一次運用WFE指令時沒有進入停止模式,但我從而驗證我的判斷?

3.2、PMU_EnterSTOPMode函數

voidPMU_EnterSTOPMode(PMU_REGULATOR_T regulator, PMU_STOP_ENTRY_T entry)

{

/* Clear PDDSCFG and LPDSCFG bits */

PMU->CTRL_B.PDDSCFG = 0x00;

PMU->CTRL_B.LPDSCFG = 0x00;

/* Set LPDSCFG bit according to regulatorvalue */

PMU->CTRL_B.LPDSCFG = regulator;

/* Set Cortex System Control Register */

SCB->SCR |= (uint32_t)0x04;

/* Select STOP mode entry*/

if (entry == PMU_STOP_ENTRY_WFI)

{

/* Request Wait For Interrupt */

__WFI();

}

else

{

/* Request Wait For Event */

__WFE();

}

/* Reset SLEEPDEEP bit of Cortex SystemControl Register */

SCB->SCR &=(uint32_t)~((uint32_t)0x04);

}

如下庫API函數中,運用一次WFE內核指令,當我第一次看到這個函數時,并沒有發現什么問題,于是,我照著手冊深入我的問題探究。于是,我在《Cortex M3與M4權威指南》中找到如下內容:

wKgaoWcSGSOAW2fLAABz8A5CfPE166.jpg

當我們運用WFE內核指令進入停止模式時,一般調用兩次WFE內核指令,因為事件寄存器會因為中斷事件的產生而置位。這時,在結合2.3中內容,我便知曉了問題的答案。因為在初始化的按鍵配置中,按鍵1和按鍵2連接了外部中斷線,當我調用該庫函數中,運用WFE指令進入停止模式時,第一次會因為有中斷事件的產生,WFE的作用是運用于清除事件鎖存器的值,而第二次才用于進入睡眠模式,因此在后面的Demo例程中,我給出了一種解決方法。

注:

在解決問題的過程中,我給出了第二種解決方法,便是不通過按鍵中斷調用WFE內核指令進入停止模式,而是在主函數中直接對按鍵進行一個是否按鍵的判斷,按下即進入睡眠模式。(這兩種方法均已通過實驗)。

本次分享到此結束,如有問題大家一起在評論區討論,謝謝

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內核
    +關注

    關注

    3

    文章

    1376

    瀏覽量

    40316
  • 指令
    +關注

    關注

    1

    文章

    608

    瀏覽量

    35752
  • 開發板
    +關注

    關注

    25

    文章

    5080

    瀏覽量

    97678
  • PMU
    PMU
    +關注

    關注

    1

    文章

    108

    瀏覽量

    21628

原文標題:APM32芯得 EP.32 | 基于APM32F103 Stop模式關于WFE內核命令問題分析及解決

文章出處:【微信號:geehysemi,微信公眾號:Geehy極海半導體】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

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

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

    怎樣對STM32F10xx低功耗模式進行配置

    STM32F10xx有哪幾種低功耗模式?怎樣對STM32F10xx低功耗模式進行配置?
    發表于 09-26 06:31

    STM32F10xxx是怎樣進入低功耗模式的呢

    STM32低功耗的工作原理是什么?STM32F10xxx有哪幾種低功耗模式?STM32F10xxx是怎樣
    發表于 11-29 06:16

    STM32F101xx/STM32F102xx和STM32F103xx低功耗模式

    本文檔適用于STM32F1系列微控制器。本文檔為要求在STM32F101xx、STM32F102xx和STM32F103xx產品的軟件和硬件上實現
    發表于 12-01 06:40

    STM32F1xx是否有任何編碼示例來說明如何進入低功耗睡眠模式

    您好,我需要為我的 STM32F103 MCU 使用待機模式。在數據表中說,當 MCU 處于待機模式時,引腳處于高阻抗狀態。但是,我需要這些引腳為高電平(這些是輸出引腳)。有可能實現嗎?或者我應該
    發表于 01-17 08:44

    APM32F030x8_功耗_低功耗stop和standby模式功耗電流異常

    APM32F030x8_功耗_低功耗stop和standby模式功耗電流異常
    發表于 11-09 21:03 ?0次下載
    <b class='flag-5'>APM32F</b>030x8_<b class='flag-5'>功耗</b>_<b class='flag-5'>低功耗</b>stop和standby<b class='flag-5'>模式</b><b class='flag-5'>功耗</b>電流異常

    APM32F103XC_TMR_關閉DMA進入睡眠模式出現故障

    APM32F103XC_TMR_關閉DMA進入睡眠模式出現故障
    發表于 11-09 21:03 ?0次下載
    <b class='flag-5'>APM32F</b>103XC_TMR_關閉DMA<b class='flag-5'>進入</b>睡眠<b class='flag-5'>模式</b>出現故障

    APM32F030C8T6_軟件問題_進入stop模式之后無法使用按鍵喚醒

    APM32F030C8T6_軟件問題_進入stop模式之后無法使用按鍵喚醒
    發表于 11-09 21:03 ?2次下載
    <b class='flag-5'>APM32F</b>030C8T6_軟件問題_<b class='flag-5'>進入</b>stop<b class='flag-5'>模式</b>之后無法使用按鍵喚醒

    APM32F103VCT6_低功耗問題_STOP模式下的功耗異常偏高

    APM32F103VCT6_低功耗問題_STOP模式下的功耗異常偏高
    發表于 11-09 21:03 ?1次下載
    <b class='flag-5'>APM32F</b>103VCT6_<b class='flag-5'>低功耗</b>問題_STOP<b class='flag-5'>模式</b>下的<b class='flag-5'>功耗</b>異常偏高

    APM32F003F6P6_軟件問題_低功耗Halt模式,WUPT只能喚醒一次

    APM32F003F6P6_軟件問題_低功耗Halt模式,WUPT只能喚醒一次
    發表于 11-09 21:04 ?0次下載
    <b class='flag-5'>APM32F003F</b>6P6_軟件問題_<b class='flag-5'>低功耗</b>Halt<b class='flag-5'>模式</b>,WUPT只能喚醒一次

    APM32F0xx_SDK工具

    APM32F0xx_SDK工具
    發表于 11-10 11:04 ?0次下載
    <b class='flag-5'>APM32F0xx</b>_SDK工具

    APM32F0xx_DFP 工具包

    APM32F0xx_DFP 工具包
    發表于 11-10 11:33 ?4次下載
    <b class='flag-5'>APM32F0xx</b>_DFP 工具包

    CKS32F4xx系列低功耗模式STANDBY模式

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

    CKS32F4xx系列低功耗模式SLEEP模式

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

    CKS32F4xx系列低功耗模式STOP模式

    CKS32F4xx系列低功耗模式STOP模式
    的頭像 發表于 11-06 17:08 ?634次閱讀
    CKS32<b class='flag-5'>F4xx</b>系列<b class='flag-5'>低功耗</b><b class='flag-5'>模式</b>STOP<b class='flag-5'>模式</b>
    主站蜘蛛池模板: 欧美色偷偷亚洲天堂bt| 教室里的激情电影| 护士一级片| 四虎亚洲中文字幕永久在线| 99无人区码一码二码三| 久久亚洲视频| 伊人最新网址| 久久久国产精品免费A片3D| 亚洲午夜精品A片久久不卡蜜桃| 国产国产乱老熟视频网站| 日日噜噜夜夜狠狠扒开双腿 | 久久偷拍人| 在线自拍亚洲视频欧美| 久久精品中文字幕免费| 在线亚洲中文字幕36页| 麻豆成人AV久久无码精品| 91系列在线观看免费| 欧美激情社区| 成人无码国产AV免费看直播| 日本一卡二卡三卡四卡无卡免费播放| voyeurhit农村夫妻偷拍| 日本漂亮妈妈7观整有限中| 高H内射NP古文| 小xav导航| 久久成人无码国产免费播放| 最新毛片网| 女人张开腿让男人添| 粗大分开挺进内射| 香蕉尹人综合精品| 久久99国产亚洲高清观着| 91popny蜜桃臀| 日本视频久久| 含羞草影院AE在线观看| 一边亲着一面膜下奶韩剧免费 | 国产精品永久免费视频观看| 亚洲另类国产综合在线| 快播看av| 国产 亚洲 中文字幕 久久网| 亚洲精品第一页| 美女撒尿无遮挡免费中国| 成人性生交大片免费看金瓶七仙女|