在頭文件中,進行串口頭文件的包含
#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文章
16212瀏覽量
177455 -
STM32
+關注
關注
2266文章
10875瀏覽量
354898 -
智能車
+關注
關注
21文章
402瀏覽量
76914 -
ROS
+關注
關注
1文章
276瀏覽量
16967
發布評論請先 登錄
相關推薦
智能車ROS與STM32串口通信代碼
這里以一個智能車代碼工程為例,抽取串口通信部分代碼 在頭文件中,進行串口頭文件的包含 # include 在類的定義中,什么一個 seria
評論