转载:Pixhawk源码笔记三:串行接口UART和Console

转自:新浪@WalkAnt

第四部分 串行接口UART和Console

详细参考:http://dev.ardupilot.com/wiki/learning-ardupilot-uarts-and-the-console/

UART很重要,用于调试输出,数传、GPS模块等。

1、5个UART

目前共定义了5个UART,他们的用途分别是:

  • uartA – 串行终端,通常是Micro USB接口,运行MAVLink协议。
  • uartB – GPS1模块。
  • uartC – 主数传接口,也就是Pixhawk telem1接口。
  • uartD – 次数传接口,也就是telem2接口。
  • uartE – GPS2模块。

有些UART具备双重角色,比如通过修改SERIAL2_PROTOCOL参数,可以将uartD的Mavlink telemetry数传更改为Frsky telemetry数传(中国江苏产数传)。

测试 libraries/AP_HAL/examples/UART_test目录下的 example sketch,分别对5个UART都输出hello 消息。使用USB转串口工具,可以测试。

2、调试终端Debug console

作为5个UART的补充,有些平台额外的还有一个debug console调试终端。你可以通过检查HAL_OS_POSIX_IO宏定义来判断,诸如:

#if HAL_OS_POSIX_IO

::printf("hello console\n");

#endif

如果定义了HAL_OS_POSIX_IO,可以试着查看AP_HAL/AP_HAL_Boards.h代码。

3、UART函数

每个UART都一系列基本操作函数,主要有:

1.          printf – formatted print

2.          printf_P – formatted print with progmem string (saves memory on AVR boards)

3.          println – print and line feed

4.          write – write a bunch of bytes

5.          read – read some bytes

6.          available – check if any bytes are waiting

7.          txspace – check how much outgoing buffer space is available

8.          get_flow_control – check if the UART has flow control capabilities

可以到AP_HAL中查看他们的定义,并使用UART_TEST进行测试。

4、UART接口说明

众多UART接口,众多名称,他们的对应关系,我总结如下,如有问题,欢迎发邮件至[email protected] 新浪@WalkAnt,欢迎指正。


代码定义


PCB电路表述


飞控板接口


Serial标号


说明


APM代码中的表述


电路板上的表述


Pixhawk外壳上的标识


串口序号


uartA


Micro USB


USB


USB


接USB,支持MAVLink协议


uartB


UART4


GPS


Serial 3


接GPS模块,另CAN2接口


uartC


UART2


Telem1


Serial 1


接第1数传模块


uartD


UART3


Telem2


Serial 2


接第2数传模块


uartE


UART8


SERIAL4/5


Serial 4


一般接GPS2模块


/


UART7


SERIAL4/5


Serial 5


Debug Console用于程序调试

前面的文章:

Pixhawk源码笔记一:APM代码基本结构:http://blog.sina.com.cn/s/blog_402c071e0102v59r.html

Pixhawk源码笔记二:APM线程: http://blog.sina.com.cn/s/blog_402c071e0102v5br.html



经过对UART测试代码: libraries/AP_HAL/examples/UART_test)进行详细测试:

void loop(void)
{

// Micro USB口输出: Hello on UART uartA at 764.461 seconds
    test_uart(hal.uartA, "uartA");

// GPS接口输出:Hello on UART uartB at 91.845 seconds
    test_uart(hal.uartB, "uartB");

// 数传Telem1输出:Hello on UART uartC at 24.693 seconds
    test_uart(hal.uartC, "uartC");

// 数传Telem2输出:Hello on UART uartD at 805.557 seconds
    test_uart(hal.uartD, "uartD");

// SEIRAL 4口输出:Hello on UART uartE at 911.812 seconds
    test_uart(hal.uartE, "uartE");

// also do a raw printf() on some platforms, which prints to the
    // debug console
#if HAL_OS_POSIX_IO

// SEIRAL 5口输出: Hello on debug console at 976.857 seconds
    ::printf("Hello on debug console at %.3f seconds\n", hal.scheduler->millis()*0.001f);
#endif

hal.scheduler->delay(1000);
}

SERIAL 5 作为重要的调试口。Pixhawk启动时会通过该接口输出大量信息,可以用来对启动过程进行监控。

时间: 2024-10-12 23:45:57

转载:Pixhawk源码笔记三:串行接口UART和Console的相关文章

转载:Pixhawk源码笔记四:学习RC Input and Output

转自:新浪@WalkAnt 第五部分 学习RC Input and Output 参考:http://dev.ardupilot.com/wiki/learning-ardupilot-rc-input-output/ RC Input,也就是遥控输入,用于控制飞行方向.改变飞行模式.控制摄像头等外围装置.ArduPilot支持集中不同RC input(取决于具体的硬件飞控板): 1. PPMSum – on PX4, Pixhawk, Linux and APM2 2. SBUS – on P

转载:Pixhawk源码笔记二:APM线程

  转自:新浪@WalkAnt Pixhawk源码笔记一:APM代码基本结构,参见: http://blog.sina.com.cn/s/blog_402c071e0102v59r.html 这里,我们对 APM 线程进行讲解.如有问题,可以交流[email protected].新浪@WalkAnt,转载本博客文章,请注明出处,以便更大范围的交流,谢谢. 第三部分 APM线程 详细参考:http://dev.ardupilot.com/wiki/learning-ardupilot-threa

转载:Pixhawk源码笔记十一:增加新的MAVLink消息

转自:新浪长沙@WalkAnt 第十二部分 增加新的MAVLink消息 英文参考:http://dev.ardupilot.com/wiki/code-overview-adding-a-new-mavlink-message/ 本节源自:http://liung.github.io/blog/apm/2014-09-05-APM-增加新的MAVLink通讯协议消息.html MavLink协议:https://pixhawk.ethz.ch/mavlink/ 地面站之间的数据和指令通信都是通过

转载:Pixhawk源码笔记八:添加新的参数

转载:新浪@WalkAnt 第九部分 添加新的参数 英文参考:http://dev.ardupilot.com/wiki/code-overview-adding-a-new-parameter/ 本节源自:http://liung.github.io/blog/apm/2014-09-02-APM-添加新的参数.html 1 在主执行代码中添加参数         第一步:         Step #1: 在文件Parameters.h参数类中的枚举变量(enum)的合适位置,像下面代码块最

转载:Pixhawk源码笔记五:存储与EEPROM管理

转自:新浪@WalkAnt 第六部分 存储与EEPROM管理 详细参考:http://dev.ardupilot.com/wiki/learning-ardupilot-storage-and-eeprom-management/ 用户参数.航点.集结点.地图数据以及其他有用的信息需要存储.ArduPilot提供4个基本存储接口: 1.AP_HAL::Storage对象:hal.storage: 2.StorageManager库,是hal.storage更高级别的封装: 3.DataFlash

转载:Pixhawk源码笔记七:姿态控制预览

转自:新浪@WalkAnt 第八部分 姿态控制预览 英文参考:http://dev.ardupilot.com/wiki/apmcopter-programming-attitude-control-2/ 本节源自:http://liung.github.io/blog/apm/2014-08-31-APM-ArduCopter姿态控制概览.html 手动飞行模式,诸如自稳模式(Stabilize Mode).特技模式(Acro Mode).飘逸模式(Drift Mode),其程序结构如下图:

转载:Pixhawk源码笔记六:源码预览与APM:Copter程序库

转自:新浪@WalkAnt 第七部分 源代码预览与APM:Copter程序库 英文参考:http://dev.ardupilot.com/wiki/apmcopter-code-overview/ 本节来源:http://liung.github.io/blog/apm/2014-08-30-APM-Arducopter代码预览.html         APM::Copter代码主要放在ArduCopter文件夹中,并且和ArduPlane和ArduRover使用同样的库文件. 下面这张图展示

转载:Pixhawk源码笔记十:代码调度,使之定时运行

转自:新浪长沙@WalkAnt 第十一部分 调用代码,使之定时运行 英文参考:http://dev.ardupilot.com/wiki/code-overview-scheduling-your-new-code-to-run-intermittently/ 本节源自:http://liung.github.io/blog/apm/2014-09-05-APM-ArduCopter规划新代码使之按一定频率运行.html 1.用代码调度器(scheduler)运行你的代码 在给定时间间隔内来运行

转载:Pixhawk源码笔记一:APM代码基本结构

转自 新浪微博@WalkAnt 基础知识 详细参考:http://dev.ardupilot.com/wiki/learning-the-ardupilot-codebase/ 第一部分:介绍 详细参考:http://dev.ardupilot.com/wiki/learning-ardupilot-introduction/ ArduPilot 代码分为5个主要部分,基本结构分类如下: vehicle directories AP_HAL libraries tools directories