日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

定时器回调函数怎么写_ESP8266_04管脚控制与软件定时器

發(fā)布時間:2025/4/5 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 定时器回调函数怎么写_ESP8266_04管脚控制与软件定时器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ? ? ? ?這一節(jié)主要有兩部分內(nèi)容:1、管腳的控制;2、軟件定時器的使用。

???????? 先說定時器,ESP8266內(nèi)部的定時器分為軟件定時器和硬件定時器。手冊中指出硬件定時器其實就跟單片機里的timer一樣,而軟件定時器純粹由軟件實現(xiàn),咱們可以理解為單片機里面類似for循環(huán)之類的循環(huán)延時函數(shù)。

???????? 定時器理解了,管腳控制就簡單了,先上一下我這里的模塊原理圖:

???????? 原理很簡單,板上有一個三色的LED,所以這里實現(xiàn)一個定時實現(xiàn)LED開關的程序。先說GPIO的用法,分倆步。使用之前包含“user_interface.h”文件:

1、設置管腳為普通的GPIO模式

???????? PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12);

???????? 函數(shù)PIN_FUNC_SELECT的功能是選擇管腳功能,第一個參數(shù)是管腳的名字,第二個參數(shù)看起來像管腳編號,但其實是管腳對應的功能。

???????? 在編譯器中選中FUNC_GPIO12,按F3,會打開eagle_soc.h文件,在這個文件里你會發(fā)現(xiàn),無論是FUNC_GPIO12,FUNC_GPIO13,還是多少,對應的宏定義都是3:

???????? #define FUNC_GPIO12???? ????????????????3

2、設置管腳方向和電平

???????? gpio_output_set(BIT12, BIT13, BIT12|BIT13, 0):

???????? 該函數(shù)的功能是設置GPIO屬性,共有四個參數(shù),沒有用到的填0即可。

???????? 第一個參數(shù),設置輸出為高的位;

???????? 第二個參數(shù),設置輸出為低的位;

???????? 第三個參數(shù),設置使能輸出的管腳;

???????? 第四個參數(shù),設置使能輸入的管腳。

???????? 所以上面一行代碼的意思是:設置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"?????? //內(nèi)有timer結構體的定義

? ? ? ? ?#include "osapi.h"

? ? ? ? 使用方法也很簡單,共分四步:

1、定義一個軟件定時器的結構體

? ? ? ? os_timer_t LED_timer;???????????? //定義一個軟件定時器的結構體,用于實現(xiàn)周期操作

2、關掉該定時器的定時功能

? ? ? ? ?os_timer_disarm(&LED_timer);????? //配置之前,先關閉

3、設置該定時器的回調(diào)函數(shù)。使用定時器,必須設置回調(diào)函數(shù)

? ? ? ? ?os_timer_setfn(&LED_timer, (os_timer_func_t *)LED_TURN, NULL);

? ? ? ? ?該函數(shù)共有三個參數(shù):

? ? ? ? ?第一個,你要設置哪個定時器?LED_timer

? ? ? ? ?第二個,定時器定時時間到了之后,要執(zhí)行哪個函數(shù):LED_TURN

? ? ? ? ?第三個,回調(diào)函數(shù)的參數(shù),沒有的話寫NULL即可。

? ? ? ? ?完了,也很簡單。等等!定時的時長是多少?別急。

4、使能定時器,并設置時長,是否循環(huán)執(zhí)行

? ? ? ? ?os_timer_arm(&LED_timer, 3000, 1);

? ? ? ? ?該函數(shù)共有三個參數(shù):

? ? ? ? ?第一個,你要使能哪個定時器????????? LED_timer

? ? ? ? ?第二個,時長多長????????????????????????????????? 3000,單位是毫秒。另有微秒的函數(shù),可自行研究。

? ? ? ? ?第三個,這三秒定時的功能只運行一次,還是循環(huán)執(zhí)行?1,循環(huán);0,一次。

? ? ? ? ?第三步里,提到了一個函數(shù)LED_TURN,這個函數(shù)就是開啟或關閉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;

???????? }

}

???????? 到此,軟件定時器的用法說完了。

???????? 注:參考手冊2c-esp8266_sdk_api_guide_cn_v1.5.4的23頁。

? ? ? ? ?注意事項:手冊建議,不要在程序中使用while(1)? 實現(xiàn)死循環(huán),非常危險。

???????? 依次clean和build一下,生成bin文件,下載后可看到板上的LED,依次亮滅。

? ? ? ? ?程序下載鏈接:https://pan.baidu.com/s/1fDc4ap2TeazjP_nQL7ZtVg
? ? ? ? ?提取碼:9onb

總結

以上是生活随笔為你收集整理的定时器回调函数怎么写_ESP8266_04管脚控制与软件定时器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。