Mikrokopter MK 代码分析3-uart分析

MK飞控板通过串口提供了大量的调试设置信息。上位机通过串口向MK飞控板发送命令要求,命令支持采集传感器信息、测试电机、传递杆量、3D显示等功能。代码实现放在Uart.c中,两个关键函数是TransmitTxDataProcessRxData,按照固定数据帧格式进行数据的传送和接收处理。MK的串口数据采用了modified 64base加密,加密后每个字符前均加上'=', 然后加两byte crc校验位。接受到的数据由Decode64负责对加密数据进行逆向解码。

TransmitTxData处理好的数据交给SendOutData进行具体的传输。函数原型为void SendOutData(uint8_t cmd, uint8_t addr, uint8_t numofbuffers, ...)。其中,Numofbuffers代表需要发送的数据的种类数,参数为地址及数据大小。举例:

SendOutData('L',FC_ADDRESS,3,&MenuItem,sizeof(MenuItem),&MaxMenuItem, sizeof(MaxMenuItem), DisplayBuff, sizeof(DisplayBuff));

串口接收中断函数ISR(USART0_RX_vect)判断数据'#'开始,'/r'结束。接收一组数据后进行crc校验,校验通过后设置终止位,锁定rx buffer。待ProcessRxData处理完一组合法的接收数据时rx buffer解锁。

串口协议说明:

http://www.mikrokopter.de/ucwiki/en/SerialProtocol?highlight=%28%28----%28-%2A%29%28%5Cr%29%3F%5Cn%29%28.%2A%29CategoryCoding%29

Serial Protocol 

Start-Byte

Address Byte

ID-Byte

n Data-Bytes coded

CRC-Byte1

CRC-Byte2

Stop-Byte

'#'

'a'+ Addr

'V','D' etc

"modified-base64"

variable

variable

'/r'

Common Commands

Received

Send

Description

ID

Address

Data

ID

Address

Data

Labels of analog values

'a'

AnyAddr

u8 Index of Analog Channel

'A'

SlaveAddr

u8 Index, char[16] label text

ExternControl

'b'

AnyAddr

ExternControl Struct

'B'

SlaveAddr

ConfirmFrame

Request display

'h'

AnyAddr

u8 ~RemoteKey, u8 AutoSendInterval

'H'

SlaveAddr

char[80] DisplayText

Request display

'l'

AnyAddr

u8 MenuItem

'L'

SlaveAddr

u8 MenuItem, u8 MaxMenuItem, char[80] Display Text

Version Request

'v'

AnyAddr

none

'V'

SlaveAddr

!Version Info Struct

Debug Request

'd'

AnyAddr

u8 AutoSendInterval

'D'

SlaveAddr

Debug Data Struct

Reset

'R'

AnyAddr

none

-

-

-

Get External Control

'g'

AnyAddr

none

'G'

SlaveAddr

ExternControl Strcut

Flight-Ctrl

Received by FC

Send by FC

Description

ID

Address

Data

ID

Address

Data

since FC 

Compass Heading

'K'

FC-Addr

s16 Compass Value

'k'

MK3MAG-Addr

Nick Roll Attitude ...

0.71f

Engine Test

't'

FC-Addr

u8[16] values for the engines

'T'

FC-Addr

-

0.71f

Settings Request

'q'

FC-Addr

u8 Settings Index ( 1..5 READ or 0xff for actual setting)
u8 Settings Index (11..15 RESET setting to default (channel mapping will not be changed))
u8 Settings Index (21..25 RESET setting to default (complete reset including channel settings))

'Q'

FC-Addr

u8 Settings Index, u8 Settings Version, Settings Struct

0.71f

Write Settings

's'

FC-Addr

u8 Settings Index, u8 Settings Version, Settings Struct

'S'

FC-Addr

u8 Settings Index (1 ..5, 0=Error)

0.71f

Read PPM Channels

'p'

FC-Addr

none

'P'

FC-Addr

s16 PPM-Array[11]

0.71f

Set 3D-Data Interval

'c'

AnyAddr

u8 Interval

'C'

FC-Addr

struct Data3D

0.72p

Mixer Request

'n'

FC-Addr

none

'N'

FC-Addr

u8 MixerRevision, u8 Name[12], u8 MixerTable[16][4]

0.73

Mixer Write

'm'

FC-Addr

u8 MixerRevision, u8 Name[12], u8 MixerTable[16][4]

'M'

FC-Addr

u8 ack (1 = okay, 0 = error)

0.73

Change setting

'f'

FC-Addr

u8 Number of new Setting

'F'

FC-Addr

u8 Number

0.77

Serial Poti

'y'

FC-Addr

s8 Poti[12]

-

-

-

0.77

BL parameter request

'u'

FC-Addr

u8 BL_Addr

'U'

FC-Addr

u8 Status1, u8 Status2, u8 BL_Addr, BLConfig Struct

0.80

BL parameter write

'w'

FC-Addr

u8 BL_Addr, BLConfig Struct

'W'

FC-Addr

u8Status1, u8 Status2

0.80

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值