帶有空片檢測功能的STM32需注意的GPIO設計
發布時間:2022-02-09 責任編輯:wenwei
【導讀】從STM32F0部分型號開始,比如STM32F04x和STM32F09x,STM32越來越多的型號具有了空片檢測(Empty Check)功能。以前,STM32的啟動由BOOT0和BOOT1來決定,在引入了空片檢測功能之後,則在BOOT0=0的情況下,還需要分兩種情況:
一是內部已經存在代碼,則從用戶存儲區啟動;
二是如果是空片,則從係統存儲區啟動,執行內部Bootloader。
它帶來什麼好處呢?客戶如果是空片上板,無需對BOOT0引腳進行跳線,就可以直接使用內部Bootloader進行串口或其他通訊口進行代碼燒錄了,可以說非常地方便。但是,這同時為GPIO的設計帶來一個非常大的風險,在電路設計時需要引起注意,做好相應的措施。
問題起源
某客戶在其產品的設計中,使用STM32G0B1RET6。有一天,客戶工程師在測試電流的時候,無意間發現一個情況,說“有個比較奇怪的情況,STM32G0B1沒有燒錄代碼的情況下,會比有燒錄代碼的情況下電流多了幾十毫安。”按我們以往的認知,在沒有燒錄代碼的情況下,沒有任何操作,不該會出現這種情況啊。那麼這是什麼情況呢?
問題分析
測量STM32G0B1在沒有燒錄代碼下的GPIO在懸空下的電平,可以發現有部分GPIO呈現為高電平,比如PA2/PA3和PA9/PA10。而客戶在PA9上接了一個外部驅動電路,由高電平驅動,所以PA9的高電平,帶動了該部分電路的工作,導致了電流的增加。
從參考手冊RM0444的GPIO一章,我們知道STM32G0的GPIO在上電後應該為模擬狀態,所以這些呈現高電平的GPIO顯得有點奇怪。
突然想起STM32F091等型號早就已經有的空片檢測功能,就繼續查看STM32G0的參考手冊RM0444的 “Memory and bus architecture”一章,果然,發現STM32G0係列同樣擁有空片檢測功能。也就是說,STM32G0B1在沒有燒錄代碼的情況下,它是要到係統存儲區去執行內部Bootloader的。
此時,需要打開應用筆記AN2606《STM32微控製器係統存儲器自舉模式》了解一下STM32G0B1在係統Bootloader下GPIO的狀態。
由於之前已經檢測到PA2/PA3和PA9/PA10為高電平,而這兩個引腳對剛好是Bootloader中所用到USART1和USART2對應的GPIO引腳。於是,檢查其在Bootloader中的配置狀態,請參考圖1。
Figure 1 係統Bootloader下USART1/2的端口狀態
從圖1中可以了解到PA2/PA3/PA9/PA10均配置為複用推挽結構,帶上拉電阻。其中PA10/PA3為輸入口,PA2/PA9為輸出口。
使用一個1kΩ的電阻來測量PA9/PA10的端口狀態,來確定其高電平的來源。係統VDD的電壓為3.22V。
測量之前,需要了解一下GPIO的結構,如圖2。
Figure 2 複用功能配置下的I/O的結構
從圖2中可以得知,當作為輸出時,端口上呈現的高電平來自P-MOS上的VDDIOX;當作為輸入時,端口上呈現的高電平來自上拉電阻上的VDDIOX。下麵來驗證測試一下。
先對輸出口PA9進行測量,使用1kΩ電阻串入PA9與VSS之間,並串上電流表,測得電流為3.22mA。由U=I·R公式,剛剛好,總電阻R = U / I = 3.22V ÷ 3.22mA = 1kΩ。也就是說,PA9的高電平由推挽結構中的P-MOS連接的VDDIOX提供,內部沒有電阻。
再來對輸入口PA10進行測量,使用1kΩ電阻串入PA10與VSS之間,並串上電流表,測得電流為85.4uA。總電阻R = U / I = 3.22V ÷ 85.4uA = 37.7kΩ,大於在外部串接的1kΩ電阻。也就是說,PA10的高電平來自上拉電阻所連接的VDDIOX,而且內部上拉電阻RPU = 37.7kΩ - 1kΩ = 36.7kΩ。
多加一步再次確認輸入口PA10的情況,這次不使用1kΩ電阻,而是直接將PA10串上電流表連接到VSS,得到電流值為87.7uA。內部上拉電阻RPU = U / I = 3.22V ÷ 87.7uA = 36.7kΩ,與上麵的測試是相同的。也符合STM32G0B1數據手冊中內部上拉電阻的範圍,如圖3。
Figure 3 I/O的上下拉電阻參數
存在的風險
到此,已經清楚用戶存儲區沒有燒錄代碼的時候,STM32啟動將進入係統 Bootloader,PA9被(bei)設(she)置(zhi)為(wei)複(fu)用(yong)輸(shu)出(chu)並(bing)輸(shu)出(chu)高(gao)電(dian)平(ping),從(cong)而(er)推(tui)動(dong)外(wai)部(bu)電(dian)路(lu)產(chan)生(sheng)的(de)電(dian)流(liu)增(zeng)加(jia)。但(dan)是(shi)我(wo)們(men)應(ying)該(gai)更(geng)加(jia)深(shen)入(ru)地(di)研(yan)究(jiu)這(zhe)個(ge)問(wen)題(ti)。客(ke)戶(hu)的(de)情(qing)況(kuang)還(hai)算(suan)是(shi)比(bi)較(jiao)好(hao)的(de),接(jie)的(de)是(shi)一(yi)個(ge)驅(qu)動(dong)電(dian)路(lu),並(bing)不(bu)會(hui)帶(dai)來(lai)損(sun)壞(huai)。
想象一下,如果在客戶的應用中,PA9是用作輸入口,用來連接一個傳感器的中斷輸出,比如連接3軸MEMS加速度計LIS2DH12的INT1/2引腳。查看LIS2DH12的數據手冊,可以得知INT1和IN2引腳的初始狀態是輸出低電平的,如圖4。
Figure 4 LIS2DH的INT1/INT2引腳初始狀態
由於LIS2DH12的INT引腳初始狀態是推挽輸出且輸出低電平,如果直接連接到PA9,而用戶打算將空片先焊接於用戶板,再進行代碼燒錄的話,那麼,當上電的時候,LIS2DH12的INT引腳輸出低電平,而STM32G0B1進入內部Bootloader後PA9輸出高電平,直連將導致短路,電流從STM32G0B1的PA9內部的VDDIOX經過P-MOS,從PA9引腳出來,經過連接線,到達LIS2DH12的INT引腳,從內部的M-MOS流到VSS,中間因為沒有電阻而造成短路,很可能會對芯片產生損壞。所以必須加以注意!
PA10作為複用輸入功能,倒是沒有這個風險。
結論
由於空片檢測功能的存在,帶有此功能的STM32型號在空片的情況下啟動,將會進入係統存儲區,執行內部Bootloader。內部Bootloader會將部分GPIO設置為複用功能輸出引腳並輸出高電平或低電平,如果此引腳在用戶應用中作為輸入引腳連接到外部芯片的輸出引腳,那麼STM32空片事先焊接於用戶板時,上電將可能帶來極大的風險。在GPIO設計中如遇到有空片檢測功能的STM32必須對此加以注意。
解決辦法
兩種解決辦法供用戶選擇。
1) 在兩個芯片的連接中串入電阻進行保護,流經此電阻的電流必須要低於GPIO的注入電流,而且還必須保證不影響雙邊的高低電平識別。
2) 在使用帶有空片檢測功能的STM32型號中,在硬件設計上要預先檢查AN2606中所描述的Bootloader使用並配置的複用功能輸出引腳,在GPIO設計時避免在用戶應用中將其作為輸入引腳。
以上兩種方法,推薦使用第二種方法,更簡單、更穩妥。
來源:STM32單片機
免責聲明:本文為轉載文章,轉載此文目的在於傳遞更多信息,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請聯係小編進行處理。
推薦閱讀:
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
- 貿澤EIT係列新一期,探索AI如何重塑日常科技與用戶體驗
- 算力爆發遇上電源革新,大聯大世平集團攜手晶豐明源線上研討會解鎖應用落地
- 創新不止,創芯不已:第六屆ICDIA創芯展8月南京盛大啟幕!
- AI時代,為什麼存儲基礎設施的可靠性決定數據中心的經濟效益
- 矽典微ONELAB開發係列:為毫米波算法開發者打造的全棧工具鏈
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall





