APM学习(9):串口管理

一、串口设置

ArduPilot对串口的管理在

libraries/AP_SerialManager/AP_SerialManager.cpp

文件中实现。在AP_SerialManager.cpp的var_info[]中定义了各串口的功能和参数。分别包括

SERIALx_PROTOCOL

SERIALx_BAUD

SERIALx_OPTION

等参数。

SERIALx_PROTOCOL定义了串口的功能,比如用于Mavlink通讯、GPS、云台等。它的取值在AP_SerialManager.h中定义,由一个enum数据类型定义

cpp 复制代码
enum SerialProtocol {
    SerialProtocol_None = -1,
    SerialProtocol_Console = 0, 				// unused
    SerialProtocol_MAVLink = 1,
    SerialProtocol_MAVLink2 = 2,                // do not use - use MAVLink and provide instance of 1
    SerialProtocol_FrSky_D = 3,                 // FrSky D protocol (D-receivers)
    SerialProtocol_FrSky_SPort = 4,             // FrSky SPort protocol (X-receivers)
    SerialProtocol_GPS = 5,
    SerialProtocol_GPS2 = 6,                    // do not use - use GPS and provide instance of 1
    SerialProtocol_AlexMos = 7,
    SerialProtocol_Gimbal = 8,                  // SToRM32, Siyi custom serial protocols
	...

SERIALx_BAUD定义了串口的波特率,通常为57600、115200等数值。在设置参数时有可能会除以1000进行设置。

SERIALx_OPTION定义了串口的一些高级选项,如对数据进行反转、半双工模式、TX/RX 引脚交换等。

ArduPilot默认的串口配置如下

串口 功能 协议 波特率
SERIAL0 控制台/地面站连接(Console) USB端口,固定为MAVLink2 (协议值 2) 115200
SERIAL1 第一数据端口(Telem1) MAVLink2 (协议值 2) 57600
SERIAL2 第二数据端口(Telem2) MAVLink2 (协议值 2) 57600
SERIAL3 第一GPS端口(GPS1) GPS (协议值 5) 230400
SERIAL4 第二GPS端口(GPS2) GPS (协议值 5) 230400
SERIALx(其它) 未定义 None (协议值 -1) 57600

可以通过修改它们的数值设置它们的功能和参数。

二、串口初始化

串口的初始化在AP_Vehicle::setup()函数中实现,顺序大致如下

cpp 复制代码
void AP_Vehicle::setup()
{
	...
	serial_manager.init_console();
	...
	gcs().init();
	...
	serial_manager.init();
	...
	gcs().setup_console();
	...
}

在函数中首先调用serial_manager.init_console()函数来实现对串口0(Console)进行初始化。后面调用serial_manager.init()函数,在init()函数中对所有串口进行遍历(从串口1开始),分别根据他们的参数设置进行初始化。上面程序执行过程也进行了GCS对象的初始化,GCS对象负责与地面站的通讯。

相关推荐
The_superstar619 小时前
衡山派学习之串口
单片机·嵌入式硬件·串口·衡山派
tzy2332 天前
电力通信规约的鼻祖:IEC101和串口通信
串口·iec104·iec101·rs-485·rs-232·8n1
Terasic友晶科技9 天前
答疑解惑 | DE25-Nano开发板串口在访问FPGA端外设LED时卡死,无任何反应
fpga开发·串口·led·de25-nano
zmj32032410 天前
单片机串口收发数据不可靠--用做指令会执行错误动作
单片机·嵌入式硬件·串口
Z文的博客19 天前
嵌入式MCU与迪文屏通信:DMA+环形FIFO+变长队列+状态机完整手册
stm32·单片机·串口·dma·中断·串口dma·嵌入式单片机
冷凝雨19 天前
复旦微FM33 MCU 底层开发指南——UART
stm32·单片机·串口·uart·fm33lc0·复旦微电子
藤谷性能22 天前
Ubuntu 22.04:安装串口调试助手CoolTerm
linux·运维·ubuntu·串口·coolterm
划水的code搬运工小李1 个月前
Ubuntu18.04读取串口信息
stm32·ubuntu·串口·嵌入式
潇然四叶草1 个月前
RK3588 android12修改设备权限
串口·权限·设备