外部模块静态库

一些概念

crossfire

crossfire协议简称CRSF,这是一个TBS高频头用到的协议

接口文件说明

重要

这里只说明需要实现的接口和接口的要求,至于实现的方法取决于具体平台,接口的参数这里 也不讲,可以看接口文件的函数说明。在这里可以查看ET12已经完成的移植接口来理解下面 的内容。

telemetry_driver.c

该文件的作用是

  • 初始化接收端口
  • 把外部模块回传的数据接收回来并放入FIFO缓存区
  • 把数据通过串行口发送到外部模块

telemetryPortInit

外部模块所有的回传数据都是遵循串行口通信协议,所以这里可以把接收顿口设置为uart

接收回传数据

接收到的回传数据通过函数 telemetryFifo.push 放入FIFO缓存区。ET12使用uart 中断来接收回传数据,并且一次接口一个byte,然后在中断通过 telemetryFifo.push 把外部模块回传的数据接收回来并放入FIFO缓存区

sportSendBuffer

当前外部模块只支持TBS的CRSF协议和多协议高频头(MulProtocol),当发射机选择 C时候CRFS时,需要通过串行口把数据发送给外部模块。ET12使用UART+DMA的方式把 数据发送到外部模块

mulprotocol_driver.c

这个文件命名为extern_module_driver.c更合适,因为前期外部模块只支持多协议 高频头因此为mulprotocol_drier.c,这个文件的作用是

  • 初始化发送端口
  • 把数据发送到外部模块

extmoduleStop

停止发射数据到外部模块。

extmoduleSerialStart

初始化外部模块的发射端口,当发射机选择外部模块为多协议高频头时,需要通过串行口把 数据发送给外部模块。ET12利用定时器比较输出+DMA+中断的方式把数据传输给外部模块。

extmoduleSendNextFrame

把缓冲区的数据发送到外部模块,需要遵循以下步骤

  • 判断协议类型
  • 根据协议把缓冲区extmodulePulsesData对应的数据发送到外部模块

mulprotocol_conf.c

mulprotocol_get_out_channel_value

多协议模块需要用到,返回值要求[(0:2047)]

module_get_out_channel_value

返回值要求[-1024:1024]

get_tmr10ms

获取一个10ms的计数器

mulprotocol_init_module_data

初始化外置高频头模块数据句柄,需要由用户调用进行初始化

重要

这个函数必须在用户外部模块接口之前被调用。

telemetry_sensors_init

初始化传感器数组,需要用户调用进行初始化

重要

这个函数必须在用户外部模块接口之前被调用。

mulprotocol_get_failsave_channel

多协议模块获取失控保护数值

  • hold 为 2047
  • off 为 0
  • pulses [1 : 2046]

mulprotocol_conf.h

RTOS_GET_MS()

获取1ms计数器

RTOS_GET_TIME()

重要

这个和FreeRTOS Tick是一个概念,Tick是FreeRTOS的最小单位。TIME是外部模块的 最小单位。这个时间不能大于发送外部模块的发射周期,1MS能满足现在的要求。ET12 使用就是1MS

RTOS_MS_PER_TICK()

RTOS_GET_TIME = RTOS_GET_MS / RTOS_GET_TIME