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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【ESP8266】NONOS SDK开发,串口发送、接收与中断

發(fā)布時(shí)間:2025/3/21 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【ESP8266】NONOS SDK开发,串口发送、接收与中断 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

ESP8266感覺(jué)要成現(xiàn)在物聯(lián)網(wǎng)的黑馬了,集成WiFi功能、能編程,還便宜,確實(shí)挺6的。

就是能提供的資料太少,感覺(jué)官網(wǎng)上的遠(yuǎn)遠(yuǎn)不夠用,這個(gè)串口收發(fā)與中斷折騰了我是在太久,在這里小的就分享一下自己的經(jīng)驗(yàn)。


大家都問(wèn)我要工程,我終于可以上傳啦:

http://download.csdn.net/download/d521000121/10045750

由于時(shí)代久遠(yuǎn),本人很多都忘了,誠(chéng)意與大家交流。


芯片:ESP8266-07


先介紹一下ESP8266的UART情況:

ESP8266共有兩組UART接口,分別為:

UART0:

U0TXD: pin26(U0TXD)

U0RXD: pin25(U0RXD)

U0CTS: pin12(MTCK)

U0RTS: pin13(MTDO)

UART1:

U1TXD: pin14(GPIO2)

UART0和UART1各有一個(gè)長(zhǎng)度為128Byte的硬件FIFO,讀寫FIFO都在同一個(gè)地址操作。

兩個(gè)UART模塊的硬件寄存器相同,通過(guò)UART0/UART1的宏定義來(lái)區(qū)分。

我們一般就用加粗的那幾個(gè)端口,UART0可以串口輸入輸出,UART1只有TXD,一般用于打印系統(tǒng)信息。

這里順帶提一句,在后面也會(huì)實(shí)現(xiàn)的:

在初始化端口的時(shí)候

os_printf本接口默認(rèn)從 UART 0 打印。IOT_Demo 中的 uart_init 可以設(shè)置波特率,其中

os_install_putc1((void *)uart1_write_char) 將 os_printf 改為從 UART 1 打印


好了,現(xiàn)在假設(shè)已經(jīng)知道ESP8266的NONOS-SDK開(kāi)發(fā)大致怎么用。

我們所需要的工程目錄大致是這樣的。


初始化UART大致步驟如下:

1、在某個(gè)地方先調(diào)用uart_init(UartBautRate uart0_br, UartBautRate uart1_br),這uart.c的文件中

但是為了使用上接收中斷,我們需要做一點(diǎn)改動(dòng)

12345678910111213141516171819202122232425262728293031323334353637 void ICACHE_FLASH_ATTRuart_init(UartBautRate uart0_br, UartBautRate uart1_br){/*this is a example to process uart data from task,please change the priority to fit your application task if exists*/system_os_task(uart_recvTask, uart_recvTaskPrio, uart_recvTaskQueue, uart_recvTaskQueueLen); //demo with a task to process the uart data UartDev.baut_rate = uart0_br;uart_config(UART0);UartDev.baut_rate = uart1_br;uart_config(UART1);ETS_UART_INTR_ENABLE(); //增加,接收使能中斷 #if UART_BUFF_ENpTxBuffer = Uart_Buf_Init(UART_TX_BUFFER_SIZE);pRxBuffer = Uart_Buf_Init(UART_RX_BUFFER_SIZE);#endif/*option 1: use default print, output from uart0 , will wait some time if fifo is full *///do nothing.../*option 2: output from uart1,uart1 output will not wait , just for output debug info *//*os_printf output uart data via uart1(GPIO2)*///取消注釋,使用uart1作為系統(tǒng)輸出os_install_putc1((void *)uart1_write_char); //use this one to output debug information via uart1 ///*option 3: output from uart0 will skip current byte if fifo is full now... *//*see uart0_write_char_no_wait:you can output via a buffer or output directly *//*os_printf output uart data via uart0 or uart buffer*///os_install_putc1((void *)uart0_write_char_no_wait); //use this to print via uart0 #if UART_SELFTEST&UART_BUFF_ENos_timer_disarm(&buff_timer_t);os_timer_setfn(&buff_timer_t, uart_test_rx , NULL); //a demo to process the data in uart rx bufferos_timer_arm(&buff_timer_t,10,1);#endif}
?來(lái)自CODE的代碼片 uart_init

2、然后我們需要定義一下中斷服務(wù)函數(shù)uart0_rx_intr_handler(void *para),同樣是在uart.c中,官網(wǎng)給出的SDK是要我們創(chuàng)建一個(gè)接受任務(wù)來(lái)處理

然而我們這里并沒(méi)有使用系統(tǒng)……

所以我決定把里面原有的內(nèi)容全刪了,自己寫!

幾個(gè)步驟:

1)關(guān)中斷

2)清標(biāo)志位

3)處理buf

4)重新打開(kāi)中斷

1234567891011121314151617181920212223242526 LOCAL voiduart0_rx_intr_handler(void *para){int fifo_len; //1uart_rx_intr_disable(UART0);//關(guān)閉中斷 //2WRITE_PERI_REG(UART_INT_CLR(UART0), UART_RXFIFO_FULL_INT_CLR);CLEAR_PERI_REG_MASK(UART_INT_ENA(UART0),UART_TXFIFO_EMPTY_INT_ENA); //3fifo_len=(READ_PERI_REG(UART_STATUS(UART0))>>UART_RXFIFO_CNT_S)&UART_RXFIFO_CNT; //獲取buf長(zhǎng)度uint8 d_tmp=0;uint8 idx=0;for(idx=0;idx<fifo_len;idx++) //原樣輸出{d_tmp=READ_PERI_REG(UART_FIFO(UART0)) &0xFF;uart_tx_one_char(UART0,d_tmp);} //4WRITE_PERI_REG(UART_INT_CLR(UART0),UART_RXFIFO_FULL_INT_CLR | UART_RXFIFO_TOUT_INT_CLR);uart_rx_intr_enable(UART0);}
?來(lái)自CODE的代碼片 uart0_rx_intr_handler

3、最后好像就沒(méi)有什么了,user_init就是要調(diào)用uart_init就可以了

等我高級(jí)了我把整個(gè)工程傳上來(lái)2333333


參考:

http://blog.csdn.net/chen244798611/article/details/51470630

ESP8266 SDK 編程手冊(cè).pdf

ESP8266__Interface_UART__CN_v0.2.pdf

總結(jié)

以上是生活随笔為你收集整理的【ESP8266】NONOS SDK开发,串口发送、接收与中断的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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