91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

    文章

    1416

    瀏覽量

    41429
  • 指令
    +關注

    關注

    1

    文章

    616

    瀏覽量

    36461
  • 開發板
    +關注

    關注

    25

    文章

    5680

    瀏覽量

    104731
  • PMU
    PMU
    +關注

    關注

    1

    文章

    123

    瀏覽量

    22319

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

    APM32F1xx_DFP 工具包

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

    CKS32F4xx系列低功耗模式STANDBY模式

    CKS32F4xx系列低功耗模式STANDBY模式
    的頭像 發表于 11-06 16:57 ?794次閱讀
    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 ?1037次閱讀
    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 ?918次閱讀
    CKS32<b class='flag-5'>F4xx</b>系列<b class='flag-5'>低功耗</b><b class='flag-5'>模式</b>STOP<b class='flag-5'>模式</b>
    主站蜘蛛池模板: 国内一级野外a一级毛片 | 亚洲va中文字幕 | 亚洲美国avcom | 欧美黄色大全 | 天堂福利视频在线观看 | 国外免费精品视频在线观看 | 尤物啪啪 | 欧美影院一区二区三区 | 天天亚洲综合 | 久久久精品2021免费观看 | 美女h片 | 中文字幕在线观看第一页 | 欧美国产精品主播一区 | 男人边吃奶边爱边做视频日韩 | 精品久久免费观看 | 国产毛片农村妇女系列 | 欧美性猛 | 2015xxxx欧美| 免费国产黄网站在线观看视频 | 国产精品天天看 | 亚洲黄色官网 | bt天堂在线www最新版资源网 | 在线观看h视频 | 在线观看一二三区 | 国产成人mv在线观看入口视频 | 99久热成人精品视频 | 国产叼嘿视频免费网站 | 国产视频福利 | 免费免费啪视频视频观看 | 69国产视频 | aa视频免费看 | 午夜两性色视频免费网站 | 性久久久久久久久 | 天天免费看片 | 欧美最猛性xxxx免费 | 婷婷六月激情 | 亚洲一区小说区中文字幕 | 欧美午夜视频 | 色天使亚洲综合在线观看 | 明日花绮罗snis-862在线播放 | 草草影院ccyy国产日本欧美 |