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对象负责与地面站的通讯。

相关推荐
老李的森林2 天前
嵌入式开发--STM32用DMA+IDLE中断方式串口接收不定长数据--之2
stm32·单片机·嵌入式硬件·串口·dma·idle中断
山木嵌入式4 天前
STM32串口不定长数据接收:超时解析法+DMA+空闲中断法(附完整代码)
stm32·单片机·串口·uart
tzy2339 天前
Modbus:工业通信的“通用语言”
网络·串口·协议·modbus·rs-485·规约·iec 101
山木嵌入式9 天前
同步通信与异步通信(UART/USART):定义、原理、场景全解析
串口·嵌入式·uart·通信
小贺儿开发10 天前
Unity3D 串口通信上位机联调系统
unity·串口·协议·数据·通信·传输·互动
东成202210 天前
ch340驱动的串口可以寻址DMA吗
串口·dma·ch340
小灰灰搞电子11 天前
rt-thread UART串口使用详解
单片机·嵌入式硬件·串口
山木嵌入式13 天前
STM32 UART串口通信协议与3种底层驱动实现(寄存器/标准库/HAL库)
stm32·单片机·串口·uart
The_superstar615 天前
衡山派lvgl小练
串口·lvgl·衡山派·ds133ebs