1 Balabala
我买了一个天猫精灵,感觉好可爱哦~
兴趣在物联网,好好学习,下次换工作的时候,就可以去物联网的公司,智能家居实在是太暖了,可以给人带来快乐,陪伴,让生活更容易。
2 上次…
上次主要是想看一下怎么下载程序,看看焊的板子能不能用,虽然用串口打印了“Hello World”但是完全没看过串口。
3 ESP8266的串口
ESP8266有两个串口,现在只是用串口0的打印信息功能,模块上电后会默认输出一些信息。
3.1 波特率
ESP8266-12F模组的晶振是26MHz,所以串口0的默认波特率是74880.
26MHz,波特率74880
40MHz,波特率115200
打印完默认信息之后的波特率就可以自己设置了,设置波特率找到2个函数。
//串口初始化,可以设置串口0和串口1的波特率
void uart_init(UartBautRate uart0_br, UartBautRate uart1_br);
//设置串口波特率
void UART_SetBaudrate(uint8 uart_no,uint32 baud_rate);
串口的两个头文件和一个源文件要添加到相应目录,“uart_register.h”、“uart.h”、“uart.c”;
打开uart.h,找到串口波特率范围在300~3686400。
3.2 打印函数
也有两个,可以用串口发送字符串,也可以用系统接口的串口打印os_printf,还是os_printf好用,可以格式化输出。
//串口发送字符
//void uart0_sendStr(const char *str);
uart0_sendStr("Hello World~~~");
//系统的printf
os_printf("Hello World~~~");
os_printf("system_sdk_version:%s",system_get_sdk_version());
os_printf 的头文件——#include “osapi.h”
system_get_sdk_version()的头文件——#include “user_interface.h”
5 代码、遇到的问题&解决
添加串口头文件的时候要加上drive目录,#include “driver/uart.h”,否则会报错,以前都是直接写头文件,没这样用过,不太明白。 更新两个链接:头文件路径包含问题、C++中当前路径、相对路径、绝对路径的表示方法及如何建立一个文件 其实想想是一直用的,在Keil的Options选项下的"C/C++",里面有个包含头文件的路径,只不过是编译器平时帮我做了这个工作。
#include "ets_sys.h"
#include "osapi.h" //os_xxx系列接口
#include "user_interface.h" //含system_xxx系列接口
#include "driver/uart.h"
uint32 ICACHE_FLASH_ATTR user_rf_cal_sector_set(void) //RF扇区设置初始化
{
//省略......
}
void ICACHE_FLASH_ATTR user_rf_pre_init(void) //RF初始化
{
//空
}
void ICACHE_FLASH_ATTR user_init(void) //用户初始化函数
{
uart_init(9600,9600); //串口0:9600;串口1:9600
os_printf("\r\nHello World~~~\r\n"); //串口0发送字符串
os_printf("\r\nsystem_sdk_version:%s\r\n",system_get_sdk_version());
}
下面我试了几个波特率,分别是9600,74880,115200。
在用9600的时候,"Hello World"前面的换行没有显示出来。
在用115200的时候,前面几个数据出错了,"Hello World"没有显示全。
在不改变波特率的情况下是最正常的,换行也显示出来了,既然波特率降低也不正常,那应该就不是由于波特率过高导致的数据错误,而是在切换波特率后波特率不稳定,刚传输的几个字符识别不出来,加延时解决。