【WIFI】[esp8266]-上電引腳初始化狀態問題
ESP8266EX 上電時引腳的初始化狀態
問題:
ESP8266EX 使用SDK:NONOS_SDK_1.5.3_16_04_18,IOT_demo中的light。
上電後的350ms內,GPIO12,GPIO13,GPIO14引腳的電平始終為高電平。
在使用ESP8266EX作為MCU做了一個wifi 七彩燈。4路PWM引腳分別為:R(GPIO 14), B(GPIO12), G(GPIO 13), W(GPIO4), 全部引腳設定為PWM引腳,初始佔空比為零。
但過程中發現,每次上電後,總會RGB先亮一下,熄滅(然後進入我寫的程式)。
解決:
用是邏輯分析儀取樣發現RGB三個引腳上有350ms左右的高電平出現,(W引腳沒有這個現象),起初以為是軟體設定有誤,於是將所有的程式碼全部註釋,user_init()中只寫RGB初始化為零的語句。再一次上電,發現RGB三個引腳居然還是一樣的現象,首先出現350ms的高電平,然後拉低。
由此猜測:
1) ESP8266一上電,會有350ms左右的時間是不受使用者控制的(至少是使用官方SDK的使用者)。
2) 在上電後的350ms左右,RGB的引腳電平是被拉高的。但是引腳拉高有兩種可能性:
- 第一是:輸出功能,並且輸出高
- 第二是:輸入功能,並且上拉
為了搞清楚,其上電時,它引腳的狀態,設定簡單的測試環境。把可能干擾的電路以及其他全部弄掉,僅僅剩下一個ESP8266最小系統模組。這裡使用的是ESP8266EX(AI的模組)。
1) 使用官方SDK:NONOS_SDK_1.5.3_16_04_18 2) 使用例程App:IOT_DEMO的light 3) 修改light原始碼:將user_light中全部註釋,然後初始化以下引腳GPIO(0,2,4,5,12,13,14,15,16),將其設定為輸出,然後置低電平。 4) 由於要進入Flash啟動模式,所以先讓GPIO15 = 0,GPIO2 = 1,GPIO0 = 1; 先判斷其他引腳 5) 最後判斷GPIO15,GPIO2,GPIO0的初始狀態。
實驗方法:
使用邏輯分析儀,取樣各個引腳的波形,然後分析。
分析分為兩個步驟,首先判斷上電後,引腳的電平;然後判斷是輸入還是輸出。
- 首先判定上電後引腳的電平
由於使用者程式寫的是,上電置低,所以只要觀察,上電後,特別是350ms以內,相應引腳的波形是否有高電平出現。
1) 如果有高電平,說明引腳初始電平為高,
2) 如果無高電平,說明引腳初始電平為低。 - 然後判斷是輸出還是輸入
- 對於初始狀態為高電平,那麼其狀態就可能有兩種,一種是輸出置高,另一種是輸入上拉兩種狀態了。判斷方法如下:
各引腳使用下拉電阻,然後在上電測量,使用邏輯分析儀取樣,觀察波形。
- 如果上電後的350ms內是高電平,則該引腳是初始狀態為:輸出置高
- 如果上電後的350ms內是低電平,則該引腳是初始狀態為:輸入上拉
- 對於初始狀態為低電平,那麼其狀態就可能有兩種,一種是輸出置低,另一種是輸入下拉兩種狀態了。判斷方法如下:
各引腳使用使用上拉電阻,然後在上電測量,使用邏輯分析儀取樣,觀察波形。
- 如果上電後的350ms內是高電平,則該引腳是初始狀態為:輸入下拉
- 如果上電後的350ms內是低電平,則該引腳是初始狀態為:輸出置低
- 對於初始狀態為高電平,那麼其狀態就可能有兩種,一種是輸出置高,另一種是輸入上拉兩種狀態了。判斷方法如下:
測量後的結果如下:
GPIO NO. | PIN NO. | 初始狀態 | 初始電平 |
GPIO0 | Pin15 | 輸入上拉 | H |
GPIO2 | Pin14 | 輸入上拉 | H |
GPIO4 | Pin16 | 輸入下拉 | L |
GPIO5 | Pin24 | 輸入下拉 | L |
GPIO12 | Pin10 | 輸入上拉 | H |
GPIO13 | Pin12 | 輸入上拉 | H |
GPIO14 | Pin9 | 輸入上拉 | H |
GPIO15 | Pin13 | 輸入上拉 | H |
GPIO16 | Pin8 | 輸出置高 | H |
如果想要在上電後,不出現高電平,解決的辦法就是在相應的引腳上接上下拉電阻,然後就可以正常使用了,置高置低都不影響。我使用的是330歐姆的電阻,親測可以用。
Pillarpeng
2016.8.4