1)實驗平臺:正點原子stm32f103戰(zhàn)艦開發(fā)板V4
2)平臺購買地址:https://detail.tmall.com/item.htm?id=609294757420
3)全套實驗源碼+手冊+視頻下載地址: http://www.openedv.com/thread-340252-1-1.html##
第三十三章 待機模式實驗
本章介紹APM32F407低功耗模式中的待機模式,進入待機模式后,MCU內(nèi)部的電壓調(diào)壓器將斷開1.3V電源域的電源,這意味著內(nèi)核和外設(shè)都將停止工作,并且內(nèi)核寄存器和內(nèi)存中的數(shù)據(jù)都將丟失,但這也是功耗最低的模式,待機模式下可被WKUP引腳的上升沿喚醒。通過本章的學(xué)習(xí),讀者將學(xué)習(xí)到低功耗模式下待機模式的使用。
本章分為如下幾個小節(jié):
33.1 硬件設(shè)計
33.2 程序設(shè)計
33.3 下載驗證
33.1 硬件設(shè)計
33.1.1 例程功能
- 運行模式下,按下KEY0按鍵,進入待機模式,此時TFTLCD和LED0均熄滅
- 待機模式下,按下KEY_UP按鍵,喚醒MCU,此時TFTLCD點亮,同時LED0閃爍,指示程序正在運行
33.1.2 硬件資源 - LED
LED0 - PF9 - 按鍵
KEY0 - PE4
KEY_UP - PA0 - 正點原子 2.8/3.5/4.3/7/10寸TFTLCD模塊(僅限MCU屏,16位8080并口驅(qū)動)
33.1.3 原理圖
本章實驗介紹APM32F407低功耗模式中的待機模式,不涉及連接原理圖。
33.2 程序設(shè)計
33.2.1 Geehy標準庫的PMU驅(qū)動
本實驗配置了KEY_UP按鍵(連接至WKUP引腳)喚醒待機模式,因此具體的配置步驟如下:
①:使能WKUP引腳功能
②:清除喚醒事件標志
③:進入待機模式
在Geehy標準庫中對應(yīng)的驅(qū)動函數(shù)如下:
①:使能WKUP引腳功能
該函數(shù)用于使能WKUP引腳功能,其函數(shù)原型如下所示:
void PMU_EnableWakeUpPin(void);
該函數(shù)的形參描述,如下表所示:
形參 描述
無 無
表33.2.1.1 函數(shù)PMU_EnableWakeUpPin()形參描述
該函數(shù)的返回值描述,如下表所示:
返回值 描述
無 無
表33.2.1.2 函數(shù)PMU_EnableWakeUpPin()返回值描述
該函數(shù)的使用示例,如下所示:
#include "apm32f4xx.h"
#include "apm32f4xx_pmu.h"
void example_fun(void)
{
/* 使能WKUP引腳功能 */
PMU_EnableWakeUpPin();
}
②:清除PMU事件標志
該函數(shù)用于清除PMU的事件標志,其函數(shù)原型如下所示:
void PMU_ClearStatusFlag(PMU_FLAG_T flag);
該函數(shù)的形參描述,如下表所示:
形參 描述
flag 指定清除的PMU事件標志
例如:PMU_FLAG_WUE、PMU_FLAG_SB(在apm32f4xx_pmu.h文件中有定義)
表33.2.1.3 函數(shù)PMU_ClearStatusFlag()形參描述
該函數(shù)的返回值描述,如下表所示:
返回值 描述
無 無
表33.2.1.4 函數(shù)PMU_ClearStatusFlag()返回值描述
該函數(shù)的使用示例,如下所示:
#include "apm32f4xx.h"
#include "apm32f4xx_pmu.h"
void example_fun(void)
{
/* 清除PMU喚醒事件標志 */
PMU_ClearStatusFlag(PMU_FLAG_WUE);
}
③:進入待機模式
該函數(shù)用于進入待機模式,其函數(shù)原型如下所示:
void PMU_EnterSTANDBYMode(void);
該函數(shù)的形參描述,如下表所示:
形參 描述
無 無
表33.2.1.5 函數(shù)PMU_EnterSTANDBYMode()形參描述
該函數(shù)的返回值描述,如下表所示:
返回值 描述
無 無
表33.2.1.6 函數(shù)PMU_EnterSTANDBYMode()返回值描述
該函數(shù)的使用示例,如下所示:
#include "apm32f4xx.h"
#include "apm32f4xx_pmu.h"
void example_fun(void)
{
/* 進入待機模式 */
PMU_EnterSTANDBYMode();
}
33.2.2 PMU驅(qū)動
本章實驗的PMU驅(qū)動主要負責(zé)向應(yīng)用層提供進入待機模式的函數(shù)。本章實驗中,PMU的驅(qū)動代碼包括pmu.c和pmu.h兩個文件。
PMU驅(qū)動中,進入待機模式的函數(shù),如下所示:
/**
* @brief 進入待機模式
* @param 無
* @retval 無
*/
void pmu_enter_standby(void)
{
RCM->AHB3CLKEN_B.EMMCEN = DISABLE; /* 進入待機模式前,需先關(guān)閉EMMC時鐘 */
RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_PMU); /* 使能PMU時鐘 */
PMU_EnableWakeUpPin(); /* 配置KEY_UP按鍵用于喚醒MCU */
PMU_ClearStatusFlag(PMU_FLAG_WUE); /* 清除喚醒標志 */
PMU_EnterSTANDBYMode(); /* 進入待機模式 */
}
從上面的代碼中可以看出,在進入待機模式前還關(guān)閉了EMMC的時鐘,這點非常重要,若進入待機模式時,EMMC的時鐘為使能狀態(tài),則無法正常進入待機模式。隨后還依次使能了WKUP引腳功能和清除喚醒標志,最后調(diào)用函數(shù)PMU_EnterSTANDBYMode()進入待機模式。
33.2.3 實驗應(yīng)用代碼
本章實驗的應(yīng)用代碼,如下所示:文章來源:http://www.zghlxwxcb.cn/news/detail-732990.html
int main(void)
{
uint8_t key;
uint8_t t = 0;
NVIC_ConfigPriorityGroup(NVIC_PRIORITY_GROUP_3); /* 設(shè)置中斷優(yōu)先級分組為組3 */
sys_apm32_clock_init(336, 8, 2, 7); /* 配置系統(tǒng)時鐘 */
delay_init(168); /* 初始化延時功能 */
usart_init(115200); /* 初始化串口 */
led_init(); /* 初始化LED */
key_init(); /* 初始化按鍵 */
lcd_init(); /* 初始化LCD */
lcd_show_string(30, 50, 200, 16, 16, "APM32", RED);
lcd_show_string(30, 70, 200, 16, 16, "STANDBY TEST", RED);
lcd_show_string(30, 90, 200, 16, 16, "ATOM@ALIENTEK", RED);
lcd_show_string(30, 110, 200, 16, 16, "KEY0:Enter STANDBY MODE", RED);
lcd_show_string(30, 130, 200, 16, 16, "KEY_UP:Exit STANDBY MODE", RED);
while (1)
{
key = key_scan(0);
if (key == KEY0_PRES)
{
pmu_enter_standby(); /* 進入待機模式 */
}
if ((t % 20) == 0)
{
LED0_TOGGLE();
}
t++;
delay_ms(10);
}
}
從上面的代碼中可以看出,在完成相關(guān)的初始化操作后,便不斷地掃描按鍵,若掃描到KEY0按鍵被按下,則會進入待機模式,進入待機模式后LED0便不再閃爍,說明此時程序已經(jīng)停止運行,進入了待機模式,此時可以按下KEY_UP按鍵進行待機模式喚醒,隨后便可看到LED0恢復(fù)閃爍,說明程序再次運行。
33.3 下載驗證
在完成編譯和燒錄操作后,可以看到LED0閃爍提示系統(tǒng)正在運行,此時可以按下KEY0按按鍵,可以看到LED0不再閃爍,這是因為系統(tǒng)已經(jīng)進入待機模式了,此時再按下KEY_UP按鍵,即可從待機模式下喚醒,可以看到LED0繼續(xù)閃爍。文章來源地址http://www.zghlxwxcb.cn/news/detail-732990.html
到了這里,關(guān)于【正點原子STM32連載】第三十三章 待機模式實驗 摘自【正點原子】APM32F407最小系統(tǒng)板使用指南的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!