描述:
STM32f0按鍵模塊電路經常遇到上電不復位的情況,芯片采用的是stm32f030,按鍵模塊采用ZLG7290芯片、4X4按鍵LED矩陣。ZLG7290是周立功公司專門開發的按鍵芯片,其最大可支持64個按鍵和64個LED,可通過I2C協議對其讀寫,ZLG7290與stm32f030復位電路采用datasheet參考電路,如下:
正常情況下,電路上電后會有一個LED全部點亮的過程,上電穩定延時后,LED自動全部熄滅,正常運行時,按下相應按鍵其對應的LED燈應被點亮。
問題:
STM32復位電路內部有自帶的上拉電阻,同時PVD的電源檢測閾值采用的是默認值2.2V,采用電池供電,電壓表測量引腳電壓在2.8V左右,但是電路上電后不能正常運行,LED矩陣上電不能被點亮,按鍵按下后相應LED燈無反應。
測試
stm32f030復位測試
stm32f030上電復位后,程序依次執行初始化的過程,其中包括設置時鐘為內部48MHZ時鐘頻率,設置并啟動串口、I2C等,之后執行LED燈全部點亮函數,延時3s關閉所有LED并進入主功能程序。
測試任務:stm32f030是否能復位:
既然上電后LED燈不能全部點亮,則LED燈全部點亮函數不能正常執行,則在此函數之前添加一個UART串口發送函數。
測試結果:
串口發送函數被執行,在超級終端收到正常的數據。
此時表示stm32f030能正常復位。
測試任務:注釋掉LED燈全部點亮函數
此時上電后,LED不能被全部點亮(函數被注釋),但是按下按鍵后相應LED可以被點亮。此時可鎖定問題在LED燈全部點亮函數上。
分析:
LED燈全部點亮函數實際上是一個I2C寫函數,通過向ZLG7290相應寄存器寫入0xFF,可點亮LED。采用上面測試的方法,在函數的每一條語句之前插入一條UART發送函數,分析執行情況,其中
while(I2C_GetFlagStatus(I2C1,I2C_FLAG_TXIS)==RESET);
執行沒有問題,再次說明stm32f030能正常復位。但是在
I2C_Senddata(I2C1, data);
語句之后,UART發送函數不能被正常執行,因此問題被鎖定。
ZLG7290不能被正常讀寫,很可能ZLG7290沒有被復位。
查閱ZLG7290的datasheet,發現ZLG7290復位時間在20ms左右,其遠遠大于stm32f030,因而產生ZLG7290沒有正常復位的情況。
結論:
電路上電不復位的原因可能是多方面的,特別是stm32f030和外圍電路均需要復位的情況,因此各個模塊可能需要隔離測試,最終鎖定問題才能找到解決的方法。
-
led
+關注
關注
242文章
23314瀏覽量
661696 -
STM32
+關注
關注
2270文章
10910瀏覽量
356634 -
復位電路
+關注
關注
13文章
322瀏覽量
44618
原文標題:STM32上電復位不正常 手動復位正常的原因
文章出處:【微信號:changxuemcu,微信公眾號:暢學單片機】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論