ubuntu20.04串口通信

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

所需用具
stm32f103c8t6最小系统板
stlink
usb-ttl

ps:这里我用的是虚拟机,本质上是ros的串口通信
32的代码这里没有,有需要可以去下载江科大的源码或者私信我


提示:以下是本篇文章正文内容,下面案例可供参考

一、安装文件

一定需要的文件

sudo apt-get install ros-noteic-serial

串口助手

sudo apt-get install cutecom

vscode串口助手插件:Serial Monitor

二、开始!

硬件连接

STLink正常连接
usb—ttl只需要连接串口1(A9:TX A10:RX)
全部连接在电脑上
因为我使用的是虚拟机,可以一边在win下使用keil,一边开虚拟机ros
在这里插入图片描述

ros准备 1

新建一个功能包,要求带有 roscpp serial std_msgs 这三个依赖
在这里插入图片描述

代码如下:

#include <ros/ros.h>
#include <serial/serial.h>
#include <std_msgs/String.h>
#include <std_msgs/Empty.h>

serial::Serial ser; // 创建一个名为ser的serial对象

void write_callback(const std_msgs::String::ConstPtr& msg){
    ROS_INFO_STREAM("Writing to serial port " << msg->data); // 输出写入串口的信息
    ser.write(msg->data); // 将收到的消息写入串口
}

int main (int argc, char** argv){
    ros::init(argc, argv, "serial_example_node"); // 初始化ROS节点
    ros::NodeHandle nh; // 创建节点句柄

    ros::Subscriber write_sub = nh.subscribe("write", 1000, write_callback); // 订阅"write"主题,设置消息队列长度为1000,收到消息时调用write_callback函数
    ros::Publisher read_pub = nh.advertise<std_msgs::String>("read", 1000); // 发布"read"主题,设置消息队列长度为1000

    try
    {
        ser.setPort("/dev/mcu_uart"); // 设置串口名称
        ser.setBaudrate(9600); // 设置波特率
        serial::Timeout to = serial::Timeout::simpleTimeout(1000); // 设置超时时间
        ser.setTimeout(to); // 应用超时设置
        ser.open(); // 打开串口
    }
    catch (serial::IOException& e)
    {
        ROS_ERROR_STREAM("Unable to open port "); // 输出错误信息
        return -1; // 返回错误码
    }

    if(ser.isOpen()){
        ROS_INFO_STREAM("Serial Port initialized"); // 输出串口初始化成功信息
    }else{
        return -1; // 返回错误码
    }

    ros::Rate loop_rate(5); // 设置循环频率
    while(ros::ok()){

        ros::spinOnce(); // 执行一次回调函数

        if(ser.available()){ // 如果串口有数据可读
            ROS_INFO_STREAM("Reading from serial port"); // 输出从串口读取信息
            std_msgs::String result; // 创建用于存储读取数据的消息对象
            result.data = ser.read(ser.available()); // 读取串口中的数据
            ROS_INFO_STREAM("Read: " << result.data); // 输出读取的数据
            read_pub.publish(result); // 发布读取到的数据到"read"主题
        }
        loop_rate.sleep(); // 根据循环频率进行休眠

    }
}

更改cmakelists文件

add_executable(serial_example_node src/serial_example_node.cpp)

target_link_libraries(serial_example_node
  ${catkin_LIBRARIES}
)

ros准备 2

确定自己的设备名称(方便后面使用)
步骤1:虚拟机连接上串口
在这里插入图片描述
步骤2:查看端口号

lsusb

在这里插入图片描述
可以看到第二个就是我们需要绑定的端口
步骤3:进入设备管理文件夹

cd /etc/udev/rules.d/

/etc/udev/rules.d/ 目录通常用于存放 udev 规则文件。udev 是 Linux 内核中的设备管理器,负责处理与设备相关的事件和信息
步骤4:创造一个规则

sudo touch usb.rules
sudo nano usb.rules
KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0777", SYMLINK+="my_uart"

还是这张图片,鼠标的位置有标识。0777不需要更改
在这里插入图片描述
步骤5:重置设备

sudo /etc/init.d/udev restart

之后重新插拔usb

ls -l /dev |grep ttyUSB

在这里插入图片描述

测试

我的32代码就是发送0x41,对应过来的字母就是A
在这里插入图片描述
看看发送
在这里插入图片描述
基本ok
完结撒花!

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值