這一節(jié)主要有兩部分內(nèi)容:1、管腳的控制;2、軟件定時(shí)器的使用。
先說(shuō)定時(shí)器,ESP8266內(nèi)部的定時(shí)器分為軟件定時(shí)器和硬件定時(shí)器。手冊(cè)中指出硬件定時(shí)器其實(shí)就跟單片機(jī)里的timer一樣,而軟件定時(shí)器純粹由軟件實(shí)現(xiàn),咱們可以理解為單片機(jī)里面類似for循環(huán)之類的循環(huán)延時(shí)函數(shù)。
定時(shí)器理解了,管腳控制就簡(jiǎn)單了,先上一下我這里的模塊原理圖:

原理很簡(jiǎn)單,板上有一個(gè)三色的LED,所以這里實(shí)現(xiàn)一個(gè)定時(shí)實(shí)現(xiàn)LED開(kāi)關(guān)的程序。先說(shuō)GPIO的用法,分倆步。使用之前包含“user_interface.h”文件:
1、設(shè)置管腳為普通的GPIO模式
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12);
函數(shù)PIN_FUNC_SELECT的功能是選擇管腳功能,第一個(gè)參數(shù)是管腳的名字,第二個(gè)參數(shù)看起來(lái)像管腳編號(hào),但其實(shí)是管腳對(duì)應(yīng)的功能。
在編譯器中選中FUNC_GPIO12,按F3,會(huì)打開(kāi)eagle_soc.h文件,在這個(gè)文件里你會(huì)發(fā)現(xiàn),無(wú)論是FUNC_GPIO12,F(xiàn)UNC_GPIO13,還是多少,對(duì)應(yīng)的宏定義都是3:
#define FUNC_GPIO12 3
2、設(shè)置管腳方向和電平
gpio_output_set(BIT12, BIT13, BIT12|BIT13, 0):
該函數(shù)的功能是設(shè)置GPIO屬性,共有四個(gè)參數(shù),沒(méi)有用到的填0即可。
第一個(gè)參數(shù),設(shè)置輸出為高的位;
第二個(gè)參數(shù),設(shè)置輸出為低的位;
第三個(gè)參數(shù),設(shè)置使能輸出的管腳;
第四個(gè)參數(shù),設(shè)置使能輸入的管腳。
所以上面一行代碼的意思是:設(shè)置GPIO12和GPIO13為輸出,12輸出高,13輸出低。同理,下面一行代碼的意思是:設(shè)置GPIO12為輸入。
gpio_output_set(0, 0, 0, BIT12):
注:參考手冊(cè)2c-esp8266_sdk_api_guide_cn_v1.5.4的152頁(yè)。
然后是軟件定時(shí)器的使用,使用之前包含如下兩個(gè)頭文件:
#include "ets_sys.h" //內(nèi)有timer結(jié)構(gòu)體的定義
#include "osapi.h"
使用方法也很簡(jiǎn)單,共分四步:
1、定義一個(gè)軟件定時(shí)器的結(jié)構(gòu)體
os_timer_t LED_timer; //定義一個(gè)軟件定時(shí)器的結(jié)構(gòu)體,用于實(shí)現(xiàn)周期操作
2、關(guān)掉該定時(shí)器的定時(shí)功能
os_timer_disarm(&LED_timer); //配置之前,先關(guān)閉
3、設(shè)置該定時(shí)器的回調(diào)函數(shù)。使用定時(shí)器,必須設(shè)置回調(diào)函數(shù)
os_timer_setfn(&LED_timer, (os_timer_func_t *)LED_TURN, NULL);
該函數(shù)共有三個(gè)參數(shù):
第一個(gè),你要設(shè)置哪個(gè)定時(shí)器?LED_timer
第二個(gè),定時(shí)器定時(shí)時(shí)間到了之后,要執(zhí)行哪個(gè)函數(shù):LED_TURN
第三個(gè),回調(diào)函數(shù)的參數(shù),沒(méi)有的話寫(xiě)NULL即可。
完了,也很簡(jiǎn)單。等等!定時(shí)的時(shí)長(zhǎng)是多少?別急。
4、使能定時(shí)器,并設(shè)置時(shí)長(zhǎng),是否循環(huán)執(zhí)行
os_timer_arm(&LED_timer, 3000, 1);
該函數(shù)共有三個(gè)參數(shù):
第一個(gè),你要使能哪個(gè)定時(shí)器? LED_timer
第二個(gè),時(shí)長(zhǎng)多長(zhǎng)? 3000,單位是毫秒。另有微秒的函數(shù),可自行研究。
第三個(gè),這三秒定時(shí)的功能只運(yùn)行一次,還是循環(huán)執(zhí)行?1,循環(huán);0,一次。
第三步里,提到了一個(gè)函數(shù)LED_TURN,這個(gè)函數(shù)就是開(kāi)啟或關(guān)閉LED的函數(shù):
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;
}
}
到此,軟件定時(shí)器的用法說(shuō)完了。
-
單片機(jī)
+關(guān)注
關(guān)注
6076文章
45494瀏覽量
670262 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3368瀏覽量
123587 -
管腳
+關(guān)注
關(guān)注
1文章
230瀏覽量
33690
原文標(biāo)題:ESP8266_04管腳控制與軟件定時(shí)器
文章出處:【微信號(hào):gh_dae0718828df,微信公眾號(hào):gh_dae0718828df】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
【ESP8266系列】WT8266-S3模組規(guī)格書(shū)
【ESP8266系列】WT8266-S5模組規(guī)格書(shū)
【ESP8266系列】WT8266-S6模組規(guī)格書(shū)
【ESP8266系列】WT8266-S1模組產(chǎn)品介紹
【ESP8266系列】WT8266-S6模組產(chǎn)品介紹
無(wú)需安裝!在瀏覽器里就能玩轉(zhuǎn)ESP32/ESP8266,這個(gè)神器絕了!
【瑞薩RA6E2地奇星開(kāi)發(fā)板試用】基于RA6E2+ESP8266在STA模式下數(shù)據(jù)透?jìng)鞯絇ython服務(wù)器整體系統(tǒng)演示總結(jié)
【瑞薩RA6E2地奇星開(kāi)發(fā)板試用】使用`RA6E2`驅(qū)動(dòng) `ESP8266 WiFi模塊`,調(diào)試AT指令。
晶科鑫 | 國(guó)產(chǎn)26MHz晶振匹配Espressif(樂(lè)鑫) ESP8285/ESP8266芯片案例
ESP8266和ESP32開(kāi)發(fā)板常見(jiàn)的2種下載方式
ESP8266和ESP32開(kāi)發(fā)板常見(jiàn)的2種下載方式
請(qǐng)問(wèn)一下我想用ESP8685直接替換ESP8266而不用寫(xiě)程序,可以讓ESP8685直接通過(guò)之前ESP8266的外掛的flash運(yùn)行程序嗎
STM32+esp8266連接機(jī)智云,上傳溫濕度數(shù)據(jù)并控制繼電器開(kāi)關(guān)(平臺(tái)配置、代碼生成、代碼移植)
ESP8266燒錄與機(jī)智云一鍵配網(wǎng)教程
ESP8266的管腳的控制和軟件定時(shí)器的使用
評(píng)論