ESP8266 SDK开发: 外设篇-串口

 

 

 

串口分布

  

 

 

串口内部自带一个FIFO缓存,数据接收以后先缓存到内部FIFO缓存里面

内部FIFO满了以后进入FIFO满中断

串口打开了串口超时(空闲)中断:超过两个字节的时间没有接受到数据,进入串口超时(空闲)中断

 

 

 

NONOS(先看串口接收)

1.初始化串口是使用下面的函数

 

 

 

里面只写了设置波特率,如果需要设置其它参数可以参考代码的最下面

 

 

 

 

 

2.默认是使用串口0输出日志

咱先不用修改,咱先把串口基本操作学完

 

 

 

3.提供的串口中断接收里面是使用任务通知的形式(关于任务通知参见上一节系统任务(消息队列,通知))

 

 

 

 

 

在内部FIFO接收到数据的时候发送任务消息出去

 

 

 

在任务中读取数据(读取数据默认提供的是存储到数组缓存里面)

 

 

 

 

 

4.咱们获取数据呢是使用下面的函数

函数返回值是获取的数据个数;形参1是咱要把数据拷贝到的数组地址;形参2是咱想获取的数据个数

 

 

 

5.官方还贴心的给了例子

定时器每隔10ms轮训,每次尝试获取128字节数据,获取到数据之后,直接返回接收的数据

 

 

 

 

 

 

 

6.咱们就直接拷贝到主函数试一试

 

 

 

 

 

 

7.串口接收缓存默认是256字节,如果数据的每一帧的数据量大于这个值,就需要增加

 

 

 

8.再提醒下哈,下面只是尝试获取128字节,假设缓存里面有10个数据,那么也只会返回10个.

假设缓存里面有500个,那么会返回128个.

一般这个值取最大可能返回的数据个数.

 

 

9.注意:一般是接收到一条完整的数据之后再去处理数据,但是特殊场合需要快速的通信,如果每条数据的时间间隔小于10ms,

那么便会出现粘包.可以使用任务把轮训间隔缩小到1ms;

首先把串口的任务优先级改为最高

 

 

 

然后在主函数加一个优先级别低的任务

 

 

/************任务*************/
#define os_event_t_buff_len 255 /*消息队列长度;最大255*/
os_event_t    os_event_t_buff[os_event_t_buff_len]; //存储消息的数组
#define TaskPrio 0 //任务等级(0,1,2(最高))
uint32 os_task_t_delay=0;//在任务里面做延时
/************串口接收缓存**************/
uint8 uart_buf[UART_RX_BUFFER_SIZE]={0};
uint16 len = 0;
void os_task_t_callback(os_event_t *events){
    if(events->sig == 0 && events->par ==0){
        system_os_post(TaskPrio, 0, 0);
    }
    os_task_t_delay++;
    if(os_task_t_delay>300){//大约1ms
        os_task_t_delay=0;
        len = rx_buff_deq(uart_buf, 128 );//尝试从缓存中获取128字节串口数据
        tx_buff_enq(uart_buf,len);//把接收的数据返回
    }
}
system_os_task(os_task_t_callback, TaskPrio, os_event_t_buff, os_event_t_buff_len);
    system_os_post(TaskPrio, 0, 0);

 

 

 

 

当然一般串口10ms已经适应了基本上所有的项目了

 

 

 

10.如果想把数据直接存储到自己定义数组里面

把UART_BUFF_EN改为0

 

 

 

 

 

NONOS(串口发送数据)

默认的发送是使用的缓存+中断发送

建议用户直接使用这种方式.因为发送数据的时候不会阻塞.

 

 

 

 

 

 

 

 

 

 

 

 

关于 os_printf

os_printf函数一般是做日志打印的,默认是使用串口0打印;可以配置到串口1上(gpio2口上)

 

 

 

os_printf函数可以使用下面的函数关闭或者开启打印

 

 

system_set_os_print (0);//0:关闭打印  1:开启打印

 

posted on 2020-02-27 23:55  杨奉武  阅读(1825)  评论(0编辑  收藏  举报

导航

淘宝 QQ群