01問題的描述
某客戶使用 STM32G071 芯片從 standby 模式下喚醒,想要 SRAM 的數(shù)據(jù)在退出 standby模式后得以保持。根據(jù)手冊的描述,配置了相應(yīng)的比特位,但是發(fā)現(xiàn)數(shù)據(jù)仍然保持不了。
02問題的復(fù)現(xiàn)
根據(jù)客戶的描述,以及 STM32G071 的最新版參考手冊 RM0444 發(fā)現(xiàn),在 standby 模式下,可以通過設(shè)置 PWR_CR3 的 RRS 比特位去控制 SRAM 的保持能力,相應(yīng)的 API 接口函數(shù)為HAL_PWREx_EnableSRAMRetention()、HAL_PWREx_DisableSRAMRetention() ;
基于例程
......STM32CubeRepositorySTM32Cube_FW_G0_V1.6.1ProjectsNUCLEOG071RBExamplesPWRPWR_STANDBYEWARM
以及相應(yīng)的 NUCLEO-G071 開發(fā)板,修改部分代碼,根據(jù) LED4 的閃爍頻率去判斷從 Standby 模式退出后,SARM 里面的數(shù)據(jù)是否能夠保持住。
03問題的排查
基于上述的配置,簡單的測試了一下,發(fā)現(xiàn)即使 HAL_PWREx_EnableSRAMRetention() 使能了,但是測試代碼中的 sram_magic_word 的值沒有保持住,顯示的是 LED4 的閃爍頻率為1s。
究竟是什么原因?qū)е铝藬?shù)據(jù)沒有保持住呢,再次查看參考手冊,確定了只要使能 PWR_CR3的 RRS 比特位即能保持住,對比了 PWR_CR3 的 RRS 比特位的說明,在 standby 模式下,SRAM 的數(shù)據(jù)可以保持,但是當(dāng)退出 standby 模式呢?
由于測試的是從 standby 模式退出,standby 模式退出后會(huì)進(jìn)行 reset,該復(fù)位導(dǎo)致了 SRAM的數(shù)據(jù)被覆蓋或丟失?通過查閱資料,發(fā)現(xiàn)是編譯器的配置導(dǎo)致的。以 IAR 為例,查看其默認(rèn)的腳本文件 icf;
也就是說,在程序執(zhí)行的時(shí)候,會(huì)將 readwrite 的數(shù)據(jù)進(jìn)行自動(dòng)的初始化,而具有.noint 性質(zhì)的塊則不初始化,所以這兒還需要將 SRAM 里面要保持的數(shù)據(jù)放置在.noinit 的 section 中。
04問題的解決
知道原因之后,相應(yīng)的措施也就明朗了,修改 icf 文件如下:
并將想要保持的 SRAM 中的數(shù)據(jù)前面加關(guān)鍵字__no_init :
再次下載程序,發(fā)現(xiàn) LED4 的閃爍頻率跟隨 RRS 比特位值的不同而不同,符合預(yù)期。另外在實(shí)現(xiàn)的過程中,需要說明兩點(diǎn)的是:
1、修改 icf 后,可以通過 map 文件查看,應(yīng)如下文所示,如果發(fā)現(xiàn)“P2”mismatch 之類的提示,檢查下該 section 中的變量,如上面提到的 sram_magic_word,可能被編譯器優(yōu)化了,在map 中也搜索不到該名稱,則可以在實(shí)際的代碼中使用該變量進(jìn)行一些運(yùn)算或判斷,然后重新編譯即可解決。
2、當(dāng)調(diào)試器連著 IAR 調(diào)試界面運(yùn)行的時(shí)候,無論 RRS 的值設(shè)置為 0 或 1,G071 從standby 模式下退出后,SRAM 中的內(nèi)容均可以保持,如果需要驗(yàn)證 RRS 的值的影響,則建議斷開調(diào)試器,讓程序 free-running ,可以通過比如 LED 的閃爍頻率去判斷結(jié)果。
審核編輯:湯梓紅
-
芯片
+關(guān)注
關(guān)注
460文章
52520瀏覽量
441059 -
接口
+關(guān)注
關(guān)注
33文章
9005瀏覽量
153769 -
sram
+關(guān)注
關(guān)注
6文章
786瀏覽量
115977 -
STM32
+關(guān)注
關(guān)注
2293文章
11032瀏覽量
365041 -
代碼
+關(guān)注
關(guān)注
30文章
4900瀏覽量
70758
原文標(biāo)題:實(shí)戰(zhàn)經(jīng)驗(yàn) | STM32G071 從 standby 模式退出后的 SRAM 數(shù)據(jù)保留
文章出處:【微信號(hào):STM32_STM8_MCU,微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
請問STM32G071如何通過DWT實(shí)現(xiàn)us精準(zhǔn)定時(shí)?
STM32G071或G070在未燒寫程序時(shí),MCU上電其PB7腳輸出的是個(gè)高電平,為什么?
嵌入式系統(tǒng)的核心器件:STM32G071開發(fā)事項(xiàng)
時(shí)鐘小部件是不是不適用于STM32G071應(yīng)用程序模板呢
沒有VREF+ 輸入的STM32G071設(shè)備的參考是什么?
如何為stm32g071板開發(fā)一種Keil環(huán)境呢?
STM32G071 NUCLEO使用flash >30%時(shí)位圖渲染不正確怎么解決?
如何用STM32G071輸出比較計(jì)算1KHz頻率?
如何連接STM32G071進(jìn)行USB Type-C PD充電?
STM32G071GB HSE引腳可用嗎?
MCU退出standby模式時(shí)歷史數(shù)據(jù)會(huì)丟失嗎?
一文知道STM32G071 PD0 PD2引腳使用注意事項(xiàng)

STM32G071 PD0 PD2引腳使用注意事項(xiàng)

DS12232_STM32G071x8,STM32G071xB單片機(jī)數(shù)據(jù)手冊

評論