0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ROS与STM32串口通信代码

麦辣鸡腿堡 来源:古月居 作者:月照银海似蛟龙 2023-11-17 18:10 次阅读

这里以一个智能车代码工程为例,抽取串口通信部分代码

在头文件中,进行串口头文件的包含

#include < serial/serial.h >

在类的定义中,什么一个 serial 类的实例

serial::Serial Stm32_Serial;  //声明串口对象

并且在类的定义中,声明两个结构体,用来存储接收和要发送的数据

RECEIVE_DATA Receive_Data; //The serial port receives the data structure //串口接收数据结构体
SEND_DATA Send_Data;       //The serial port sends the data structure //串口发送数据结构体

在类的构造函数中,配置这个串口对象的参数

private_nh.param< std::string >("usart_port_name",  usart_port_name,  "/dev/stm32_controller"); //Fixed serial port number //固定串口号
  private_nh.param< int >        ("serial_baud_rate", serial_baud_rate, 115200); //Communicate baud rate 115200 to the lower machine //和下位机通信波特率115200

这两个参数是在launch文件中设置的,代码里进行参数的读取。

usart_port_name 设置的USB设备别名

serial_baud_rate 串口通信的波特率要和stm32设置的一致

try
  { 
    //Attempts to initialize and open the serial port //尝试初始化与开启串口
    Stm32_Serial.setPort(usart_port_name); //Select the serial port number to enable //选择要开启的串口号
    Stm32_Serial.setBaudrate(serial_baud_rate); //Set the baud rate //设置波特率
    serial::Timeout _time = serial::Timeout::simpleTimeout(2000); //Timeout //超时等待
    Stm32_Serial.setTimeout(_time);
    Stm32_Serial.open(); //Open the serial port //开启串口
  }
  catch (serial::IOException& e)
  {
    ROS_ERROR_STREAM("car_robot can not open serial port,Please check the serial port cable! "); //If opening the serial port fails, an error message is printed //如果开启串口失败,打印错误信息
  }

初始化串口配置,并开启串口

设置的参数包括:

  • 要开启的串口号
  • 设置波特率
  • 超时等待

判断串口是否被打开,打开输出终端打印信息

if(Stm32_Serial.isOpen())
  {
    ROS_INFO_STREAM("car_robot serial port opened"); //Serial port opened successfully //串口开启成功提示
  }

ROS主控读取stm32发送的数据

之后便可以通过

Stm32_Serial.read(Receive_Data_Pr,sizeof(Receive_Data_Pr));

read函数读取串口接收到的字节,之后通过定义的通信协议再进行和校验与数据解析即可stm32向ROS主控发送数据。

ROS主控向stm32发送数据

ROS主控向stm32发送数据的代码如下:

将之前定义的发送数据的结构体 Send_Data的tx 中填入要发送的字节

Send_Data.tx[0]=FRAME_HEADER; //frame head 0x7B //帧头0X7B
 Send_Data.tx[1] = 0; //set aside //预留位
 Send_Data.tx[2] = 0; //set aside //预留位

填好字节后,直接通过下面代码发送即可

try
  {
    Stm32_Serial.write(Send_Data.tx,sizeof (Send_Data.tx)); //Sends data to the downloader via serial port //通过串口向下位机发送数据 
  }
  catch (serial::IOException& e)   
  {
    ROS_ERROR_STREAM("Unable to send data through serial port"); //If sending data fails, an error message is printed //如果发送数据失败,打印错误信息
  }
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    15235

    浏览量

    171209
  • STM32
    +关注

    关注

    2240

    文章

    10674

    浏览量

    348806
  • 智能车
    +关注

    关注

    21

    文章

    395

    浏览量

    76695
  • ROS
    ROS
    +关注

    关注

    1

    文章

    271

    浏览量

    16682
收藏 人收藏

    评论

    相关推荐

    什么是STM32串口通信

    STM32串口通信学习总结1.概述1.1学习目的通过基于AWA5812平台,学习STM32F767芯片的串口
    发表于 07-20 06:28

    基于串口STM32通过rosserial和ROS系统通信代码

    前言最初参考网上资料移植了一份基于串口STM32通过rosserial和ROS系统通信代码。对于小数据量格式的消息,可以正常
    发表于 08-06 08:54

    什么是STM32串口通信

    同步通信和异步通信的区别是什么?什么是STM32串口通信
    发表于 10-09 09:03

    STM32串口通信的过程是怎样的

    常见的串行通信接口有哪些?STM32串口通信的过程是怎样的?
    发表于 10-18 08:30

    STM32串口通信如何编程?

    STM32怎么使用串口STM32串口通信如何编程?
    发表于 12-07 08:03

    STM32串口通信怎么使用?

    串行通信有哪几种类型?USART的功能是什么?STM32串口通信怎么使用?
    发表于 12-08 06:59

    stm32串口通信是如何工作的

    stm32串口通信有何功能?stm32串口通信是如何工作的?
    发表于 12-08 07:54

    求大佬分享STM32串口通信配置源代码分享

    求大佬分享STM32串口通信配置源代码分享
    发表于 12-10 06:46

    如何完成ROSSTM32之间的串口通信

    如何去实现ROSSTM32串口通信测试功能?如何完成ROSSTM32之间的
    发表于 12-10 06:54

    STM32串口通信代码正确串口却没反应是为什么?怎么解决?

    STM32串口通信代码正确串口却没反应是为什么?怎么解决?
    发表于 12-13 07:03

    STM32串口通信原理是什么?

    STM32串口通信原理是什么?
    发表于 12-16 06:24

    STM32串口通信相关资料分享

    STM32串口通信文章目录STM32串口通信前言一、基于寄存器与基于固件库的
    发表于 02-10 06:28

    stm32串口通信实战

    STM32串口通讯一、基于寄存器与基于固件库的编程方式的差异二、stm32串口通信实战1、烧录代码
    发表于 02-10 07:00

    求解STM32串口通信的过程是怎样的

    STM32串口通信的特点有哪些呢?STM32串口相关配置寄存器有哪些?STM32
    发表于 02-16 06:34

    智能车ROSSTM32串口通信代码

    这里以一个智能车代码工程为例,抽取串口通信部分代码 在头文件中,进行串口头文件的包含 # include 在类的定义中,什么一个 seria
    的头像 发表于 11-26 17:47 784次阅读