版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第第頁關(guān)于stm32單片機低功耗的實現(xiàn)和喚醒最近做的項目中要求低功耗,在單片機完成了手頭上的工作之后,就進入低功耗模式,項目的需求是單片機進入低功耗模式的時候系統(tǒng)時鐘從HSE切到HSI,但是在未進入低功耗模式之前引腳是什么狀態(tài),進入低功耗模式之后也不應(yīng)該改變。可以通過RTC定時喚醒,或者接收到串口數(shù)據(jù)就喚醒,處理完數(shù)據(jù)后再進入stop模式。查詢了一些資料之后,發(fā)現(xiàn)stop模式最符合項目需求。下面講述一下什么是低功耗:
一、stm32支持三種低功耗模式,可以在低功耗,短啟動,多種喚醒模式下尋找平衡。
1、SleepMode睡眠模式,只有CPU停止運行,所有的外設(shè)處于工作狀態(tài)并且可以在發(fā)生中斷/事件時喚醒CPU。
2、StopMode停機模式,保持SRAM和寄存器內(nèi)容不丟失,達到最低的電能消耗。停止所有內(nèi)部1.8V部分的供電,PLL、HSI的RC振蕩器和HSE晶體振蕩器被關(guān)閉,調(diào)壓器可以被置于普通模式或低功耗模式??梢酝ㄟ^任一EXTI從停機模式中喚醒,EXTI信號可以是16個外部I/O口之一、PVD的輸出、RTC鬧鐘或USB的喚醒信號。
3、StandbyMode待機模式。最低的電能消耗。內(nèi)部1.8V部分的供電被切斷;PLL、HSI的RC振蕩器和HSE晶體振蕩器關(guān)閉;SRAM和寄存器的內(nèi)容將消失,但后備寄存器的內(nèi)容仍然保留,待機電路仍工作。從待機模式退出的條件是:NRST上的外部復(fù)位信號、IWDG復(fù)位、WKUP引腳上的一個上升邊沿或RTC的鬧鐘到時。
二、低功耗模式基于HAL庫的常用API
2.1睡眠模式SleepMode
__HAL_RCC_PWR_CLK_ENABLE();//電源管理使能
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON,PWR_SLEEPENTRY_WFI);//進入睡眠模式
2.2停機模式StopMode
__HAL_RCC_PWR_CLK_ENABLE();//電源管理使能
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI);//進入停機模式
2.3待機模式StandbyMode
__HAL_RCC_PWR_CLK_ENABLE();//電源管理使能
PWR_Check_Standby();//檢查是否是待機模式
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);//清除喚醒標(biāo)志
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);//清除待機標(biāo)志
__HAL_PWR_GET_FLAG(PWR_FLAG_SB);//獲得待機模式標(biāo)志
HAL_PWR_EnterSTANDBYMode();//進入待機模式
以上相關(guān)描述參考/u010058695/article/details/100008613
三、Stop模式中遇到的一些問題及解決方法
1、沒有配置好喚醒機制,導(dǎo)致進入stop模式后沒能喚醒,導(dǎo)致無法識別到st-link,無法重新燒錄程序。即使重新上電也不能識別到st-link。
我在這個問題上栽了跟頭,因為單片機重新上電后依然不能識別到st-link,所以以為是單片機壞了,重新?lián)Q了單片機再燒錄同樣的程序,結(jié)果問題還是一樣,我開始意識到問題不是那么簡單,上網(wǎng)找了一下資料,才知道是進入stop模式后不能喚醒,具體的做法有幾種:
①可以將單片機的NRST引腳引出來,外接復(fù)位鍵。(關(guān)于引腳查看可用ST官方軟件STM32cubeMX,很方便)如圖:把NRST引出來通過一個按鍵連接到GND,當(dāng)進入STOP模式不能燒錄程序的時候只需要在按下按鍵后,點擊keil的
,然后松手即可。
②通過ISP的方式下載程序,必須將boot0接高電平,boot1(PB2)接低電平,然后必須斷電后重啟,此時單片機會進入ISP模式,就可以通過串口1(一般單片機都是只有串口1才可下載程序)再用flymcu等軟件燒入hex文件就可以了。
關(guān)于boot0和boot1,在每個stm32單片機都會有這兩個引腳,這兩個引腳在復(fù)位時的電平狀態(tài)決定了芯片在復(fù)位后從哪個區(qū)域開始執(zhí)行程序。
boot1=xboot0=0從用戶閃存啟動,這是正常的工作模式。
boot1=0boot0=1從系統(tǒng)存儲器啟動(進入ISP模式)。
boot1=1boot0=1從內(nèi)置SRAM啟動,這種模式可以用于調(diào)試。
如此一來,單片機無法進入正常的工作模式,就無法進行休眠,就可以通過ISP來下載程序。
③使用STlink燒寫程序,STlink至少要接4根線(SWDIO、SWCLK、GND、SW-RST),一般的下載程序只需要前三根就可以了,但是以防出現(xiàn)休眠無法喚醒的情況,這時有復(fù)位鍵就可以將SWDIO和SWCLK重置,如果板子設(shè)計沒有與SW-RST相對應(yīng)的,此時需要把單片機上的NRST引出來接到SW-RST上。下載程序之前boot0接高電平,boot1不用管(也需要斷電后重啟)。
下載配置這里按如下配置,RESET那里HWRESET和SYSRESETREQ任選一個。
配置好之后load一個空程序即可,不要再燒一個休眠的程序了,之后就可以正常燒程序了。
以上解決方法參考/geekjin/article/details/79232405,總結(jié)就是復(fù)位NRST這個引腳是最簡單的方法,以后做項目還是要提醒硬件工程師把這個引腳引出來。
2、項目需要單片機在進入stop模式后過5秒鐘就喚醒,實際上RTC鬧鐘中斷也是掛在EXTI中斷上的。我是用CubeMX配置的RTC,但是一直沒有喚醒,后面終于找到問題所在了:
紅色框框里的前三個應(yīng)該配置為Enable,第四個應(yīng)該配置為Disable,前三個是鬧鐘屏蔽星期,鬧鐘屏蔽小時,鬧鐘屏蔽分鐘,如果不是這樣配置的話,只能等到時間達到了設(shè)定好的某天某時某分某秒才能發(fā)生中斷,那么只能一周喚醒一次了。如果是這樣設(shè)置的話,就是一分鐘喚醒一次,那么怎么才能5秒鐘喚醒一次呢?我的做法是每次進入stop模式前就調(diào)用一次MX_RTC_Init()函數(shù)一次,因為我的時間是設(shè)置為x年x月x日星期xx時x分0秒,所以相當(dāng)于每次進入stop模式前初始化一次RTC,5秒鐘后就會發(fā)生鬧鐘中斷。這種辦法可能是比較笨的方法,但是好歹實現(xiàn)了這個功能哈哈
3、為了方便調(diào)試,我還配置了LED,每隔200ms閃爍一次,但是我發(fā)現(xiàn)從stop模式喚醒后燈的閃爍明顯變得很慢,而且串口數(shù)據(jù)的接收和發(fā)送也不能完成,這是為什么呢?
原來進入stop模式后系統(tǒng)時鐘默認(rèn)切換到內(nèi)部8M時鐘,所以頻率就會變慢了
我的解決方法是重新配置系統(tǒng)時鐘:/***************************************函數(shù)名稱:voidSYSCLKConfig_STOP(void)*函數(shù)功能:選擇HSE作為時鐘源*函數(shù)形參:無*函數(shù)返回值:無****************************************/voidSYSCLKConfig_STOP(void){__HAL_RCC_HSE_CONFIG(RCC_HSE_ON);while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY)==RESET){}/*使能PLL*/__HAL_RCC_PLL_ENABLE();/*等待PLL準(zhǔn)備就緒*/while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY)==RESET){}/*選擇PLL作為系統(tǒng)時鐘源*/__HAL_RCC_SYSCLK_CONFIG(RCC_SYSCLKSOURCE_PLLCLK);/*等待PLL被選擇為系統(tǒng)時鐘源*/while(__HAL_RCC_GET_SYSCLK_SOURCE()!=0x08){}}
4、接收到串口數(shù)據(jù)后怎么喚醒stop模式?
其實RTC鬧鐘中斷喚醒stop模式也是因為鬧鐘事件是連接著外部中斷線的,但是串口接收中斷并不能喚醒stop模式啊,怎么辦?
解決方法有兩種,一種是在RX引腳上接上光耦連接到其他IO口上,把該IO口配置為外部中斷,但是這種方案比較麻煩,所以可以采取第二種方案,在進入stop模式之前把RX引腳配置為外部中斷模式,這樣的話,RX引腳上有電平變化的時候就會發(fā)生外部中斷,在服務(wù)函數(shù)中記得把RX引腳再配置為復(fù)用為UART的接收引腳。并且重新配置系統(tǒng)時鐘,選擇HSE為時鐘源。這樣就可以實現(xiàn)喚醒并接收數(shù)據(jù)了。但是因為第一次接收到串口數(shù)據(jù)的時候只能喚醒stop模式,并不能接收到數(shù)據(jù),所以應(yīng)該跟發(fā)送方約定好,一幀數(shù)據(jù)要發(fā)送兩次。而且中間要有一定間隔,我的間隔是500ms。這樣確
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 浙商銀行湖州分行2026年一季度社會招聘筆試備考試題及答案解析
- 2026年青少年體能訓(xùn)練方法培訓(xùn)
- 2026濟南能源集團資源開發(fā)有限公司招聘(15人)筆試參考題庫及答案解析
- 2026年陜西觀瀾生態(tài)環(huán)境有限公司招聘(2人)筆試模擬試題及答案解析
- 2025年南京醫(yī)療事業(yè)編考試題目及答案
- 2026上半年貴州事業(yè)單位聯(lián)考銅仁市市直招聘49人考試備考試題及答案解析
- 2025年事業(yè)編d類專業(yè)知識考試及答案
- 2025年水利院校單招筆試題庫及答案
- 2025年遷安三中事業(yè)編招聘考試及答案
- 2025年玉州區(qū)教師招聘筆試答案
- 樁基旋挖鉆施工方案
- 臨床成人失禁相關(guān)性皮炎的預(yù)防與護理團體標(biāo)準(zhǔn)解讀
- 創(chuàng)新創(chuàng)業(yè)教育學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 培訓(xùn)機構(gòu)轉(zhuǎn)課協(xié)議
- 河道治理、拓寬工程 投標(biāo)方案(技術(shù)方案)
- 創(chuàng)客教室建設(shè)方案
- 政治審查表(模板)
- 《最奇妙的蛋》完整版
- SEMI S1-1107原版完整文檔
- 2023年中級財務(wù)會計各章作業(yè)練習(xí)題
- 金屬罐三片罐成型方法與罐型
評論
0/150
提交評論