一 待機(jī)形式簡(jiǎn)介
在stm32的低功耗形式中,待機(jī)形式能夠完成系統(tǒng)的最低功耗,在這種形式下,只需求2uA左右的電流。
三 待機(jī)喚醒程序剖析
實(shí)驗(yàn)現(xiàn)象:
將程序下載到開(kāi)發(fā)板上后,LED燈會(huì)不時(shí)地亮滅,當(dāng)按下KEY2鍵超越3s時(shí),LED燈滅,標(biāo)志著單片機(jī)進(jìn)入待機(jī)形式,再按下KEY1鍵,這時(shí)喚醒單片機(jī),LED又開(kāi)端不時(shí)地亮滅亮滅。
程序中用到的一些宏定義
#definemacEXTI_GPIO_CLK(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)
#definemacEXTI_GPIO_PORTGPIOC
#definemacEXTI_GPIO_PINGPIO_Pin_13
#definemacEXTI_SOURCE_PORTGPIO_PortSourceGPIOC
#definemacEXTI_SOURCE_PINGPIO_PinSource13
#definemacEXTI_LINEEXTI_Line13
#definemacEXTI_IRQEXTI15_10_IRQn
#definemacEXTI_INT_FUNCTIONEXTI15_10_IRQHandler
主函數(shù):
intmain(void)
{
/*configtheled*/
LED_GPIO_Config();
/*extilineconfig*/
EXTI_Pxy_Config();//初始化中綴函數(shù)
USARTx_Config();
if(PWR_GetFlagStatus(PWR_FLAG_WU)==SET)
{
printf(“rn使能電源管理時(shí)鐘單元前的檢測(cè),待機(jī)喚醒復(fù)位rn”);
}
else
printf(“rn使能電源管理時(shí)鐘單元前的檢測(cè),上電復(fù)位rn”);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
if(PWR_GetFlagStatus(PWR_FLAG_WU)==SET)
{
printf(“rn使能后檢測(cè),待機(jī)喚醒復(fù)位rn”);
}
else
printf(“rn使能后檢測(cè),上電復(fù)位rn”);
while(1)
{
LED1(ON);
Delay(0xFFFFF);
LED1(OFF);
LED2(ON);
Delay(0xFFFFF);
LED2(OFF);
LED3(ON);
Delay(0xFFFFF);
LED3(OFF);
}
}
剖析:在主函數(shù)中,除了用到一些必要的初始化之外,就是while循環(huán),在while循環(huán)中點(diǎn)亮LED燈,獨(dú)一不太熟習(xí)的是幾個(gè)printf語(yǔ)句,這里暫時(shí)不論,先看EXTI_Pxy_Config()函數(shù)。
EXTI_Pxy_Config()函數(shù)
voidEXTI_Pxy_Config(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
EXTI_InitTypeDefEXTI_InitStructure;
/*configtheextilineclockandAFIOclock*/
RCC_APB2PeriphClockCmd(macEXTI_GPIO_CLK,ENABLE);//開(kāi)啟GPIO時(shí)鐘和AFIO時(shí)鐘
/*configtheNVIC*/
NVIC_Configuration();
/*EXTIlinegpioconfig*/
GPIO_InitStructure.GPIO_Pin=macEXTI_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//配置為上拉輸入
GPIO_Init(macEXTI_GPIO_PORT,&GPIO_InitStructure);
/*EXTIlinemodeconfig*/
GPIO_EXTILineConfig(macEXTI_SOURCE_PORT,macEXTI_SOURCE_PIN);
EXTI_InitStructure.EXTI_Line=macEXTI_LINE;
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;//設(shè)置為上升沿觸發(fā)中綴?。?!,也就是當(dāng)單片機(jī)檢測(cè)到按鍵的上升沿時(shí)進(jìn)入中綴程序
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTI_InitStructure);
}
剖析:在EXTI_Pxy_Config()函數(shù)中,先停止了KEY2按鍵的初始化,留意KEY2按鍵并不是WKUP按鍵,一定要留意。然后將KEY2按鍵的IO口配置為EXTI中綴形式,上升沿觸發(fā),也就是說(shuō)當(dāng)KEY2按鍵被按下時(shí)就會(huì)觸發(fā)中綴。然后我們?cè)倨饰霎?dāng)按鍵KEY2被按下時(shí),執(zhí)行的相應(yīng)中綴函數(shù)。
macEXTI_INT_FUNCTION()函數(shù)
///IO口線中綴,中綴口為PC13
voidmacEXTI_INT_FUNCTION(void)
{
if(EXTI_GetITStatus(macEXTI_LINE)!=RESET)//確保能否產(chǎn)生了EXTILine中綴
{
printf(“rn進(jìn)入EXTILine中綴rn”);
//K2鍵長(zhǎng)按進(jìn)入待機(jī)形式
if(PWR_Check_Standby())//PWR_Check_Standby()函數(shù)是用來(lái)判別按鍵時(shí)長(zhǎng)的,假如按鍵時(shí)間長(zhǎng)超越3S就返回1,否則返回0
{
//使能WKUP引腳的喚醒功用
PWR_WakeUpPinCmd(ENABLE);
億配芯城(zgjzwjg.cn)隸屬于深圳市新嘉盛工貿(mào)有限公司,成立于2013年并上線服務(wù),商城平臺(tái)主要特點(diǎn)“線上快捷交易配單+線下實(shí)體供應(yīng)交貨”兩全其美的垂直發(fā)展理念,是國(guó)內(nèi)電子元器件專業(yè)的電子商務(wù)平臺(tái)+實(shí)體店企業(yè)。未來(lái)發(fā)展及模式主要以(一站式配單,平臺(tái)寄售/處理閑置庫(kù)存達(dá)到資源共享雙贏,電子工程師交流社區(qū),硬件開(kāi)發(fā)與支持等互動(dòng)服務(wù)平臺(tái))在這個(gè)高效而發(fā)展迅猛的科技互聯(lián)網(wǎng)時(shí)代為大家提供精準(zhǔn)的大數(shù)據(jù)資源平臺(tái)。