中级会员
- 积分
- 215
- 金钱
- 215
- 注册时间
- 2016-8-3
- 在线时间
- 83 小时
|
关于数传,玩无人机的同志应该不陌生。大家自行淘宝,我简要说说编程思路和编程目标。 目标:设备(串口数据)--> 自制的板子1(串口中断接收,NRF发送所收到的数据)-->自制的板子2(NRF发送所收到的数据,串口中断接收)-->设备(串口接收),数据处理或发送给上位机处理/显示。
以上就是目标,我详细说说。
设备可以是任意的板子,我所用的是APM2.8(自行淘宝),通过其蓝牙接口发送Mavlink数据链的数据和上位机通信。同时,上位机返回相关的Mavlink数据应答包和数据包。
自制的测试板使用的是stm32f103c8t6,nrf,oled,,,,两板相同,任意的板子都可以,只要能使用nrf就行了,编程思想是相同的。
综上所述:我们需要实现的就是 板1任何时候收到任何串口数据(DMA),而后通过nrf发送出去。与此同时,板子任意时刻通过nrf收到数据,而后通过DMA功能将数据给串口。就相当于一个将有线换成无线的传输媒介。这个功能可是能用来实现stc15/12/11的单片机实现无线下载的哦,,,,当然还包括无线对传文件,聊天等任你想象。。。
接下来,通过系列截图(工程不是为数传实现的,懒得单独拿出来,见谅。。。),将程序以及测试结果呈现给大家。
首先是构造一个好的数据结构:
当然,构造完后,是时候在main中初始化。
接下来,是核心了,不怎么解释了,看了数据结构,相信大家想到了队列。没错。设置一个缓冲区,两个指针分别指示收到数据的位置和发送数据的位置。
当然,以上还没给出接收数据的代码。这是放在串口ISR中对数据结构进行了赋值和判断。
以上基本把板1给大概OK了,板2和板1差不多,不过,它们间有一个很大的区别。
所谓的全双工是伪的。必须由主机部分发送一个包(含数据/空包),具体请见我的其他帖子。
因此,发送部分和接收部分的核心代码就有了些许区别,这就麻烦各位看代码了,我就不多说了。
最后,我把两个工程附带给大家吧,但是,这不是专门给数传的工程。。。还没腾时间处理,大家就自行分离代码吧。。。
测试数据给大家看看。。。
最终,附上源工程。
有问题,有建议,欢迎大家拍砖和点赞。
|
|