## 一、项目名称
adapterBoardDriver
## 二、产品类型
演示板
## 三、应用场景
无线数据收发、测试通讯距离
## 四、传感器及驱动接口
无
## 五、按键
6个
1. `S1`按键可以移动光标（选择的项会反显）向上选择设置项，或向上设置数值，可以循环移动选择
1. `S2`按键可以返回上一个界面
1. `S3`按键可以移动光标（选择的项会反显）向下选择设置项，或向上设置数值，可以循环移动选择
1. `S4`按键功能待定
1. `S5`按键，功能1：开机界面时，按下进入功能选择界面。功能2：确定选择项目。功能3：退出设置状态

dfsdfsdfsd
dsdfsd

## 六、LED指示灯
2个
1. `D5`蓝色LED，发送成功指示灯灯
2. `D4`红色LED，接收成功指示灯灯
## 七、显示器类型及驱动接口 
深圳市晶联讯电子的液晶模块`JLX19296G-382-PN`
该液晶模块支持4线SPI串行接口和IIC接口，本项目使用IIC接口驱动，显示大小192*96 点阵
## 八、功耗要求
无
## 九、供电方式
支持三种供电
1. USB的MICRO-B插头供电
1. 3*5号电池供电
1. 2pin的PH座子供电，注意电压不能超过5V
## 十一、尺寸
87mm*131.5mm
## 十二、射频频段
2400MHz
## 十三、射频芯片方案
`NRF24L01P`、`Si24R1`
## 十四、主控芯片方案
`AT32F413RCT7`该MCU与`STM32F103RCT6`软硬件兼容
## 十五、认证要求
无
## 十六、外部连接接口
1. `P7`串口转USB
1. `J1``J2`MCU的GPIO口
1. `P1`microBIT插槽，用于无线模块转接板连接
1. `P7`MICRO-B类型USB座子，供电
1. `P6`外部供电
1. `P5`仿真烧录接口
## 十七、编译器
`MDK-ARM Standard  Version: 5.14.0.0`
## 十八、编程语言
C99标准
## 十九、SDK版本
`STM32F10x_StdPeriph_Lib_V3.5.0`
## 二十、功能描述
<div >
<img src="image/mainUi.png"  height="150" width="200">
<img src="image/select_tx.png"  height="150" width="200">
<img src="image/packettx.png"  height="150" width="200">
<img src="image/packetrx.png"  height="150" width="200">
<img src="image/continuous.png"  height="150" width="200">
</div>

### 数据包收发测试
#### 发送测试
`主界面`<img src="image/mainUi.png"  height="60" width="85">-->按键`S5`-->功能选择`Enter RF Transmiter`<img src="image/select_tx.png"  height="60" width="85">-->按键`S5`-->进入`Packet Tx`<img src="image/packetTx.png"  height="60" width="85">-->按键`S5`-->开始发送，同时`START`会闪烁显示
发送完成后，6S内收到ACK，会立即触发重新发送，同时会重新设置重发超时时间（从开始发送到接收到ACK的时间），超时后自动重发，超时重发10次后，重发超时时间自动切换回6S。
发送成功`D5`蓝色LED灯闪烁一下。

如图<img src="image/packetTx.png"  height="160" width="195">
1. `413ms`为从开始发送到无线收到对方回复的应答所消耗的时间，若该处显示`OUT`，则表示接收等待ACK超时。
2. `100%`为统计的丢包率，重新按下按键`S5`重新计数
3. `hello world?`为无线收到的数据包，其中的`?`位置的字符每次都会不一样
4. `-004dBm`为最新一次无线收到的数据包的信号强度
#### 接收测试
`主界面`<img src="image/mainUi.png"  height="60" width="85">-->按键`S5`-->功能选择`Enter RF Receiver`<img src="image/select_rx.png"  height="60" width="85">-->按键`S5`-->进入`Packet Rx`<img src="image/packetRx.png"  height="60" width="85">-->按键`S5`-->开始接收，同时`START`会闪烁显示
收到数据后`D4`红色LED灯闪烁一下

如图<img src="image/packetRx.png"  height="160" width="195">
1. `11.67mA`为当前无线模组的工作电流
1. `-13dBm`为最新一次无线收到的数据包的信号强度
1. `hello world2`、`hello world3`、`hello world4`为无线收到的3个数据包，收到新的数据包时显示会向上滚动

### 功能参数设置
<div align="center">
<img src="image/setting.png"  height="150" width="200">
</div>

`主界面`<img src="image/mainUi.png"  height="60" width="85">-->按键`S5`-->功能选择`Enter RF Setting`<img src="image/select_set.png"  height="60" width="85">-->按键`S5`-->进入`Setting`<img src="image/setting.png"  height="60" width="85">，按下`S1`或者`S3`切换设置项目，确定需要设置的项目后，按下`S5`进行参数设置，该项的光标会闪烁显示，此时可通过按键`S1`或者`S3`上下调节参数。再按下`S5`退出设置，即可选择其他选项设置。
1. `Type`，设置选择对应的模组型号，当前demo板的固件可能会兼容多个型号的模组，比如以下型号的模组可以共用一套驱动固件
   1. VG3512S240N0M1
   2. VG35R2S240N0M1
   3. VG3512S240X0M1
   4. VG35R2S240X0M1
   
2. `Chnl`，设置当前模组的无线信道，信道对应的无线率会根据`Type`类型和`Step`信道间隔的设置而改变
3. `Step`，信道间隔，即每个信道之间的频率带宽，该设置需根据实际情况而定，不宜太小，过小的间隔可能会造成不同信道的设备串频造成干扰。
4. `TxPower`，无线发射功率。发射功率越大，功耗越高，相应的通讯距离也会越远
5. `RfBr`，无线波特率。无线波特率的大小即传输速率的大小，无线波特率越大，传输消耗时间越小，相应的传输距离越短，反之则越远。最终的通讯距离，在排除外在因素的情况下，可以从无线发射功率和无线波特率这两个参数评估
## 二十一、备注说明
### 射频驱动移植
1. 需要将文件夹`radio`中的API全部移植，与硬件相关的已全部定义在`radio/myRadio_gpio.c`中，若目标平台也是C语言环境，将文件夹`radio`中的文件拷贝过来后，只需对应的修改`radio/myRadio_gpio.c`文件中的GPIO定义既可，由于`myRadio_gpio.c`中用到的GPIO是宏定义在`project/board.h`，所以也需要将`radio/board.h`中的定义移植过来。如果MCU平台也是相近的，只需修改`project/board.h`中对应的宏定义即可。
2. 本公司为了统一demo程序，将射频相关的操作重新定义了一层，详见`radio/myRadio.c`，无线应用开发，可以参考借鉴。
### 射频芯片驱动IO口说明
驱动IO口均定义在`project/board.h`中
 1. BOARD_GPIO_SPI_CLK
 2. BOARD_GPIO_SPI_MISO
 3. BOARD_GPIO_SPI_MOSI
 4. BOARD_GPIO_SPI_CSN
 5. BOARD_GPIO_SPI_GPIOA -> 直连射频芯片的`RST`引脚，上电初始化需要用到
 6. BOARD_GPIO_SPI_GPIOB -> 直连射频芯片的`IO1`引脚，用于接收芯片操作的中断响应输出指示，本工程该引脚用于做发送接收中断响应指示，用户可以配置中断映射功能
 7. BOARD_GPIO_SPI_GPIOC -> 直连射频芯片的`IO3`引脚，用于接收芯片操作的中断响应输出指示，本工程该引脚未使用，用户可以配置中断映射功能
 8. BOARD_GPIO_SPI_GPIOD -> 直连射频芯片的`busy`引脚，用于检测射频芯片工作状态是否忙状态，
 9. 其他IO口未使用，可根据实际情况移植
### 无线应用开发注意事项
#### 无线频率
1. 避免使用中心频率为射频芯片使用的晶体频率整数倍的，比如晶体频率为32MHz，就需要避免使用`448MHz`的中心频点
#### 驱动调试
1. 首先保证SPI通讯正常，具体SPI时序需根据射频芯片要求设置，可通过示波器或者逻辑分析仪进行硬件分析
2. SPI通讯正常后，进一步调试查看寄存器操作，读写寄存器，若能正常操作，基本可判定移植成功了
#### 通讯距离
影响无线传输距离的因素
1. 无线电频谱，包括使用的无线频段和无线波特率
2. 发射功率
3. 天线增益，不同增益的天线对无线信号的接收效果影响很大
4. 路径损耗，主要是包括无线使用的周围环境，比如楼宇、树木山峰遮挡
5. 其他的无线信号干扰
## 二十二、软件开发
### template Version
    V04
### 工程文件架构
```c
..\adapterBoardDriver_xxxxxxxxxxxxxxx_Vxx
├──app \\常用应用模块封装
|  └──
├──core    \\MCU内核文件
|  └──
├──STM32F10x_FWLib \\MCU官方库函数
   └──
├──image   \\md文件显示用的图片
|  └──
├──keil_v5 \\keil编译器工程文件，包含编译生成的HEX文件
|  └──Object  \\编译生成的HEX文件在此文件夹
├──peripheral  \\项目用到的MCU外设
|  └──
├──project \\项目的主函数和GPIO定义包含文件
|  └──
├──radio   \\射频底层驱动文件
|  ├──myRadio_gpio.c  \\射频驱动接口硬件初始化
|  └──myRadio.c   \\为无线应用通用封装API
```
### 无线应用通用封装API-radio/myRadio.c
1. **初始化**-`void myRadio_init(int agr0, void *agr1_ptr)`
 	射频芯片驱动IO口初始化-`myRadio_gpio_init()`
 	射频基本参数初始化
2. **射频运行底层执行API**-`void myRadio_process(void)`
 	放在while循环中执行
3. **射频进入休眠API**-`void myRadio_abort(void)`
4. **获取无线中心频率**-`uint32_t myRadio_getFrequency(void)`
5. **设置无线中心频率**-`void myRadio_setFrequency(uint32_t freq)`
6. **获取发射功率-**`int8_t myRadio_getTxPower(void)`
7. **设置发射功率**-`void myRadio_setTxPower(int8_t power)`
8. **获取无线波特率**-`uint8_t myRadio_getBaudrate(void)`
9. **设置无线波特率**-`void myRadio_setBaudrate(uint8_t br)`
10. **进入数据包发射模式**-`void myRadio_transmit(rfTxPacket_ts *packet)`
11. **进入数据包接收模式**-`void myRadio_receiver(void)`
12. **无线特殊模式功能**-`void myRadio_setCtrl(controlMode_te mode, uint32_t value)`
 	单载波发射功能，预留
 	进入direct模式，预留
 	连续调制波，预留
13. **射频中断回调函数**`void myRadio_gpioCallback(uint8_t index)`
    外部中断检测定义在`myRadio_gpio.c`
14. 其他，官方未定义，属于第三方定义的常用API，不同厂家的射频方案不一定都能用
### 版本更新
#### V04

## 二十三、免责说明
1、本工程驱动软件只提供做演示项目使用，未经过大批量项目验证，客户需谨慎使用，如果使用在正式项目中引发的所有问题，本司概不负责。使用过程若发现任何问题，可及时与本司相关人员联系。
2、本工程所有文件可以用于商业性项目移植，无需向本司申请。

