• 正文
  • 推薦器件
  • 相關推薦
申請入駐 產業(yè)圖譜

如何在低功耗模式下debug MCU?

2022/09/30
931
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論
正常情況下,通過SWD在線調試時,一旦芯片進入低功耗模式(Stop或者Standby),調試就會斷開。原因是進入Stop或者Standby模式后,內核時鐘就停止了。如果想在調試低功耗代碼時還可以正常通過調試接口debug,有沒有什么辦法呢?

以STM32F030 Stop模式為例,方法是將DBGMCU_CR寄存器的DBG_STOP位置1。

可以看到DBG_STOP置1時,F(xiàn)CLK和HCLK將處于開啟狀態(tài),由內部RC振蕩器提供時鐘,所以還可以繼續(xù)debug。

之前在調試低功耗功能時,我都是通過加打印信息來調試的。所以在看到此功能時,就迫不及待的去試了一下。

使用官方HAL庫ExamplesPWRPWR_CurrentConsumption 工程,將原例程簡化了下,使能 DBG_STOP,之后通過WFI方式進入stop模式,然后while(1)里翻轉LED,通過按鍵方式喚醒。

理論上述代碼應該是先進入低功耗,之后按鍵喚醒的話,LED才開始閃爍。

但是實際現(xiàn)象卻是LED直接就閃爍了,這是怎么回事呢?

后來經(jīng)過分析,是因為HAL庫在初始化時,使用了systick同時開啟了中斷,當DBG_STOP設置位1時,systick 因為時鐘在,所以還繼續(xù)正常運行,導致了systick中斷喚醒了MCU,所以進入了到while(1)里,

當我們把systick中斷關掉

這時就進入了低功耗。因為HAL_Delay 函數(shù)也使用了systcik,所以這里也注釋掉,或者也可以換成其他的延時函數(shù)。HAL庫在時鐘初始化前就開啟了systick,原因是后面的延時函數(shù)用的就是systcik實現(xiàn)的。

這時我們全速運行,可以看到debug連接沒有斷掉,也沒有再進入while(1)里,此時進入了低功耗函數(shù),可以通過調試窗口的stop來驗證,可以看到一直停在下面WFI里,需要注意的是,stop之后再單步或者全速運行,就會從WFI跳出繼續(xù)向下運行。所以執(zhí)行_WFI()函數(shù)時,必須是全速執(zhí)行,不可以單步執(zhí)行。

重新復位全速運行后,在while(1)里加斷點,可以看到?jīng)]有進入到斷點,這時按一下按鍵喚醒MCU,就跳入到斷點里了。這樣現(xiàn)象就正確了。

最后總結一下:

1) 通過將DBG_STOP置1,可以支持在低功耗模式下debug MCU。

2) HAL庫里使用systick中斷,使用WFI進入低功耗前,需要注意將中斷關掉。如果使用WFE進入低功耗,需要將systick使能計數(shù)標志位置0。

關注公眾號,掃碼加入嵌入式交流群:

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風險等級 參考價格 更多信息
DS2433S 1 Dallas Semiconductor EEPROM, 512X8, Serial, CMOS, PDSO8,
暫無數(shù)據(jù) 查看
KSZ8873RLLI 1 Microchip Technology Inc DATACOM, LAN SWITCHING CIRCUIT, PQFP64
$6.1 查看
HCPL-181-00BE 1 Avago Technologies 1 CHANNEL TRANSISTOR OUTPUT OPTOCOUPLER, ROHS COMPLIANT, MINIFLAT, SMD, SOP-4

ECAD模型

下載ECAD模型
$0.86 查看

相關推薦

登錄即可解鎖
  • 海量技術文章
  • 設計資源下載
  • 產業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄