Chinaunix首页 | 论坛 | 博客
  • 博客访问: 290144
  • 博文数量: 61
  • 博客积分: 1581
  • 博客等级: 上尉
  • 技术积分: 741
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-24 13:52
个人简介

幸运儿不是我,因为我选择的路很难走.如果够出色也不能出头,至少要做到没第二个我.

文章分类

全部博文(61)

文章存档

2013年(14)

2012年(47)

分类: LINUX

2013-05-11 16:20:16

UART的操作是嵌入系统中最常用的通信方式,现在网上有很多朋友提出了许多思路,在一定的应用环境中能够收到良好的效果。本人在下面的介绍中提出一种在RTOS中使用最方便的UART Driver思想,希望大家讨论并批评。

1、接口规范

1.1 设备打开

bool UART_open( int port, int baudrate, int databit, char checkbit, int stopbit, int timeout)

输入:

    port串口号0~n

    baudrate波特率110,300,600,1200,2400,...,115200bps

    databit数据位数目5~8

    checkbit校验位'e','o','n'

    stopbit停止位0(1),1(1.5),2(2)

    timeout超时时间

返回:

    true if 成功打开此串口

    false if 打开串口失败

功能描述:

   用指定的属性(串口速率、奇偶校验等)打开串口。

    如果此串口空闲并且属性合理则本函数立即返回true;如果串口属性不合理则返回false;如果属性合理但是串口已经被其他进程(线程)使用,并且在 timeout时间以内串口仍然没有被释放则返回false;如果串口已经被使用,但是在timeout时间之内被释放,则返回true

    如果timeout=0,则永久等待,直到串口被释放。

 

1.2 串口关闭

bool UART_close(int port)

输入:

    port串口号0~n

返回:

    true if 成功关闭

    false if 关闭失败

功能描述:

   关闭(释放)串口port。

   如果此串口未被打开,返回false;如果此串口已经打开,则关闭之,返回true

 

 1.3 从串口接收数据

int UART_read(int port, char *buffer, int buffersize, int timeout)

输入:

    port串口号0~n

    buffer接收数据缓冲区

    buffersize接收缓冲区大小

    timneout接收超时时间

返回:

   <0出错

   =0没有收到数据

   >0收到数据的个数

功能描述:

    从串口上接收数据放在缓冲区buffer里,收到的字节数目就是本函数的返回值。

    如果串口没有被打开,或者buffer为空指针,或者buffersize为0,则返回<0;

    如果串口已经有收到数据,将收到的数据填入buffer,并立即返回填入buffer的数据个数(字节计),但是最多填入buffersize个。

    如果串口还没有收到数据,则等待接收数据,但最多等待timeout时间,如果仍然没有收到数据,则返回0;在等待的过程中如果来了数据,则接收他们直到这一包数据结束或者数据个数达到了buffersize,然后返回接收到的数据个数。

    参数buffersize的作用是避免在填入buffer时发生溢出。

 

1.4 向串口发送数据

bool UART_write(int port, const char *buffer, int wlen)

输入:

    port串口号0~n

    buffer发送数据缓冲区

    wlen发送的数据个数

返回:

    true if 发送成功

    false if 发送失败

功能描述:

    向串口发送数据。

    如果此串口未打开,或者buffer为空,或者wlen=0,立即返回false;

    否则将buffer[0~wlen-1]发送到串口上,发送完成以后返回true。

 

1.5 清除接收缓冲区

bool UART_flush(int port)

输入:

    port串口号0~n

返回:

    true if 成功

    false if 失败

功能描述:

     清除串口此前收到的数据。

     如果port未打开,返回false;否则清除此串口已经收到的数据,并返回true。

阅读(1627) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~