1. 程式人生 > >【WIFI】[esp8266]-上電引腳初始化狀態問題

【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的引腳電平是被拉高的。但是引腳拉高有兩種可能性:

  1. 第一是:輸出功能,並且輸出高
  2. 第二是:輸入功能,並且上拉

為了搞清楚,其上電時,它引腳的狀態,設定簡單的測試環境。把可能干擾的電路以及其他全部弄掉,僅僅剩下一個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的初始狀態。

實驗方法:
使用邏輯分析儀,取樣各個引腳的波形,然後分析。
分析分為兩個步驟,首先判斷上電後,引腳的電平;然後判斷是輸入還是輸出。

  1. 首先判定上電後引腳的電平
    由於使用者程式寫的是,上電置低,所以只要觀察,上電後,特別是350ms以內,相應引腳的波形是否有高電平出現。
    1) 如果有高電平,說明引腳初始電平為高,
    2) 如果無高電平,說明引腳初始電平為低。
  2. 然後判斷是輸出還是輸入
    1. 對於初始狀態為高電平,那麼其狀態就可能有兩種,一種是輸出置高,另一種是輸入上拉兩種狀態了。判斷方法如下:
      各引腳使用下拉電阻,然後在上電測量,使用邏輯分析儀取樣,觀察波形。
      • 如果上電後的350ms內是高電平,則該引腳是初始狀態為:輸出置高
      • 如果上電後的350ms內是低電平,則該引腳是初始狀態為:輸入上拉
    2. 對於初始狀態為低電平,那麼其狀態就可能有兩種,一種是輸出置低,另一種是輸入下拉兩種狀態了。判斷方法如下:
      各引腳使用使用上拉電阻,然後在上電測量,使用邏輯分析儀取樣,觀察波形。
      • 如果上電後的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