CODE_LINUX_APP_RS422

主要用途:该模块实现了应用层对于UART通信功能的封装,能够实现UART初始化、发送数据、接收数据以及关闭设备等功能。

能力分类:嵌入式

应用领域:安防监控,电源电池,机器人,无人机,射频通信

交易方式: 定制

参考价格:50000.00 小贴士:当前佣金是0%

好评率:100%| 综合评分:5.0| 已购买:0次
联系我 收藏店铺
分享: 

 模块描述

1.1  原理及方式

定义一个struct RS422的结构来存储传入的参数设备文件描述符、以及收发数据缓存等信息,采用标准文件IO操作UART底层驱动实现数据收发。

1.2  主要功能

该模块实现了应用层对于UART通信功能的封装,能够实现UART初始化、发送数据、接收数据以及关闭设备等功能。

 标准模块

 模块设计

结构体设计

1. Struct RS422,存储传入的UART相关参数UART设备文件描述符、以及收发数据缓存等信息

typedef  struct RS422{

    dll_t   node;

    devClass    class;

    char name[32];

    int32 fd;

uint8  parity;  //奇偶校验模式

uint32  uiBaudRate;

char * buff;

int32  buffMaxLen;

int32  buffRealLen;//buffRealLen<=buffMaxLen

}objRs422;

 

2. 定义串口可选的波特率数值和内部枚举值的映射数组

LOCAL int speed_arr[] = { B2000000, B1500000, B921600, B115200, B57600,   B38400,  B19200, B9600, B4800, B2400, B1200, B300,B2000000, B1500000, B921600, B115200, B57600, B38400, B19200, B9600, B4800, B2400, B1200, B300, };

LOCAL int name_arr[] = {2000000, 1500000, 921600, 115200, 57600,  38400,  19200,  9600,  4800,  2400,  1200,  300,2000000, 1500000, 921600, 115200,  57600,   38400,  19200,  9600, 4800, 2400, 1200,  300, };

 

 

主要函数说明

RS422初始化函数

函数原型

objRs422 *   rs422_init( char *name, uint8 parity, uint32 uiBaudRate ,int32  buffLen)

功能描述

初始化RS422

输入参数

char *name设备文件名称

uint8 parity奇偶位;

uint32 uiBaudRate波特率;

int32  buffLen数据缓冲区大小

输出参数

全局变量值的变化

返回值

NULL-失败;

objRs422 *-成功。

 

读取rs422数据函数

函数原型

STATUS rs422_get(objRs422 *  obj)

功能描述

读取rs422数据到缓冲区

输入参数

objRs422 *  obj rs422对象指针

输出参数

全局变量值的变化

返回值

OK-成功

ERROR-失败

 

 

入数据到rs422函数

函数原型

STATUS rs422_put(objRs422 *  obj)

功能描述

写入数据到rs422

输入参数

objRs422 *  obj rs422对象指针

输出参数

全局变量值的变化

返回值

OK-成功

ERROR-失败

 

关闭rs422函数

函数原型

STATUS rs422_close(objRs422 *  obj)

功能描述

关闭rs422设备

输入参数

objRs422 *  obj rs422对象指针

输出参数

全局变量值的变化

返回值

OK-成功

ERROR-失败

类定义

应用举例

使用API实现一个串口收发的小程序

int rs422test(int argc, char **argv)

{

 STATUS  ret  =  OK;

 int i = 0;

 char *sendbuff;

char *recvbuff;

uint32 count = 0;

 int error = 0;

     int baudrate = 115200;

 int result = PASS;

     objRs422 * pRs422 = NULL;

 

pRs422 = rs422_init(“/dev/ttyPS1”,'n', baudrate,1024);

if(NULL == pRs422)

{

ret |= ERR_INIT_RS422;

OUT_MSG("init rs422 error\n");

result= FAIL;

goto QUIT;

}

OUT_MSG("test RS422 start\n");

for(i = 0; i < count;++i)

{

          strcpy(pRs422->buff,sendbuff);

          pRs422->buffRealLen=strlen(sendbuff);

          if (OK !=  rs422_put(pRs422))

          {

               OUT_MSG("send data to rs422 failed.\r\n");

          }

          if (OK !=  rs422_get(pRs422))

          {

              OUT_MSG("receive  data from rs422 failed.\r\n");

          }else{

            pRs422->buff[pRs422->buffRealLen]='\0';

            OUT_MSG("recv %d:%s\n", i, pRs422->buff);

            if( !check(recvbuff, pRs422->buff, strlen(recvbuff)))

            {

               result = FAIL;

             }

           }

}

QUIT:

if(PASS == result)     OUT_MSG("test RS422 PASS\n");

else   OUT_MSG("test RS422 FAIL\n");

/* Return happy */

return 0;

}

 

 

其他


总体评价

好评率:100%

好评数量:0

总体评分

工作速度:5分

工作质量:5分

工作态度:5分

暂无评价

企业其他能力

More>