esp8266-SDK的串列埠傳送和中斷接收
其實用esp8266編寫串列埠程式非常簡單,因為它都給我們寫好了,只要呼叫 uart_init(115200,115200);這個函式就可以。
1、傳送
呼叫uart_init(115200,115200);初始化串列埠,波特率設定為115200.前面一個是設定uart0的波特率、後面一個是設定、uart的波特率
然後就可以使用uart0_tx_buffer(uint8 *buf, uint16 len)從uart0傳送資料,同時也可以使用os_printf()函式來發送資料,不過需要注意如果是使用串列埠1
想要使用os_printf()需要修改
os_printf本介面預設從 UART 0 列印。IOT_Demo 中的 uart_init 可以設定波特率,其中
os_install_putc1((void *)uart1_write_char) 將 os_printf 改為從 UART 1 列印
2、接收
進入串列埠初始化函式uart_init,可以看到如下函式
system_os_task(uart_recvTask, uart_recvTaskPrio, uart_recvTaskQueue, uart_recvTaskQueueLen);
這個函式是建立一個任務,就是用如處理串列埠0的接收資料的,
uart_config(UART0);
這就是配置串列埠暫存器,在這個裡面有設定了串列埠的回撥函式
ETS_UART_INTR_ATTACH(uart0_rx_intr_handler, &(UartDev.rcv_buff));
利用 ETS_UART_INTR_ATTACH設定了串列埠的回撥函式uart0_rx_intr_handler
在uart0_rx_intr_handler裡面有各種中斷的標誌判斷,正常的情況會進入UART_RXFIFO_TOUT_INT_ST,也就是,停⽌止傳輸的時間超過所設定的⻔門
限值,然後呼叫system_os_post傳送訊息給在初始化函式uart_init建立的任務uart_recvTask,,然後大家看看uart_recvTask(os_event_t *events)
LOCAL void ICACHE_FLASH_ATTR ///////
uart_recvTask(os_event_t *events)
{
if(events->sig == 0){
#if UART_BUFF_EN
Uart_rx_buff_enq();
#else
uint8 fifo_len = (READ_PERI_REG(UART_STATUS(UART0))>>UART_RXFIFO_CNT_S)&UART_RXFIFO_CNT;
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);
}
WRITE_PERI_REG(UART_INT_CLR(UART0), UART_RXFIFO_FULL_INT_CLR|UART_RXFIFO_TOUT_INT_CLR);
uart_rx_intr_enable(UART0);
#endif
}else if(events->sig == 1){
#if UART_BUFF_EN
//already move uart buffer output to uart empty interrupt
//tx_start_uart_buffer(UART0);
#else
#endif
}
}
在這個裡面就是把接收到的資料通過 uart_tx_one_char(UART0, d_tmp);一個個的傳送出來,如果我們想處理
自己接收的資料,只要把它放到緩衝區就處理就可以。
相關推薦
esp8266-SDK的串列埠傳送和中斷接收
其實用esp8266編寫串列埠程式非常簡單,因為它都給我們寫好了,只要呼叫 uart_init(115200,115200);這個函式就可以。 1、傳送 呼叫uart_init(115200,115200);初始化串列埠,波特率設定為115200.前面一個是設定uart0
linux多執行緒下開啟串列埠傳送和接收資料
1 啟動執行緒1讀串列埠 2 等待3秒後 3 啟動執行緒2寫串列埠,傳送字串後關閉 4 等待10秒 5 關閉兩個執行緒 #include <pthread.h> #include <stdio.h> #include <sys/time.h> #include &
PIC24串列埠傳送和接收程式
做智慧家居時,下位機用的時PIC24FJ64GA004,所以寫了下面那個程式。 由於對PIC24的不熟悉,忘了加配置們,導致波特率一直不對,後面加上配置位就行了。 接收的資料按一定格式,用來控制繼電器。 傳送的資料暫時沒用到。啟用傳送只要使能中斷就行。 1
gsm模組 POST協議 串列埠傳送和接收(sim900a)
串列埠發:AT+CIPSTART="TCP","211.xxx.xxx.xxx",80 串列埠收:OK CONNECT OK 串列埠發:AT+CIPSEND=533 (下面串列埠傳送資料的長度) 串列埠收
微控制器串列埠傳送和接受程式
include "config.h" /******************************串列埠1的波特率********************************/ //T1作波特率發生器 //在波特率加倍情況下 #define BAUD_57600 2
【ESP8266】NONOS SDK開發,串列埠傳送、接收與中斷
ESP8266感覺要成現在物聯網的黑馬了,整合WiFi功能、能程式設計,還便宜,確實挺6的。 就是能提供的資料太少,感覺官網上的遠遠不夠用,這個串列埠收發與中斷折騰了我是在太久,在這裡小的就分享一下自己的經驗。 大家都問我要工程,我終於可以上傳啦: http://d
STM32串列埠傳送資料和接收資料方式總結
之前寫了篇關於ESP8266使用AT指令進行互相通訊的實驗,在寫STM32串列埠接發資料的程式中,覺得有必要將之前學的有關於串列埠方面的使用經歷加以總結。 串列埠傳送資料: 1. 串列埠傳送資料最直接的方式就是標準呼叫庫函式 。 void
STM32開發小結--使用STM32F4串列埠的空閒中斷模式+DMA接收不定長資料幀
開發平臺:Keil 5 庫函式版本:V3.5 晶片:STM32F407VET6 1 STM32的串列埠接收資料的方式 STM32的串列埠接收資料有三種方式可以選擇: 1.1 輪詢接收 在主迴圈中一直判斷串列埠接收完成標誌位是否置位,如果置位則讀取收到的資料。該種模式
串列埠傳送字串和十六進位制原始碼
/** * @brief USART GPIO 配置,工作引數配置 * @param 無 * @retval 無 */ void USART_Config(void) { GPIO_InitTypeDef GPIO_InitStructure;
FPGA實驗——串列埠傳送/接收學習筆記
1. 基礎知識 1.1 波特率的概念 波特率(Baud rate),指的是訊號被調製以後在單位時間內的變化,即單位時間內載波引數變化的次數,如每秒鐘傳送240個字元,而每個字元格式包含10位(1個起始位,1個停止位,8個數據位),這時的波特率為2
串列埠傳送資料查詢方式與中斷方式
微控制器採用中斷或查詢方式使用串列埠,這是根據實際應用的需要確定的,沒有好/壞之分。有時之所以採用查詢方式處理串列埠程式,是因為應用程式不苛刻微控制器的時間資源,採用查詢的方式就能滿足應用的需要,所以沒采用中斷。大量連續的向串列埠傳送資料,就沒有必要使用中斷了,因為微控制器根
MT7621原廠openwrt SDK使能串列埠2和串列埠3
MT7621有三個串列埠,專案需要將三個串列埠都使能; 首先按照openwrt的方法修改DTS檔案來使能串列埠2和串列埠3是不行的,經試驗,還是要按照MTK傳統的方法,修改核心原始碼來解決;不同SDK版本可能不一定相同,因此僅供參考。 一)首先修改gpio m
CreateFile系類非同步、並行(同一個串列埠傳送接收)
在Windows系統下,串列埠資料收發CreateFile系類方法對於我來說是最好用的方法,採用非同步機制保證了串列埠讀或寫入不會使程式碼停在串列埠函式內(停在串列埠函式內原因可能是串列埠線的原因,或者串列埠沒開啟(這個是猜測)),並且可以達到同一個串列埠既傳送
keil編譯的程式 “漢字顯示不全、串列埠傳送漢字接收後亂碼缺失”問題
今天知道一個keil的bug,就是當漢字的機內碼包含0xfd時,keil就會自動丟棄fd,mark一下。 解決方法: 1、遇到帶有fd的漢字採用機內碼替代, 2.給keil打補丁。具體過程可百度
AliOS-Things--ESP8266-linkkitapp-串列埠(二)
/* * Copyright (C) 2015-2017 Alibaba Group Holding Limited * * * this is a uart sample from hal uart for esp8266, and the same as other
RTOS_TINY中實現串列埠傳送字串控制LED
題目內容 在RTOS_TINY作業系統下實現以下目標: 有四個LED,使用AT89S52的4個引腳驅動它們分別以5Hz,8Hz,20Hz,32Hz的頻率閃爍。設使用12MHz的晶振。用串列埠助手,通過傳送 “TURN on 1”,使得LED1持續閃爍,並回顯“LED1 on”;傳送
ALIENTEK 的 ESP8266 WiFi Module 刷入韌體後出現don’t use rtc mem data錯誤或者ESP8266開啟串列埠不停出現亂碼的解決方案
ESP8266 WiFi Module 刷入韌體後出現don’t use rtc mem data 出現問題: 重新整理新的韌體後,出現錯誤提示:don’t use rtc mem data 或各種讀寫地址錯誤。 1、A fatal error occurred
windows下C語言版串列埠傳送程式(基於VS2017)
#include "pch.h" #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <windows.h> #include <string.h> #include <conio.h&
RS232串列埠的直連串列埠線和交叉串列埠線的區別
串列埠線也分直通和交叉,直通一般用於延長PC與裝置,將2、3、5分別連線2、3、5,因為PC上一般為公頭,而裝置上多為母頭,所以正好它們是通用的,既可用於延長也可用於連線;交叉一般用於PC與PC對接,將2對3、3對2、5對5,一般兩頭都是母頭! 計算機
STM32串列埠之空閒中斷
背景 在做Nbiot的一個路燈專案,NBiot模組一般都是串列埠介面,使用AT指令集,對接中國移動onenet平臺。先用串列埠助手去測試,流程測試OK之後需要在MCU上重新寫一遍。一開始用的STC15系列的MCU,然後跟平臺之間對接協議很多,程式碼量較大,所以換到了STM32F1系列