這一節主要有兩部分內容:1、管腳的控制;2、軟件定時器的使用。
先說定時器,ESP8266內部的定時器分為軟件定時器和硬件定時器。手冊中指出硬件定時器其實就跟單片機里的timer一樣,而軟件定時器純粹由軟件實現,咱們可以理解為單片機里面類似for循環之類的循環延時函數。
定時器理解了,管腳控制就簡單了,先上一下我這里的模塊原理圖:
原理很簡單,板上有一個三色的LED,所以這里實現一個定時實現LED開關的程序。先說GPIO的用法,分倆步。使用之前包含“user_interface.h”文件:
1、設置管腳為普通的GPIO模式
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12);
函數PIN_FUNC_SELECT的功能是選擇管腳功能,第一個參數是管腳的名字,第二個參數看起來像管腳編號,但其實是管腳對應的功能。
在編譯器中選中FUNC_GPIO12,按F3,會打開eagle_soc.h文件,在這個文件里你會發現,無論是FUNC_GPIO12,FUNC_GPIO13,還是多少,對應的宏定義都是3:
#define FUNC_GPIO12 3
2、設置管腳方向和電平
gpio_output_set(BIT12, BIT13, BIT12|BIT13, 0):
該函數的功能是設置GPIO屬性,共有四個參數,沒有用到的填0即可。
第一個參數,設置輸出為高的位;
第二個參數,設置輸出為低的位;
第三個參數,設置使能輸出的管腳;
第四個參數,設置使能輸入的管腳。
所以上面一行代碼的意思是:設置GPIO12和GPIO13為輸出,12輸出高,13輸出低。同理,下面一行代碼的意思是:設置GPIO12為輸入。
gpio_output_set(0, 0, 0, BIT12):
注:參考手冊2c-esp8266_sdk_api_guide_cn_v1.5.4的152頁。
然后是軟件定時器的使用,使用之前包含如下兩個頭文件:
#include "ets_sys.h" //內有timer結構體的定義
#include "osapi.h"
使用方法也很簡單,共分四步:
1、定義一個軟件定時器的結構體
os_timer_t LED_timer; //定義一個軟件定時器的結構體,用于實現周期操作
2、關掉該定時器的定時功能
os_timer_disarm(&LED_timer); //配置之前,先關閉
3、設置該定時器的回調函數。使用定時器,必須設置回調函數
os_timer_setfn(&LED_timer, (os_timer_func_t *)LED_TURN, NULL);
該函數共有三個參數:
第一個,你要設置哪個定時器?LED_timer
第二個,定時器定時時間到了之后,要執行哪個函數:LED_TURN
第三個,回調函數的參數,沒有的話寫NULL即可。
完了,也很簡單。等等!定時的時長是多少?別急。
4、使能定時器,并設置時長,是否循環執行
os_timer_arm(&LED_timer, 3000, 1);
該函數共有三個參數:
第一個,你要使能哪個定時器? LED_timer
第二個,時長多長? 3000,單位是毫秒。另有微秒的函數,可自行研究。
第三個,這三秒定時的功能只運行一次,還是循環執行?1,循環;0,一次。
第三步里,提到了一個函數LED_TURN,這個函數就是開啟或關閉LED的函數:
void LED_TURN()
{
static state_flag = 0;
if(state_flag == 0)
{
//GPIO12拉高,GPIO13拉低
gpio_output_set(BIT12, BIT13, BIT12|BIT13, 0);
state_flag = 1;
}
else
{
gpio_output_set(BIT13, BIT12, BIT12|BIT13, 0);
state_flag = 0;
}
}
到此,軟件定時器的用法說完了。
-
單片機
+關注
關注
6043文章
44622瀏覽量
638548 -
定時器
+關注
關注
23文章
3255瀏覽量
115371 -
管腳
+關注
關注
1文章
228瀏覽量
32121
原文標題:ESP8266_04管腳控制與軟件定時器
文章出處:【微信號:gh_dae0718828df,微信公眾號:gh_dae0718828df】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
arduino(1)--ESP8266配置
esp32和esp8266代碼共用嗎
esp8266和esp32區別是什么
esp8266不燒錄可以使用嗎
esp8266wifi模塊怎么連接手機
ESP8266的軟件定時器允許在user_init中定義兩個不同的定時器然后去定時兩個不同的操作嗎?
ESP8266EX開發板PWM非常不準確是怎么回事?
esp8266定時器中程序占用時間太長,導致AP無法廣播或者廣播了連接不上怎么解決?
ESP8266使用PWM庫時,它導致esp-homekit客戶端斷開連接,怎么解決?
國產低成本Wi-Fi SoC解決方案芯片ESP8266與ESP8285對比差異
![國產低成本Wi-Fi SoC解決方案芯片<b class='flag-5'>ESP8266</b>與<b class='flag-5'>ESP</b>8285對比差異](https://file1.elecfans.com/web2/M00/E6/5C/wKgZomZG0KiASP_yAAELgTM0cRs433.png)
使用Wi-Fi ESP8266方案模組接入云平臺
![使用Wi-Fi <b class='flag-5'>ESP8266</b>方案模組接入云平臺](https://file.elecfans.com/web2/M00/3E/6A/pYYBAGJhBGGAGyDYAACBPQuBZQI711.png)
評論