串口通讯数据接收代码

先说一下串口通信,有兴趣的可以看看,了解的直接拉到下方看使用的方式。

串行通信的三种方式:单工/半双工全双工

串行通讯的基本概念:与外界的信息交换称为通讯.基本的通讯方式有并行通讯和串行通讯两种.
一条信息的各位数据被同时传送的通讯方式称为并行通讯.并行通讯的特点是:各数据位同时传送,传送速度快、效率高,但有多少数据位就需多少根数据线,因此传送成本高,且只适用于近距离(相距数米)的通讯.。
一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯.串行通讯的特点是:数据位传送,传按位顺序进行,最少只需一根传输线即可完成,成本低但送速度慢.串行通讯的距离可以从几米到几千米。
根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种.信息只能单向传送为单工;信息能双向传送但不能同时双向传送称为半双工;信息能够同时双向传送则称为全双工。
串行通讯又分为异步通讯和同步通讯两种方式.在单片机中,主要使用异步通讯方式.
全双工的串行通讯只需要一根输出线和一根输入线.数据的输出又称发送数据(TXD),数据的输入又称接收数据(RXD).串行通讯中主要有两个技术问题,一个是数据传送、另一个是数据转换.数据传送主要解决传送中的标准、格式及工作方式等问题.数据转换是指数据的串并行转换.具体说,在发送端,要把并行数据转换为串行数据;而在接收端,却要把接收到的串行数据转换为并行数据.
单工/半双工和全双工的定义:
如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工.
如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在,称为半双工传输.
如果在任意时刻,线路上存在A到B和B到A的双向信号传输,则称为全双工.


分享一个串口通讯接收数据的代码,可以接收数据并以十六进制的形式显示出来:
打开的设备为/dev/ttyUSB0,使用时需要修改权限:

sudo chmod 777 /dev/ttyUSB0

或者修改group的权限。
可以通过cutecom工具查看自己的数据接收对不对。
cutecom工具使用的方法

#include <stdio.h>
#include <unistd.h>                     //Used for UART
#include <fcntl.h>                      //Used for UART
#include <termios.h>                    //Used for UART

typedef unsigned char uint8;

void dump8(uint8 *buf, int len)
{
        for(int icnt = 0; icnt < len; icnt++)
        {
                printf("0x%x,",buf[icnt]);
        }

        printf("\n\t");
}


int main(void)
{
    int data_num = 0;

    printf("\nUART test\n\n");

    int uart0_filestream = -1;

    uart0_filestream = open("/dev/ttyUSB0", O_RDONLY | O_NOCTTY | O_NDELAY);                //Open in non blocking read/write mode
    if (uart0_filestream == -1)
    {
        printf("Error - Unable to open UART.  Ensure it is not in use by another application\n");
        return -1;
    }


    struct termios options;
    tcgetattr(uart0_filestream, &options);
    options.c_cflag = B921600 | CS8 | CLOCAL | CREAD;         //<Set baud rate
    options.c_iflag = IGNPAR;
    options.c_oflag = 0;
    options.c_lflag = 0;
    tcflush(uart0_filestream, TCIFLUSH);
    tcsetattr(uart0_filestream, TCSANOW, &options);

    printf("init complete, listening...\n\n");


    while(1)
    {

        if (uart0_filestream != -1)
        {
            unsigned char buf1[2];
            int n = read(uart0_filestream, buf1, 2);
            if ((n > 0) && (buf1[0] == 0xff) &&(buf1[1] == 0xff))
            {
                unsigned char buf2[2];
                dump8(buf1,2);
                n = read(uart0_filestream, buf2, 2);
                dump8(buf2,2);
                if (n > 0 && (buf2[0] == 0x40) &&(buf2[1] == 0x01))
                {

                    unsigned char buf3[640];

                    data_num = read(uart0_filestream, buf3, 640);

                    if(data_num > 0)
                    {

                        dump8(buf3,data_num);
                    }

                
                }
            }
        }
    }

}

代码在Ubuntu系统上运行的没有问题。

如果路过的朋友有对深度学习计算机视觉感兴趣的,或者想入门的可以支持一下图书**《深度学习计算机视觉实战》与《学习OpenCV 4:基于Python的算法实战》**,两本书都以通俗易懂的讲解、丰富的案例帮助初学者学习视觉与图像方向的知识。欢迎前往gzh“**计算机视觉与OpenCV”**获取更多的学习资料。

版权声明:本文为CSDN博主「计算机视觉与OpenCV」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lxiao428/article/details/122555154

先说一下串口通信,有兴趣的可以看看,了解的直接拉到下方看使用的方式。

串行通信的三种方式:单工/半双工全双工

串行通讯的基本概念:与外界的信息交换称为通讯.基本的通讯方式有并行通讯和串行通讯两种.
一条信息的各位数据被同时传送的通讯方式称为并行通讯.并行通讯的特点是:各数据位同时传送,传送速度快、效率高,但有多少数据位就需多少根数据线,因此传送成本高,且只适用于近距离(相距数米)的通讯.。
一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯.串行通讯的特点是:数据位传送,传按位顺序进行,最少只需一根传输线即可完成,成本低但送速度慢.串行通讯的距离可以从几米到几千米。
根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种.信息只能单向传送为单工;信息能双向传送但不能同时双向传送称为半双工;信息能够同时双向传送则称为全双工。
串行通讯又分为异步通讯和同步通讯两种方式.在单片机中,主要使用异步通讯方式.
全双工的串行通讯只需要一根输出线和一根输入线.数据的输出又称发送数据(TXD),数据的输入又称接收数据(RXD).串行通讯中主要有两个技术问题,一个是数据传送、另一个是数据转换.数据传送主要解决传送中的标准、格式及工作方式等问题.数据转换是指数据的串并行转换.具体说,在发送端,要把并行数据转换为串行数据;而在接收端,却要把接收到的串行数据转换为并行数据.
单工/半双工和全双工的定义:
如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工.
如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在,称为半双工传输.
如果在任意时刻,线路上存在A到B和B到A的双向信号传输,则称为全双工.


分享一个串口通讯接收数据的代码,可以接收数据并以十六进制的形式显示出来:
打开的设备为/dev/ttyUSB0,使用时需要修改权限:

sudo chmod 777 /dev/ttyUSB0

或者修改group的权限。
可以通过cutecom工具查看自己的数据接收对不对。
cutecom工具使用的方法

#include <stdio.h>
#include <unistd.h>                     //Used for UART
#include <fcntl.h>                      //Used for UART
#include <termios.h>                    //Used for UART

typedef unsigned char uint8;

void dump8(uint8 *buf, int len)
{
        for(int icnt = 0; icnt < len; icnt++)
        {
                printf("0x%x,",buf[icnt]);
        }

        printf("\n\t");
}


int main(void)
{
    int data_num = 0;

    printf("\nUART test\n\n");

    int uart0_filestream = -1;

    uart0_filestream = open("/dev/ttyUSB0", O_RDONLY | O_NOCTTY | O_NDELAY);                //Open in non blocking read/write mode
    if (uart0_filestream == -1)
    {
        printf("Error - Unable to open UART.  Ensure it is not in use by another application\n");
        return -1;
    }


    struct termios options;
    tcgetattr(uart0_filestream, &options);
    options.c_cflag = B921600 | CS8 | CLOCAL | CREAD;         //<Set baud rate
    options.c_iflag = IGNPAR;
    options.c_oflag = 0;
    options.c_lflag = 0;
    tcflush(uart0_filestream, TCIFLUSH);
    tcsetattr(uart0_filestream, TCSANOW, &options);

    printf("init complete, listening...\n\n");


    while(1)
    {

        if (uart0_filestream != -1)
        {
            unsigned char buf1[2];
            int n = read(uart0_filestream, buf1, 2);
            if ((n > 0) && (buf1[0] == 0xff) &&(buf1[1] == 0xff))
            {
                unsigned char buf2[2];
                dump8(buf1,2);
                n = read(uart0_filestream, buf2, 2);
                dump8(buf2,2);
                if (n > 0 && (buf2[0] == 0x40) &&(buf2[1] == 0x01))
                {

                    unsigned char buf3[640];

                    data_num = read(uart0_filestream, buf3, 640);

                    if(data_num > 0)
                    {

                        dump8(buf3,data_num);
                    }

                
                }
            }
        }
    }

}

代码在Ubuntu系统上运行的没有问题。

如果路过的朋友有对深度学习计算机视觉感兴趣的,或者想入门的可以支持一下图书**《深度学习计算机视觉实战》与《学习OpenCV 4:基于Python的算法实战》**,两本书都以通俗易懂的讲解、丰富的案例帮助初学者学习视觉与图像方向的知识。欢迎前往gzh“**计算机视觉与OpenCV”**获取更多的学习资料。

版权声明:本文为CSDN博主「计算机视觉与OpenCV」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lxiao428/article/details/122555154

生成海报
点赞 0

计算机视觉与OpenCV

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

串口通讯数据接收代码

先说一下串口通信,有兴趣的可以看看,了解的直接拉到下方看使用的方式。 串行通信的三种方式:单工/半双工全双工 串行通讯的基本概念:与外界的信息交换称为通讯.基本的通讯方式有并行通讯和串行通讯两种.

STM32串口发送接收数据

1.串口通信 我用的32是stm32f10x最小系统没有UART4和UART5 USART : 通用同步异步收发器 UART : 通用异步收发器 nRTS : 请求发送 nCTS : 请求接收 区别:USART指单片机的一个IO端

基于51单片机制作的蓝牙小车

基于51单片机制作的蓝牙小车 这是本人(小菜鸡一枚)于大一寒假所做的小玩意,以展现我这几月所学,这也是我发的第一篇博客,准确来说这可能是我搞51单片机的巅峰所做了&#xff