ESP8266学习一

ESP8266学习一

参考他人博客esp8266

串口引脚得介绍

esp8266拥有俩个串口  串口0具有RX和TX功能 而串口1只有TX

在这里插入图片描述

串口初始化

//void uart_init(UartBautRate uart0_br, UartBautRate uart1_br);
void uart_init(9600, 115200);//第一个使串口0得波特率为9600 第二个参数时串口一得波特率为115200

串口打印数据

串口0打印数据 os_printf默认时串口一

void ICACHE_FLASH_ATTR
user_init(void)
{
	uart_init(9600,115200);
	os_printf("\r\n---------------------------------\r\n");

	os_printf("SDK version:%s\n",system_get_sdk_version());		// 串口打印SDK版本

	uart0_sendStr("\r\nHello World\r\n");   //串口0打印数据

	os_printf("\r\n---------------------------------\r\n");
}

使os_printf默认变为串口1

void ICACHE_FLASH_ATTR
user_init(void)
{
	uart_init(9600,115200);
	UART_SetPrintPort(UART1);         //设置串口一打印 也将系统函数os_print定义到串口一
	os_printf("\r\n---------------------------------\r\n");
	os_printf("SDK version:%s\n",system_get_sdk_version());		// 串口打印SDK版本
	os_printf("\r\n---------------------------------\r\n");
	uart1_sendStr_no_wait("hello world")
}

串口接受数据

由于串口一得RX引脚被占用 不能用来接受数据
只能时用串口0来接受和发送数据
串口接受较为简单速度慢得文件
须要改动得文件uart.c

/******************************************
 * 这是串口中断接受到数据需要处理得过程
 * ReceData 是接受到得数据
 * len 是串口接受到数据得长度
 *****************************************/
void Perform(char *ReceData,int len)
{
	uart0_sendStr(ReceData);
}

/*
 * 串口接受中断
 */
LOCAL void ICACHE_FLASH_ATTR
uart_recvTask(os_event_t *events)
{
    if(events->sig == 0){

        uint8 fifo_len = (READ_PERI_REG(UART_STATUS(UART0))>>UART_RXFIFO_CNT_S)&UART_RXFIFO_CNT;
        uint8 d_tmp = 0;
        uint8 idx=0;
        uint8  Uart_ReceData[256]={"0"};   //定义串口接受得数据
        for(idx=0;idx<fifo_len;idx++) {
            d_tmp = READ_PERI_REG(UART_FIFO(UART0)) & 0xFF;
            Uart_ReceData[idx] = d_tmp;
        }
        //做你自己的事情,recieveData[]数组就是接收到单片机的数据
        Perform(Uart_ReceData,fifo_len);
        // 清除中断寄存器的 满中断位 或 超时中断位
        WRITE_PERI_REG(UART_INT_CLR(UART0), UART_RXFIFO_FULL_INT_CLR|UART_RXFIFO_TOUT_INT_CLR);
        // 5.UART0接收中断使能
        uart_rx_intr_enable(UART0);
    }
}

main.c

void ICACHE_FLASH_ATTR
user_init(void)
{
	uart_init(9600,115200);
	os_printf("------------------------------------\r\n");
	uart0_sendStr("串口开始打印\r\n");
	uart0_sendStr("------------------------------------\r\n");
}

上面得方法把接受到得数据定位了局部变量 有利于不要每次发数据都要初始化数组 我这里强制定义了数组得长度为256 但是可以写为fifo_len 一下把所有数据接受完成

uint8 fifo_len = (READ_PERI_REG(UART_STATUS(UART0))>>UART_RXFIFO_CNT_S)&UART_RXFIFO_CNT;
        uint8 d_tmp = 0;
        uint8 idx=0;
        uint8  Uart_ReceData[fifo_len]={"0"};   //定义串口接受得数据

如果需要接受快速且分段得函数 建议使用队列和栈来接受数据 定义全局变量

程序下载

详情请看安信可下载程序步骤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值