STM32低功耗控制心得體會
掃描二維碼
隨時隨地手機看文章
1.說明
本文主要敘述在stm32進入stop時如何保持最低功耗的問題,并對部分細(xì)節(jié)問題進行分析整理。STM32L提供5種低功耗模式:低功耗運行模式、睡眠模式、低功耗睡眠模式、停止模式、待機模式。
待機模式電流最低,但是待機模式時的MCU處于不受控制的狀態(tài),所有的IO口都工作在高阻抗的狀態(tài)的下,只有專門的幾個引腳能夠?qū)CU喚醒,而每次喚醒后相當(dāng)于系統(tǒng)復(fù)位,RAM中的數(shù)據(jù)全部丟失,在外部器件連接的情況下,器件的引腳可能會吸收大量的電流,反而達不到低功耗的要求。
停止模式的功耗僅次于待機模式,在STOP模式下,PLL,HSL,HSE都被停止,RAM和寄存器的值保留。
2.引腳配置
在stop模式下,由于所有的引腳的狀態(tài)都可以保留,所以需要進行適當(dāng)?shù)囊_配置才能達到效果。在實際的配置過程中,如果在stm32最小系統(tǒng)中,要在stop模式下保持最低功耗,可將所有的GPIO設(shè)置成模擬輸入,如果不進行配置,將是默認(rèn)是浮空輸入,此時stop模式的電流很大。在設(shè)置的過程中,有幾個特殊的引腳需要注意。

對于stm32來說,除了PA,PB,PC每個組有16個GPIO之外,還有PD2,PH0, PH1這三個GPIO。不能錯過任何一個引腳的配置,否則功耗會很大。
在所有的引腳配置成GPIO模式后,在stm32最小系統(tǒng)中采用3.3V電壓供電,實測電流為0.75uA。但是如果將全部的引腳都配置成模擬輸入的GPIO后,將不能正常的使用,根據(jù)實際使用的情況,預(yù)留9個中斷口作為喚醒源。當(dāng)配置完成之后,可以將電流控制在3.5uA。
降低功耗的控制,主要需要注意的是引腳的上下拉,在有中斷引腳上有外設(shè)時,可以將引腳配置成浮空輸入的模式,不需要配置上下拉。而當(dāng)該引腳上未接任何外設(shè)時,一定需要設(shè)置內(nèi)部的上拉或者下拉,這是比較關(guān)鍵和重要的。
3.通訊類外設(shè)的控制
對于stm32內(nèi)部的通信類的外設(shè),除了設(shè)置GPIO的引腳之外,還需要將內(nèi)部的uart或者i2c或者spi等通信類設(shè)備關(guān)閉。由于目前只使用了uart,所以在關(guān)閉uart可以通過HAL的HAL_UART_MspDeInit(&huart1);函數(shù)進行deinit。該函數(shù)會關(guān)閉中斷,清空內(nèi)部寄存器,并且設(shè)置引腳為GPIO模式。所以可以達到降低功耗的目的。
在測試過程中,也遇到了一個問題,就是喚醒后,串口將無法接收和發(fā)送數(shù)據(jù)。剛開始認(rèn)為休眠時DeInit,喚醒后Init即可,但是還有一個重要的步驟沒有做,就是開啟串口的中斷。
HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART1_IRQn);
HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART2_IRQn);
HAL_NVIC_SetPriority(USART3_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART3_IRQn);
目前三路串口采用的是DMA+空閑中斷的方式進行的,所以這里需要重新開啟中斷才行。
第二個問題就是ADC,當(dāng)時測試,一采用ADC進行采樣后,下次休眠后電流就很大,實測可達到1.8mA,而不采用ADC進行采樣的情況下只有38uA。所以ADC也在耗電,ADC不屬于通信類的外設(shè),但是采用了DMA,所以需要關(guān)閉掉ADC的中斷即可HAL_ADC_Stop_IT(&hadc);,一般來說,如果不是采用DMA的方式,非通訊類的外設(shè)只需要關(guān)掉時鐘即可。__HAL_RCC_ADC1_CLK_DISABLE();
4.特殊引腳的控制
有一個引腳也是需要注意,PH0,該引腳以前是作為外部的32k晶振使用,可用作獨立看門狗的時鐘源,由于該引腳目前作為了GPIO,所以在使用時作為普通的GPIO使用。作為普通的GPIO使用的必要條件是HSE時鐘關(guān)閉。但是在測試過程中還是遇到一個問題,該引腳配置成模擬輸入后,stop模式下的電流仍有800uA,后來經(jīng)過測試,發(fā)現(xiàn)是Debug調(diào)試器未關(guān),也就是HAL_DBGMCU_DisableDBGSleepMode();函數(shù)沒有有調(diào)用。所以在測試時電流才有800多uA。
5. 總結(jié)
對于降低功耗來說,standy模式功耗最低,但是喚醒源比較少,可以選擇stop模式。由于stop模式的引腳狀態(tài)和斷電前保持一致,所以在進入stop之前需要將不需要控制的引腳設(shè)置成模擬輸入。同時中斷引腳設(shè)置相應(yīng)的浮空或者上拉,這時,如果在中斷引腳上未接任何的東西,內(nèi)部需要上拉或者下拉,這樣才能保證最低功耗。