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"}; //定义串口接受得数据
如果需要接受快速且分段得函数 建议使用队列和栈来接受数据 定义全局变量
程序下载
详情请看安信可下载程序步骤