ubuntu下c语言调试串口

1. 开发环境搭建

gcc就可以

命令行

gcc -v

hy@ubuntu:~/c-dev$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.5.0-3ubuntu1~18.04' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04) 

如果没有显示上述内容,说明gcc没有正确安装

sudo apt install gcc

即可

2. 可以建个最简单的helloworld测试先编译环境

新建开发目录

mkdir c-dev

新建文件

sudo gedit hello.c

编辑,保存为hello.c

#include <stdio.h>

int main(void)
{
    printf("hello world!\n");
    return 0;

}
 

编译运行

 gcc -Wall hello.c -o hello

可以观察到到目录下生成了可执行文件hello

.hy@ubuntu:~/c-dev$ ./hello
hello world!

当然,以上在vscode中配置好c语言环境插件和coderunner,可以直接运行

3. 为了开发调试方便,可以安装虚拟串口和串口调试工具

ubuntu下好用的串口调试工具cutecom,

sudo apt install cutecom

实际插了usb转串口工具才有用

我们为了调试,还需要虚拟两个串口环回

安装虚拟串口工具socat

下载链接http://www.dest-unreach.org/socat/download/socat-1.7.3.2.tar.gz

放到本地tools目录下,然后解压

tar zxvf socat-1.7.3.2.tar.gz 

进入目录,配置编译安装

cd socat-1.7.3.2
./configure --disable-fips
一堆yes后配置成功 

checking for var environ... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
编译安装

sudo make & sudo make install
成功

......

mkdir -p /usr/local/share/man/man1
/usr/bin/install -c -m 644 ./doc/socat.1 /usr/local/share/man/man1/
创建换回的两个串口,创建前可以查看下已有设备,这样多出来的两个就是创建的

ls /dev/pts*

/dev/pts:
0  1  2  3  4  5  6  ptmx
创建

hy@ubuntu:~/tools/socat-1.7.3.2$ socat -d -d pty,raw,echo=0 pty,raw,echo=0
2021/06/11 08:34:03 socat[11093] N PTY is /dev/pts/7
2021/06/11 08:34:03 socat[11093] N PTY is /dev/pts/8
2021/06/11 08:34:03 socat[11093] N starting data transfer loop with FDs [5,5] and [7,7]
新建的两个串口是/dev/pts/7 和/dev/pts/8

打开一个terminial终端监听8口

hy@ubuntu:~$ cat < /dev/pts/8
此时再打开一个窗口向7发送上面就会显示发送的内容

4. 好了,环境好了,进入主题,可以编写程序,测试串口调用了

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <string.h>

#include <errno.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <termios.h>

#define BAUDRATE B115200 ///Baud rate : 115200

#define DEVICE "/dev/pts/7"//设置你的端口号

int nFd = 0;

struct termios stNew;

struct termios stOld;

 

//Open Port & Set Port

int SerialInit()

{

    nFd = open(DEVICE, O_RDWR|O_NOCTTY|O_NDELAY);

    if(-1 == nFd)

    {

        perror("Open Serial Port Error!\n");

        return -1;

    }

    if( (fcntl(nFd, F_SETFL, 0)) < 0 )

    {

        perror("Fcntl F_SETFL Error!\n");

        return -1;

    }

    if(tcgetattr(nFd, &stOld) != 0)

    {

        perror("tcgetattr error!\n");

        return -1;

    }

 

    stNew = stOld;

    cfmakeraw(&stNew);//将终端设置为原始模式,该模式下全部的输入数据以字节为单位被处理

 

    //set speed

    cfsetispeed(&stNew, BAUDRATE);//115200

    cfsetospeed(&stNew, BAUDRATE);

 

    //set databits

    stNew.c_cflag |= (CLOCAL|CREAD);

    stNew.c_cflag &= ~CSIZE;

    stNew.c_cflag |= CS8;

 

    //set parity

stNew.c_cflag &= ~PARENB;

stNew.c_iflag &= ~INPCK;

 

    //set stopbits

stNew.c_cflag &= ~CSTOPB;

    stNew.c_cc[VTIME]=0;    //指定所要读取字符的最小数量

    stNew.c_cc[VMIN]=1; //指定读取第一个字符的等待时间,时间的单位为n*100ms

                //假设设置VTIME=0,则无字符输入时read()操作无限期的堵塞

    tcflush(nFd,TCIFLUSH);  //清空终端未完毕的输入/输出请求及数据。

if( tcsetattr(nFd,TCSANOW,&stNew) != 0 )

    {

        perror("tcsetattr Error!\n");

        return -1;

    }

 

    return nFd;

}

 

int main(int argc, char **argv)

{   int i;

    int nRet = 0;

    char *sendmsg="test\r\n";

    int SIZE=sizeof(sendmsg);

    char buf[SIZE];

    if( SerialInit() == -1 )

    {

        perror("SerialInit Error!\n");

        return -1;

    }
    printf("serial port init ok. \r\n");

    bzero(buf, SIZE);

    while(1)

    {   sleep(1);

        write(nFd,sendmsg,sizeof(sendmsg));//向串口发送数据

        printf("sent msg. %s\n",sendmsg);

 

        /串口接收部分

        nRet = read(nFd, buf, SIZE);

        if(-1 == nRet)

        {

            perror("Read Data Error!\n");

            break;

        }

        if(0 < nRet)

        {

            buf[nRet] = 0;

            printf("Recv Data: %s\n", buf);

        }

        

    }

    close(nFd);

    return 0;

}

注意,其中端口改成上面你在本地创建的端口之一,打开另外一个监听,在我们的例子里,cat窗口A监听8,程序向7发送就可以在监听窗口A看到输出,另外一个终端B向7发送,就可以向程序回送,向8发送就可以测试监听是否正常。

编译运行

gcc -Wall serial.c -o serial

./serial

每当B发送回应时,serial程序延时1s发送测试字符串

测试成功,可以把串口调用作为个函数放到其他应用中去。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
您可以按照以下步骤在Ubuntu上安装Visual Studio Code。 1. 首先,在Ubuntu桌面的左侧菜单中找到Ubuntu Software并打开它。 2. 在Ubuntu Software中搜索Visual Studio Code。 3. 在搜索结果中找到Visual Studio Code并点击安装按钮进行安装。 4. 如果在Ubuntu Software中无法找到Visual Studio Code,您可以前往VSCode官网(Visual Studio Code - Code Editing. Redefined)下载Linux x64.deb版本的安装文件。 5. 将下载的.deb文件拖放到Ubuntu的Downloads文件夹中。 6. 在Ubuntu上打开终端(Terminal)。 7. 使用cd命令进入到Downloads文件夹,例如:cd Downloads。 8. 运行以下命令以安装Visual Studio Code:sudo dpkg -i <filename>.deb(请将<filename>替换为实际的文件名)。 9. 输入您的Ubuntu密码以确认安装过程。 10. 安装完成后,您可以在Ubuntu的应用程序菜单中找到并打开Visual Studio Code。 希望这些步骤能帮助您在Ubuntu上成功安装Visual Studio Code。如果您遇到了任何问题,请随时向我求助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [在 Ubuntu 中安装 VSCode](https://blog.csdn.net/qq_50840738/article/details/126060563)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Ubuntu20.04下安装VSCode(配置C/C++开发环境)](https://blog.csdn.net/fangshuo_light/article/details/123635576)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海里的鱼2022

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值