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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

关于ESP8266 GPIO中断使用的总结

發布時間:2025/3/21 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于ESP8266 GPIO中断使用的总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近折騰新項目需要用到GPIO的中斷來處理一些邏輯功能,翻看了官網的API開發文檔,文檔說的比較簡單,只是對API方法做了一下解釋說明,沒有實際的完整例子,沒辦法,只能問度娘了。度娘果然啥都有,參考了以下這篇文章: http://blog.csdn.net/qq_15647227/article/details/52218286?locationNum=1 這篇文章不但給出了實例代碼,還對api進行了說明,寫得非常好,大家完全可以參照這篇代碼來做,因為我的項目需要用到兩個gpio 管腳 中斷,需要在這篇文章的基礎上再添加一個 管腳 ,這里就把我在添加過程中遇到的一些問題和難點再進一步說明一下。廢話不說,先上代碼,然后再來解釋說明。

[cpp]?view plaincopy
  • #include?"osapi.h"??
  • #include?"user_interface.h"??
  • #include?"ets_sys.h"??
  • #include?"mem.h"??
  • ??
  • uint32?ICACHE_FLASH_ATTR?user_rf_cal_sector_set(void)??
  • {??
  • ????enum?flash_size_map?size_map?=?system_get_flash_size_map();??
  • ????uint32?rf_cal_sec?=?0;??
  • ??
  • ????switch?(size_map)?{??
  • ????????case?FLASH_SIZE_4M_MAP_256_256:??
  • ????????????rf_cal_sec?=?128?-?5;??
  • ????????????break;??
  • ??
  • ????????case?FLASH_SIZE_8M_MAP_512_512:??
  • ????????????rf_cal_sec?=?256?-?5;??
  • ????????????break;??
  • ??
  • ????????case?FLASH_SIZE_16M_MAP_512_512:??
  • ????????case?FLASH_SIZE_16M_MAP_1024_1024:??
  • ????????????rf_cal_sec?=?512?-?5;??
  • ????????????break;??
  • ??
  • ????????case?FLASH_SIZE_32M_MAP_512_512:??
  • ????????case?FLASH_SIZE_32M_MAP_1024_1024:??
  • ????????????rf_cal_sec?=?1024?-?5;??
  • ????????????break;??
  • ??
  • ????????default:??
  • ????????????rf_cal_sec?=?0;??
  • ????????????break;??
  • ????}??
  • ??
  • ????return?rf_cal_sec;??
  • }??
  • ??
  • static?void?gpio_intr_handler()??
  • {??
  • ????uint32?gpio_status?=?GPIO_REG_READ(GPIO_STATUS_ADDRESS);??
  • ????ETS_GPIO_INTR_DISABLE();//關閉中斷??
  • ????if(gpio_status?&?BIT(4))//判斷中斷針腳??
  • ????{??
  • ????????os_printf("111\n");//輸出1111??
  • ????}??
  • ????if(gpio_status?&?BIT(5))//判斷中斷針腳??
  • ????{??
  • ????????os_printf("222\n");//輸出222??
  • ????}??
  • ????os_delay_us(10000);//系統延時??
  • ????GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS,?gpio_status);//清中斷標志??
  • ????ETS_GPIO_INTR_ENABLE();//打開中斷??
  • }??
  • ??
  • ??
  • void?ICACHE_FLASH_ATTR?user_init(void)??
  • {??
  • ????gpio_init();??
  • ????PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U,?FUNC_GPIO5);//設置GPIO功能??
  • ????GPIO_DIS_OUTPUT(GPIO_ID_PIN(5));//設置GPIO5為輸入??
  • ????PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U,?FUNC_GPIO4);<span?style="font-family:?Arial,?Helvetica,?sans-serif;">//設置GPIO功能</span>??
  • ????GPIO_DIS_OUTPUT(GPIO_ID_PIN(4));//設置GPIO5為輸入??
  • ??????
  • ????PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO5_U);//GPIO5使能上拉??
  • ????PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO4_U);//GPIO4使能上拉??
  • ??????
  • ????ETS_GPIO_INTR_DISABLE();//關閉中斷??
  • ????ETS_GPIO_INTR_ATTACH(&gpio_intr_handler,?NULL);//設置中斷函數??
  • ????gpio_pin_intr_state_set(GPIO_ID_PIN(5),?GPIO_PIN_INTR_LOLEVEL);//設置中斷類型??
  • ????gpio_pin_intr_state_set(GPIO_ID_PIN(4),?GPIO_PIN_INTR_LOLEVEL);//設置中斷類型??
  • ??
  • ????ETS_GPIO_INTR_ENABLE();//打開中斷??
  • }??
  • 因為用的是1.4的SDK,所以代碼中多了

    [plain]?view plaincopy
  • uint32?ICACHE_FLASH_ATTR?user_rf_cal_sector_set(void)??
  • 這個函數,不然無法編譯。先來說一下代碼功能,這里使用了GPIO4和GPIO5兩個管腳來做中斷,當GPIO4管腳拉低的時候觸發中斷,終端輸出111,GPIO5管腳拉低的時候,輸出222,就是這么簡單的實驗。現在分析一下代碼行及注意事項。

    [plain]?view plaincopy
  • PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U,?FUNC_GPIO5);//設置GPIO功能??
  • GPIO_DIS_OUTPUT(GPIO_ID_PIN(5));//設置GPIO5為輸入??
  • 首先來看這兩行,很多網友可能知道這兩行是干嗎用的,但是有沒有對里面的參數有疑問的,之前筆者就一直對這個一知半解,文檔里面的描述是PIN_FUNC_SELECT(PIN_NAME,FUNC) 一個是管教名稱,另一個是FUNC,那么這個PIN_NAME跟FUNC在哪里找呢,原來在官方SDK包的include/eagle_soc.h文件里有描述,大家可以去看看,然后根據自己的管腳填寫,不然雖然編譯能通過,但是管腳卻不起作用,這里定義了GPIO4跟GPIO5兩個管腳,并把管腳設置為輸入。管腳設置好后,通過以下語句來上拉管腳使能,這里要注意,這個很重要,不然一會中斷會出現莫名奇妙的問題。

    [plain]?view plaincopy
  • PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO5_U);//GPIO5使能上拉??
  • PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO4_U);//GPIO4使能上拉??
  • 接著就可以按照文章里面的方法配置中斷處理函數,添加相關的處理方法,我在里面參考其他網友的方法添加了延時。基本上就差不多這樣了,大家可以根據自己的實際需求進行修改,或者自己添加更多的管腳,希望這篇文章能幫助到大家。有興趣的朋友也可以加入企鵝群(254267969)一起交流

    總結

    以上是生活随笔為你收集整理的关于ESP8266 GPIO中断使用的总结的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。