2617|0

3238

帖子

5

TA的资源

五彩晶圆(中级)

楼主
 

MTK7688 openwrt串口程序C编程 [复制链接]

                                                              MTK7688 openwrt串口程序C编程
           在上一篇中我主要通过命令测试了下MTK7688的串口1通信功能见(https://bbs.eeworld.com.cn/thread-619370-1-1.html)  ,后面花了一些时间去了解了下linux下的C编程,参加工作后有6年没用过Linux编程了, 大学学的东西基本也还给老师了,幸好我这人比较喜欢书,大学的书都拖到北京了,没卖掉,拿上大学的linux设备驱动开发编程书籍晚上睡前看下也比较快熟悉了,linux的核心思想就是一切皆文件,宝哥写的。其实linux如果是拿来做应用开发,不怎么去熟悉个中实现原理,还是能很快熟悉了,尤其是强大的网络组件,用上后,都不想回来在非linux环境下做开发了,傻瓜似编程,我们实现串口通信也主要是对ttyS1文件操作,代码如下,主要是实现了PC串口调试助手软件发送数据给MTK7688板子,板子再回传给PC串口调试助手软件。   


#include
#include
#include
#include
#include
#include
#include
static int open_uart(void)
{
    long vdisable;
    int fd;

    fd = open("/dev/ttyS1", O_RDWR|O_NOCTTY|O_NDELAY);//注意你的设备名
    if (-1 == fd)
    {
        perror("Can't Open Serial Port");
        return(-1);
    }

    return fd;
}

static int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)
{
    struct termios newtio, oldtio;

    if ( tcgetattr( fd,&oldtio) != 0)
    {
        printf("SetupSerial 1");
        return -1;
    }
    bzero( &newtio, sizeof( newtio ) );
    newtio.c_cflag |= CLOCAL | CREAD;
    newtio.c_cflag &= ~CSIZE;

    switch( nBits )
    {
    case 7:
        newtio.c_cflag |= CS7;
        break;
    case 8:
        newtio.c_cflag |= CS8;
        break;
    }

    switch( nEvent )
    {
    case 'O':
        newtio.c_cflag |= PARENB;
        newtio.c_cflag |= PARODD;
        newtio.c_iflag |= (INPCK | ISTRIP);
        break;
    case 'E':
        newtio.c_iflag |= (INPCK | ISTRIP);
        newtio.c_cflag |= PARENB;
        newtio.c_cflag &= ~PARODD;
        break;
    case 'N':
        newtio.c_cflag &= ~PARENB;
        break;
    }
    switch( nSpeed )
    {
    case 2400:
        cfsetispeed(&newtio, B2400);
        cfsetospeed(&newtio, B2400);
        break;
    case 4800:
        cfsetispeed(&newtio, B4800);
        cfsetospeed(&newtio, B4800);
        break;
    case 9600:
        cfsetispeed(&newtio, B9600);
        cfsetospeed(&newtio, B9600);
        break;
    case 115200:
        cfsetispeed(&newtio, B115200);
        cfsetospeed(&newtio, B115200);
        break;
    default:
        cfsetispeed(&newtio, B9600);
        cfsetospeed(&newtio, B9600);
        break;
    }
    if ( nStop == 1 )
    {
        newtio.c_cflag &= ~CSTOPB;
    }
    else if ( nStop == 2 )
    {
        newtio.c_cflag |= CSTOPB;
    }
    newtio.c_cc[VTIME] = 0;
    newtio.c_cc[VMIN]  = 0;
    tcflush(fd,TCIFLUSH);
    if ((tcsetattr(fd,TCSANOW,&newtio))!=0)
    {
        printf("com set error");
        return -1;
    }

    return 0;
}

int main(void)
{
int fd;
fd = open_uart();
char buffer[256]={0};
set_opt(fd,115200,8,'N',1);
while(1)
{
        memset(buffer,0,256);
        while (read(fd,buffer,sizeof(buffer)) == 0);
        write(fd,buffer,strlen(buffer));       

}
close(fd);

return 0;
}  


在gcc编译下,将生成的二进制文件通过SCP软件传到MTK7688板子上,运行运行如下:
         
                                


                        


此内容由EEWORLD论坛网友wateras1原创,如需转载或用于商业用途需征得作者同意并注明出处


serial

9.35 KB, 下载次数: 3

此帖出自RF/无线论坛
点赞 关注
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表