詳細參考:http://dev.ardupilot.com/wiki/learning-ardupilot-uarts-and-the-console/git
UART很重要,用於調試輸出,數傳、GPS模塊等。github
目前共定義了5個UART,他們的用途分別是:函數
有些UART具有雙重角色,好比經過修改SERIAL2_PROTOCOL參數,能夠將uartD的Mavlink telemetry數傳更改成Frsky telemetry數傳(中國江蘇產數傳)。工具
測試 libraries/AP_HAL/examples/UART_test目錄下的 example sketch,分別對5個UART都輸出hello 消息。使用USB轉串口工具,能夠測試。oop
做爲5個UART的補充,有些平臺額外的還有一個debug console調試終端。你能夠經過檢查HAL_OS_POSIX_IO宏定義來判斷,諸如:測試
#if HAL_OS_POSIX_IOurl
::printf("hello console\n");spa
#endif線程
若是定義了HAL_OS_POSIX_IO,能夠試着查看AP_HAL/AP_HAL_Boards.h代碼。
每一個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進行測試。
衆多UART接口,衆多名稱,他們的對應關係,我總結以下,若有問題,歡迎發郵件至30175224@qq.com 新浪@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啓動時會經過該接口輸出大量信息,能夠用來對啓動過程進行監控。