ESP8266--学习笔记(七)UART转发
来源:互联网 发布:linux grub 引导 过程 编辑:程序博客网 时间:2024/05/06 11:21
因为需要使用串口发送数据,而又决定自己写固件,所以就需要完成一项功能:
- ESP接收串口传来的数据,并判断
- 将接收的串口数据转发出去
ESP8266给串口发送数据很容易
uart_sendString("串口发送数据");usrt0_sendStr("\r\n Hello World\r\n");os_printf("发送数据成功!!\r\n");
这些语句都可以使用串口发送数据,但是串口接收数据就不容易了。
有时候,需要ESP8266接收数据并作出判断。于是就搞出来这个程序了。
————————————————————
user_main.c
#include "ets_sys.h"#include "osapi.h"#include "user_interface.h"#include "driver/uart.h"#include "driver/pwm.h"void delay_ms(uint16 x){ for(;x>0;x--) { os_delay_us(1000); }}void user_init(void){ uart_init(BIT_RATE_115200,BIT_RATE_115200); uart_sendString("串口发送程序"); //接收程序在uart.c uart0_rx_intr_handler(void *para)函数里面}
uart.c
#include "ets_sys.h"#include "osapi.h"#include "driver/uart.h"#define UART0 0#define UART1 1// UartDev is defined and initialized in rom code.extern UartDevice UartDev;LOCAL void uart0_rx_intr_handler(void *para);//串口接收数据中断函数LOCAL void ICACHE_FLASH_ATTRuart_config(uint8 uart_no){ if (uart_no == UART1) { PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_U1TXD_BK); } else { /* rcv_buff size if 0x100 */ ETS_UART_INTR_ATTACH(uart0_rx_intr_handler, &(UartDev.rcv_buff)); PIN_PULLUP_DIS(PERIPHS_IO_MUX_U0TXD_U); PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_U0TXD); } uart_div_modify(uart_no, UART_CLK_FREQ / (UartDev.baut_rate)); WRITE_PERI_REG(UART_CONF0(uart_no), UartDev.exist_parity | UartDev.parity | (UartDev.stop_bits << UART_STOP_BIT_NUM_S) | (UartDev.data_bits << UART_BIT_NUM_S)); //clear rx and tx fifo,not ready SET_PERI_REG_MASK(UART_CONF0(uart_no), UART_RXFIFO_RST | UART_TXFIFO_RST); CLEAR_PERI_REG_MASK(UART_CONF0(uart_no), UART_RXFIFO_RST | UART_TXFIFO_RST); //set rx fifo trigger WRITE_PERI_REG(UART_CONF1(uart_no), (UartDev.rcv_buff.TrigLvl & UART_RXFIFO_FULL_THRHD) << UART_RXFIFO_FULL_THRHD_S); //clear all interrupt WRITE_PERI_REG(UART_INT_CLR(uart_no), 0xffff); //enable rx_interrupt SET_PERI_REG_MASK(UART_INT_ENA(uart_no), UART_RXFIFO_FULL_INT_ENA);}/*************//*发送一个字符*//*************/LOCAL STATUS ICACHE_FLASH_ATTRuart1_tx_one_char(uint8 TxChar){ while (true) { uint32 fifo_cnt = READ_PERI_REG(UART_STATUS(UART1)) & (UART_TXFIFO_CNT<<UART_TXFIFO_CNT_S); if ((fifo_cnt >> UART_TXFIFO_CNT_S & UART_TXFIFO_CNT) < 126) { break; } } WRITE_PERI_REG(UART_FIFO(UART1) , TxChar); return OK;}LOCAL void ICACHE_FLASH_ATTRuart1_write_char(char c){ if (c == '\n') { uart1_tx_one_char('\r'); uart1_tx_one_char('\n'); } else if (c == '\r') { } else { uart1_tx_one_char(c); }}/*************************//**串口接收数据中断处理函数**//************************/LOCAL voiduart0_rx_intr_handler(void *para){ /* uart0 and uart1 intr combine togther, when interrupt occur, see reg 0x3ff20020, bit2, bit0 represents * uart1 and uart0 respectively */ RcvMsgBuff *pRxBuff = (RcvMsgBuff *)para; uint8 RcvChar; if (UART_RXFIFO_FULL_INT_ST != (READ_PERI_REG(UART_INT_ST(UART0)) & UART_RXFIFO_FULL_INT_ST)) { return; } WRITE_PERI_REG(UART_INT_CLR(UART0), UART_RXFIFO_FULL_INT_CLR); while (READ_PERI_REG(UART_STATUS(UART0)) & (UART_RXFIFO_CNT << UART_RXFIFO_CNT_S)) { RcvChar = READ_PERI_REG(UART_FIFO(UART0)) & 0xFF; uart_tx_one_char(RcvChar); // uart0_tx_buffer(RcvChar,1); if (pRxBuff->pWritePos == (pRxBuff->pRcvMsgBuff + RX_BUFF_SIZE)) { // overflow ...we may need more error handle here. pRxBuff->pWritePos = pRxBuff->pRcvMsgBuff ; } }}void ICACHE_FLASH_ATTRuart0_tx_buffer(uint8 *buf, uint16 len){ uint16 i; for (i = 0; i < len; i++) { uart_tx_one_char(buf[i]); }}/*********************************//****串口初始化函数****//*********************************/void ICACHE_FLASH_ATTRuart_init(UartBautRate uart0_br, UartBautRate uart1_br){ // rom use 74880 baut_rate, here reinitialize UartDev.baut_rate = uart0_br; uart_config(UART0); UartDev.baut_rate = uart1_br; uart_config(UART1); ETS_UART_INTR_ENABLE(); // install uart1 putc callback os_install_putc1((void *)uart1_write_char);}void ICACHE_FLASH_ATTRuart_sendString(uint8 *st){ uint8 x; for(x=0;x<os_strlen(st);x++) { uart_tx_one_char(st[x]); }}
1 0
- ESP8266--学习笔记(七)UART转发
- ESP8266 UART学习
- ESP8266学习笔记(一)
- ESP8266--学习笔记(零)学习ESP8266常用软件
- STM32学习笔记:ESP8266模块(1)
- ESP8266--学习笔记(转载资料一)
- ESP8266--学习笔记(六)Http请求
- ESP8266--学习笔记(十一)任务
- ESP8266学习笔记——(1)
- ESP8266 学习笔记
- nodeMCU学习笔记--ESP8266
- ESP8266学习笔记4:ESP8266的SmartConfig
- ESP8266学习笔记5:ESP8266接入yeelink
- ESP8266学习笔记4:ESP8266的SmartConfig
- ESP8266学习笔记5:ESP8266接入yeelink
- ESP8266学习笔记5:ESP8266接入yeelink
- ESP8266学习笔记4:ESP8266的SmartConfig
- ESP8266学习笔记5:ESP8266接入yeelink
- L1-002. 打印沙漏
- java swing入门 计算器布局
- 编译及调试OpenJDK 8
- 人脸检测--LBPH-局部二进制编码直方图
- 进程阻塞wait和waitpid
- ESP8266--学习笔记(七)UART转发
- gmapping
- DSS源码分析之发送RTP包过程
- Eclipse web 项目报错:Unknown character set: 'utf8mb4'
- 高级冒泡排序-->用模板仿函数再次实现
- 《微言(官方版)》源码分享--极光推送iOS实践篇
- intellij 修改jsp 或者 html 自动加载页面变化
- 拦截器限制用户访问次数和验证用户登录代码
- 修复打开或关闭Windows功能框显示空白问题的方法