day02
00-FreeRTOS-中断处理脚本使用说明
00-FreeRTOS-中断处理脚本使用说明
这个呃来吧,各位给大家说一下,就是我们这回到底怎样去处理福瑞RQS那俩中段就能够避免每次都重复的去处理它了啊。
呃,大家注意观察一下这个,但是但是这个仅限于就是大家使用EIDE这个插件呃,EIDE这块呢大家注意观察一下啊,你看在它的这个构建配置里边构建配置,也也就是编译是吧?哎,然后找找到这个构建器选项同学啊,呃,你看他这儿是不是有一个用户自定义任务啊,对吧?用户自定义任务里边呢,你可以添加什么呢?就是构建前任务和构建后任务啥意思呢?啥叫构建前,就是在我点这个按钮的时候,它会先执行这个构建前任务,然后再去执行实际的编译命令。哎,然后呢,编译完之后是不是还要去执行一个构建后任务啊,对吧?所以我昨天晚上就想了想,我能不能直接让他在这个构建前检查一下我的那个IT文件里边有没有咱那个重复定义的函数,有的话直接让他给它删了就行了。大家能理解这个道理吧。哎,所以昨天晚上呢,我就让那个AI让让GPT给我写这个脚本,然后呢咱直接把它添加到这里边来,其实就行了,就能实现这个咱们想的效果了。
这样一来,你每次重建代码之后,你就啥也不用管你上来,你直接编译就行。你一编译的话,他就算那边QMS自动生成了,是不是也会通过这个构建前任务给咱们删除啊,对吧?哎,就这么个逻辑,非常的非常的这个优雅呢,对吧?接下来给大家说演示一下,就是这个怎么去使用啊?好,我先把那当然这个就咱就没必要去那么折腾了。对吧?你要用删除的这种方式,我还用每次我还用去拷贝那个什么freeROS给咱们提供的那个源码吗?同学是不是就不需要了呀,对吧?这些就不需要了啊,不需要了。那所以说呢我现在呢就先把这些东西先给它部部除除,咱们就模拟一个这个实际的这个效果,这个是不是正常情况下每次重新新成代码之后,应该是这样的呀,对吧?好,同样道理,另外一个其实也是一样的啊,呃,这个咱们也是给它删掉,我恢复到原样OK大家一会儿做的时候也可以。
呃,嘿不是不到这,你看到这儿吧,对不对?这是不是他那个代码的原样啊,对吧?前面那个东西也是没有的,对不对?那然后呢,这回我需要进到哪儿呢?需要进到咱们那个呃callINC找到这儿。完了之后呢,咱把这个是不是得放开呀,对吧?同学哎,就是原来咱们在上辅月二十课基基础课的时候,当时怎么处理呢?你就还怎么处理就行了啊,只不过呃之前我们是手动的去把这俩函数是不是给它注掉啊,对吧?那这次让脚本帮我们删除啊。OK好,那接下来呢先给大家演示一下目前存在的问题啊,我直接编译。呃,这编译的话呢,肯定会提示我是不是这儿会有重复定义啊,对吧?哎,好,所以接下来呢给大家演示一下啊,这个脚本呢一会儿我会发给大家的这是一个powershell的脚本啊OK好,那现在呢controlc拿过来拿过来之后呢,我放在哪儿,我就随便你就随便找个地方。呃,我就建议大家呢直接放在咱们这个项目的根目录就可以啊。好,这是不是就是我这个项目的根目录啊,对吧?你就直接controll以拿过来,呃,直接点击粘贴啊,粘贴完了之后呢呃不要呃,其实也可以手动执行啊,其这这脚本也能手动一执执行的啊OK好,手动执行,其实它也会给你自动去删除。但是咱没必要啊。好,那这个是咱们当前的函数,然后大家需要注意的一点,就是啊呃这个路径呢,这是谁?这是不是就是咱们那个IT文件的路径啊,对吧?它是一个相对路径啊,相对于谁,相对于我这个文件的路径,所以大家呢你要注意一下,如果这个文件你没放在这个项目的根目录,那这个路径是不是记得改一下啊,对吧?你得能够让他找到,就是你要修改的那个文件啊。好,那完了之后呢,这个就是一些shell的呃语法了啊的语法。那这里边是读这个文件的内容啊,然后呢,这块儿是在寻找,就是我让他删的这俩函数嘛,对吧?proshok然后下边呢往下翻,如果找到了之后呢,他就会删除。如果没找到,因为因为举个例子啊,你第一次用QMI的生成之后需要删除。但是你第二次再编译,因那个编辑前的务是不是还会执行啊,对吧?还会执行,就不能再让它重复删了,对吧?因为没有了,所以找不到的话呢,就会提示你,没有找到目标函数文件未做任何修改啊,所以这个脚本大家拿过去直接用就行啊。呃,OK这也不是我写的,我也是让这个GPG勾写的啊呃这个来吧。那接下来我们往下进行呃,往下进行。因为你这玩意儿,你要自己写的话,这个你得学它那个shell的语法对不对?这个没必要啊,那没必要。行。那接下来呢给大家看一下,就是这块怎么找呃,怎么怎么配啊,来我们找到EIDE,然后呢找到这个呃构建配置,对吧?然后后下翻找找这这关键词选项,然后呢找到用户任务,然后呢我们找到构建前任务这块儿,你可以给呃任务起个名字啊,我比如说我就叫free二tos那这个呢叫做中断处理吧呃,处理啊。好了,那完了之后,这一块就是你要执行的那个命令了,对吧?那我们现在要执行的命令应该是啥呢?
是不是就是执行咱们当前的这个项目的呃,根目录,这下下边的这个脚本呀,对吧?
所以这边呢呃怎么去执行一个proshed脚本呢?这么执行power,后边跟上一个呃POWIPOWEL对SHEEL后边呢跟上一个杠fill杠fill,后边呢指向你那个shell脚本就可以了啊,我这个脚本的名字是不是叫做这个呀,对吧?咱们直接复制一下同学我叫做interrupthandle呃,handler,对吧?是不是就是专门用来处理这个呃这个这个这个中断的呀,对吧?哎,好,拿回来就这么写一下就行。这个注意啊,这也是其实说白了,这也是也是一个什么命令,也是一个这个这个这个什么什么路径啊,相对路径,它是直接在根目录下边去找啊OK所以说我们就放在根目段了,直接这么解说就行了,对吧?好,那完了之后,下面还有选项disable,就是你将来不想用了,你直接disable就行,你不用把它删了啊。好,第二一个呃abortiffield,就是如果这个命令失败了的话,那是不是直接就apport呀,对吧?那然后呢,这个是直接就怎么着的,直接失败了。如果这个任务失败了的话,那就直接stop他们不用管,咱们用默认值就行,然后一定要记得保存一下。哎,保存。那这样一来我们每次去编译这个项目,它编译之前呢都会去执行这个脚本的逻辑。好,注意观察。刚才我编译是不是有问题啊,同学那我这次我再编译走简易。好,哎,你看首先他这是不是已经给咱们打印出来了呀?说这个福瑞RTS中断处理已经完成了,对吧?目标函数已删除,对不对?
那接下来我们再回到这个IT里边去看一眼,你就会发现它就确实是已经删掉了啊。来点进来,哎,你搜这个pen的SV哎,应该是没了啊,有的话,他是不是也编译不过呀,对吧,是不是没了呀,对吧?只有这个注释了啊。好,那这样一来的话呢,咱是不是就可以随意的去这个生成这个新新的这个呃这个这个这个代码了呀,对吧?都无所谓了。哎,行,那这个脚本呢我发给大家啊,完了之后呢,呃大家呢就你现在要想着急配的话,可以配上啊。呃,这样我再把我刚才的这个命令也一块儿给大家发过去啊,呃在哪儿也在在这个这儿,然后呢找到构键器选项找到他和他。因为昨天昨天晚上我备课,实在是生成了之后,重新改这个东西实在是太麻烦了,不想不想再改了,然后就想了起来,这样还行,没啥太好的办法了。就呃然后呢我把这个命令给大家发下来保的来配置。嗯,行,那这俩东西呢我一块儿发给大家啊,大家上一下非丘上下非丘,我直接直接通过这个非球全局发,或者我放我共享目录里,大家自己下一下得了啊,有有因为有些可能没登上啊。行,我放在共享目录呃,笔记无人机,我就放在咱们今天的这个视频的目录里嘛,d零二电零二里。哎哦哦我这录着视频呢是吧?嗯,行行,我停一下。

01-无人机-飞控项目-通信任务-SI24R1-简介
01-无人机-飞控项目-通信任务-SI24R1-简介
嗯,好了,各位同学,那接下来呢我们就一起来呃,看一看咱接下来要做的具体内容啊,呃按照我刚才的分析,我们这块儿是不是要先做一下这个通讯任务的,相当于是接口层啊,对吧?啊,这个接口层呢,其实主要就是呃实现一个什么操作呢?实现一个就是呃无线通信就是这么一回事啊。其实大家看我这个画的这个结结构图其实也能够看出来啊,我们这儿的无线通讯呢,其实使用的是一个什么?是一个SI二四r幺这样的一个二点四g的无线通信芯片,对吧?呃,首先需要给大家说明一点,就是这个SI二四二幺呢,它实际上是一款国产的芯片,它仿的是一款国外的专门做二点四g通讯的芯片,这个仿的挺彻底啊,就是它里边的各种结构寄存器啊指令命令啊等等,这些基本都是一样的啊,所以说你你基本就是一一回事,只不过这个就相对来说要便宜一些啊OK好,然后一会儿再给大家介绍,就是它怎么去使用啊。然后你先看我这个图应该能够看出来它的一个核心的使用逻辑应该是什么样的呢?就是我们应该是怎么着呢?需要通过,是不是SPI接口,对吧?跟这个无线无线通信芯片是不是进行通信啊,对吧?比如举例子,我要想发送什么数据,那你需要通过SPI将数据是不是给他,对不对?然后他是不是就会自动将这个数据转化成无线电信号,然后是不是发出去啊,对吧?
哎,那同理,你要是接收的话也是一样的那接收是不是也是由他去接收这个无线电信号。对吧他接收完之后呢,会去对这个信号是不是进行解析?解析完了之后,那我们的单片机要想读怎么读呢?也是通过一个SPI接口去读,这是不就是它的核心的使用逻辑啊,对吧?啊,所以无线电通信对于我们来讲确实挺挺难的啊,如果是真是让你去自己从从头去实现无线通信,那太麻烦了,你你得懂很多的物理常识,对不对?咱们那个电磁波怎么去传输数据啊等等。这个太太太麻烦了。所以咱们正常不可能呃这么做啊,所以一般都是用这种呃成熟的芯片啊,然后呢我们只需要通过简几个简单的SPI命令OOK能够实现这个无线数据的收发了啊,其实起起还是比较简单的啊。好了。那所以接下来的同学,我们呃首先要做的应该就是干啥呢?是不是得去学习一下,就是这个芯片,咱们到底如何使用了,对吧?啊,虽然用起来简单,但是你至少也得知道啊,比如我想发数据,那咱应该通过SPI给他发什么样的命令,对吧?我想读我应该是不是发什么样的命令,是不是得把这些事搞不清楚啊,对吧?啊,所以接下来呢咱们先去学习一下这款芯片的用法啊啊这个芯片咱去哪找的同学啊,咱应该去找这个是不是资料,资料里边有一个二点四g通讯,对吧?哎,好,然后大家可以看到啊,这里边呢给大家提供了两个数据手册,一个是简单版的,呃,里边呢非常简呃就是内容他他他说做了做了删减啊,就是非常简陋啊。那我们正常就看这个就可以啊。然后呢,大家就观察上边呢,还给大家提供了两个安装包,这俩安装包是啥呢?这是从网上下载的,就是这两个,这这个就是咱们当前用的这款芯片,它的一个通用的驱动。也就是说一会儿咱们用它的时候呢,我们其实可以直接把这个人家提供的驱动给它移植进来啊OK好,然后需要大家说注意的一点,就是你看这有俩包对吧?一个是SI二四二幺,这个是我们目前使用的这款对吧?然后另外一个是啥呢?NF二四l零幺,这个是啥呢?这个实际上就是它所仿的外国的国外的那款芯片啊OK好了,那当然一会儿我们用的时候呢,用这个就行啊OK但是一会儿你就能发现,其实就是他给提供的这个官方的驱动里边呢仍然有什么呢?这个的影子啊,就是里边还有一些注释,还带着它的名字呢,所以这俩通驱动基本上都是通用的。这个大家注意一下就行,别的不多说。那接下来呢我们打开它的数据手册,咱们只能是照着数据手册去学习的啊,来吧。那现在我们打开呃,不要打开这个briefbrief,是不是简单的意思啊,对吧?我们找下边这个SI二四二幺幺。好,那现在呢我们回到最开头啊,来咱们从头开始学习啊,来我们看目录吧。呃目录。首先我们看一下这个简介,看一下简介啊。呃然后呢呃这里边可能会就是遇到一些特殊的概念,大家不知道啥意思,咱们没不不用呃,不用着急,慢慢给大家解释就行了。首先我们从第一句话开始啊,他说SI二四二幺是一颗工作,在二四四g赫ISM频段段专位低功耗无线场合设计的集成了嵌入式ARQQ带带协引擎擎无线收收器器芯片。呃,这这里边就是短短的一句话,里边是不是有太多,咱们不太知道的这个概念了呀,对吧?
啊,OK好,没关系啊,那我们先明确出它的定位,这是一款无线电收发器呃,收发器对吧?也就是说,这款芯片是不是既能收又能发呀,对吧?那所以说在我们这个项目当中,我们的无人机上,还有这个遥控上边各有一颗这个芯片啊,遥控用于发。哎,无人机上那个用于收啊,它是既能收又能发这一点要注意啊。好了,那接下来呢再给大家说一下,那前面也给大家讲过,就是无线电通信,它靠的是什么?靠的是所谓的电磁波对吧?电磁波。ok好,那大家都知道这个电磁波呢它是不是有频率啊,对吧?那一个一个波儿它的特征都有什么呀?大家大家能想起来一个波的特征,它有什么有频频频率,没频频率,应该大家理解这个事儿,对不对?那还有什么呢?还有振幅对它还有一个特征是它的振幅,这叫它的振幅大,这是不是叫它的振幅小啊,能理解这事吧。同学啊ok好,那然后我们现在讨论的这个二点g赫兹指的是这个电磁波的什么呢?是频率啊。ok啊好了,那实际上大家都知道,就是呃其实除了就是咱们这个无线电通信会用到这个电磁波。
你像我们生活当中的,我们见到的光线,其实本质上也是啥呀,也是电磁波,只不过就是他们的频率是不一样的,频率不同,我的这个可见光的范围其实呃呃频率不同,我的可见光的颜色是不是不一样啊,对吧?这个大家还还有印象吗?嗯,哎甚至一些最高频的这个电磁波,就是可能不知道有没有没记得啊,就是那个伽马射线,其实也是电磁波啊啊,就是其实这些东西都是电磁波,只不过就是他们的频率不同啊,这一点大家都要注意啊,然后需要给大家说明的一点就是啊既然这个电磁波有这么多的频率。那所以说国际上呢就会对这个电磁波的频率啊去做一个呃划分啊,ok不同频频段的电磁波只能用于什么呢?特定的用途啊只能用于特定的用途啊,你像呃我们目前所使用的这款二点四g赫兹,那它它的用途是什么呢?它的用途就是ISM这个ISM是什么?其实这个东西你一搜你就能搜出来,咱们可以去看一下啊,给大家看一下。呃,你就搜ISM频段就行,直接回车。呃,你看这儿有一个维机百科,对吧?它那对它进行解解,解释了,咱们可以简单看一看啊ISM频段。呃,它的中文意思是什么呢?是工业的,也就是industrial,对吧?科学的scientific和医学的medical是不是就是工业科学呃,医医还有医学对不对?就是在这个呃领域里边,我我们是不是可以使用这个二点四g赫兹的这个频段呀,对吧?那至于其他频段那都用在什么呢?呃,这个一会儿你要是感兴趣可以可以搜一搜啊。呃,有一些比如说是专门用在核潜艇的,有一些是用于广播的啊,有一些呢是用于这个呃这个什么什么对讲机无线电通讯的等等,乱七八糟的,非非常非常细啊,这个划分的啊OK那当然呃每每个国家它它的划分可能也不太一样。这也跟大家简单了解一下就可以了啊。好了,然后为什么咱们这是用这个二点四g呢?其实人这后边也说了啊,他说了这个呃,我们看一看哪儿呃,呃,看这儿同学看这儿啊,他说应用这些频段无需许可证,或者是费用。就是说如果你使用这个SM也就是二点四g赫兹啊OK你是不需要任何的许可或者费用,你可以随便用啊OK只需要遵循一定的发射功率啊,不要对其他频段频段造成干扰机子能理解,这是吧?那所以你看这儿也说了啊,我们日常生活当中的无线电局域网,也是咱们那个wifi,对不对?你像蓝牙等等的,他们都其实是可以公布在二点四g频段上的,但是目前的wifi它处理有二点四g是不是现在也有五g了呀,对吧?啊,注意就是wifi里边的五g是不是跟我们就是呃手机信号那个五g它不是一回事吧吧,k大家一定要搞清楚啊。OK首先二点五g是不是那个既是generation的意思?就是第五代,对吧?然后然后这个wifi里边五g呢指的是是是咱们那个无线电那个呃那个无呃电磁波的那个频率是五g赫兹的OK这一点一定要注意啊。行了,那这就是ISISM频段的这个意思啊,这一点大家要搞清楚啊。好,然后后边呢还有一个概念叫做专为低功耗呃,无线场合设计。呃,一会儿其实咱们看它的这个芯片的工作模式,我们就能看出来,它其实是确实支持这个低功耗模式了。好,那这个咱们一会儿来看啊,所谓低功耗模式是啥意思呢?如果我有数据需要去进行收发。好,那我是不是就进入就是全副武装的这个状态呀,对吧?
正常的工作状态,如果我现在不需要收发数据,我是不是进入低功耗状态呀,对吧?就这么个意思啊。好,那接着往下走,后边还有一个概念,可能咱不太理解这个叫啥呢?ARQ基带协议。ARQ这是一个传输协协议啊,同学ARQ是啥意思呢?呃,我记得这个手册前边是有一个表格的。
你看人家这块是不是有对一些术语的描述啊,对吧?ARQ第一个就是ARQ它的意思是啥呢?是autorepeatrequest,是不是?就是自动重传请求啊,对吧?就是啥意思呢?我们当前的这款芯片呢,它支持这样的一个操作啊,因为它是收发器嘛,对吧?比如说这边发送送端,这可返发送端。哎OK好,那那现发送端端接收端。比如说发送了一条信息,哎,发过来了。好,那这个时候啊,同同学这个发送端,他他了了,保这个个数据成功的发送到这个接接端。好,他要求什么呢?他可以求求就是我这个接收端怎着着同学给他返回一个,你觉得应该返回个啥东西啊?哎,对,ACK啊好了,那这个发送端呢收到这个ACK之后才会认为我上一条数据发成功了。如果在他规定的时间内,他可以配置操作时间。在规定的时间内,如果没收到这个ACK好,那他就会认为上一条数据发失败了,发失败了,它会怎么着自动的重新发送上一个数据包,能理解这个事儿吧。同学ok好,然后这是不是就是一个所谓的自动重传呀,对吧?这个自动重传或叫做自动重发请求。这个东西完全是由他内部的这个硬件,实现了,我们无所稳,无需干扰,稳不无需干扰。你只需要告诉他,我要发什么就行了,然后他就会确保这条数据顺利的发送到或者成功的发送到接收方能理解事儿吧。哎,这是他所提供的一个非常不错的一个功能啊,这点大家理解一下。哎,好了,那现在这句话大家应该基本上是能够理解了,对不对?好了啊,那接下来我们往后看,同学后边又提到了,说咱们这款芯片,它的工作频率的范围是什么呢?是呃,两千四百兆赫兹到两千五百二十五兆赫兹啊,你看啊这是不是差不多,就是二点g赫兹的这个这个这个这个范围啊,对吧?对不对啊,二点g这注意这个是兆嘛,对吧?兆,你乘个十呃十的三次方不就是g嘛,对吧?哎,这点大家注意一下就行了啊。OK好,那所以说呃它具体的工作的频率范围是这么多。然后这也提到了,它说它一共有多少呢?一共有一百二十六个一兆赫兹带宽的信道就是啥意思呢?这句话怎么理解?同学这句话怎么理解?哎,其实很简单,同学它是这么一回事啊,就是说咱们这款芯片呢呃它支持的这个电磁波的频率的范围是哪儿呢?是从两千四是不是到两千五百二十五啊,对吧?但是它实际工作的时候呢,就是我在给从比如说这是发送端,对吧?这是接收方啊呃TROK好,那它俩在传入数据的时候呢OK它可以选择这个范围当中的任意一个频率,能理解这事儿吧。同学ok一共有多少选择呢?一共有这样的一百二十六种选择,那分别是多少呢?我可以以两千四百兆赫兹的这个频率去发送数据。我也可以以比如说两千四百零一兆赫兹的这个频率去收发数据。我也可以以两千四百零二兆赫兹的这个频率去发收发数据,大家能理解这个事吧。啊,那当然呢你在呃去呃呃选择这个频率的时候啊,同学具体的工作频率的时候,你的收你的发他俩是不是必须得统一啊,同学哎,是这样的啊,这是不是就是是所谓的这个有一百二十六个信道啊,对吧?你可以算一下吧,对不对?所谓的一百二十六个信道。那以后同学大家想想在咱们这个教室里边,我们是不是每个同学人手都有一套这个东西啊,对吧?咱们自己再去呃做这个相关的测试的时候,那我们每位同学是不是必须都得选择不同的这个工作频率啊,对吧?也就是选择不同的什么不同的信道嘛,对吧?啊,一百二十六个应该也够咱们用了。如果说你要是两个东西用的是一样,你俩之间是不是就相互干扰了,对吧?你a发的b能收到,b发的a也能收到,是不是就会乱了呀,对吧?那这一点大家要稍微的注意一下啊,同学这就是所谓的信道的这个概念啊OK好,这一点大家理解一下啊。好了,那我们接下来继续往下进行。后边呢是说说它内部集成了一个LDO电源,它可以保证这个宽电源范围的一个稳定使用。这个无所谓啊。好,接下来我往下走,我们再看第二段话,这样的话又会遇到一些不太理解的东西啊。他说,SI二四二幺采用GFSK和FSK数字调制与解调技术。呃,来我们先把这个基础概念普及一下啊,首先我们先得搞清楚什么叫做调制和解调同学什么叫调制,什么叫解调啊呃调制借条呃,其实大家生活中就降这玩意儿,大家家里都装过这个宽带,对不对?哎,宽带是不是会有一个什么东西,是不是有一个所谓的光猫啊,对吧?咱是不是管它叫光猫,对吧?
那个猫那个猫是怎么来的?那个猫实际上是从它的英文名字来的啊啊,modify对吧?呃,应该是那个单词吧,我也忘了读怎么读了啊,但是开呃,那个首字母是m啊。ok好,那其实那个m就是啥意思?就是调制的意思,调制解调器,就是那个光猫啊,那在我们的家庭宽带当中,那个光猫那个所谓的调制解调器,它的作用是什么呢?它的作用是不是就是将你的一般现在我们都是光纤,是不是传播这个这个信号了呀?对吧?OK它将你的光纤信的里边的光信号能理解吧,给你所谓的解调成什么呢?
解调成是不是我们能识别的数字信号啊,对吧?好,那反过来,你要是想通过这个呃你的宽带往外边发送出去,那你需要先怎么着?先把你的数字信号是不是还得调制成,是不是这个可以在宽带里呃,在那个光纤里边传传播的那个光信号啊,能能理解个事吧。
同学,这就是所谓的调制与信号啊,总结一下所谓的调制呢,就是将你的数字信号给它,是不是说白了就是给它,你可以理解为就是呃转化成呃,是不是可以在其他的这个介质当中传播的信号啊,对吧?OK好,那对于光纤,那你你是不是就是那个那个那个相当于是光线信光信号啊,对吧?OK好,那对于我们这个无线电呢,无线电通信的时候,你是不是也要先把你的数字信号调制成什么?是不是无线电信号啊,对吧?哎,那反过来在你接收收到这个无线电信号之后,你还要干啥,你还要做解调,对不对?你再把它怎么着,是不是解调为所谓的,是不是数字信号,大家能理解这个道理吧?哎,好了,那这样一来是不是我们的呃,MCU对吧?我们单片机是不是就能够跟这个芯片是不是进行通信了呀,对吧?呃,因为咱们单片机是不是只能识别这个数字信号,对吧?呃,它识别不了这个无线电啊OK这就是所谓的调制和解调啊。好了,完了之后,我们再来看一下前面这个概念GFS和FSK是什么意思呢?呃,这个你要不知道的话,其实前边这个表格里也有说明啊,在这儿呢,这是不是那个所谓的GFSK或者是FSK啊,对吧?这是啥意思呢?这个这这是高斯的意思啊,高斯什么东西呢?frefreenck是什么意思?频率的意思对吧?ok好,那完成之后shift是什么意思呢?呃,移移动移频对吧?然后q就是这个东西,咱们是不是连起来,我考完每个单词我都知道啥意思,但我连起来不知道啥意思,对吧?那翻译过来之后,也不知道啥意思。高频呃,高斯移频呃,频移监控,对不对?在这是读起来很拗口。呃,所以这个东西呃我就给大家说一下它的作用是什么就行了啊。首先大家要搞清楚一个这样的问题,你要想通过无线电信号,通过电磁波传输数据,对吧?同学,你得思考一个这样的问题,就是我怎么让这个电磁波去携带数据呢?比如举例子,我想发个一零一零一零一零,是不是因为我们数字信号本质上是不是还是一零一零零啊,对吧?
我怎么把这样的一段数字信通过无无电波波,也就是电磁波对吧?怎么通过它传播出去呢?就是怎样让这个呃电磁波承载我这个信息说白了就是这么一回事,这个大家有没有什么思路啊?比如说这就是一个无线电的一个电磁波啊。好,我怎么让它去表达零或者是表达一呢?这个是不是好像不知道怎么搞啊,对吧?它不像我的数字线杠,我有高低电瓶,我可以表达零一,对吧?
你这个无线电波,你怎么表达零和一呢?两种最简单,最好理解的方式就是什么呢?一个是通过调整这个电磁波的频率来传输我这个信息。因为前面讲过啊,一个电磁波它的这个特征就是啥?咱们能理解的有频率是不是有有这个振幅啊,对吧?那所以说你要想让它表达出不同的信息,你是不是除了就是调整它的频率,就是调整它的振幅啊,对吧?就是还有一种方式就是调整它的相位啊,那这个咱们就不过多的介绍了,我们就了解这两种方式就行。先说振幅,比如说我振幅大了,对吧?我就认为这个传输的是什么?是一对吧?我振幅小了,我就认为我传输的是零。当然你这个振幅的大小这个东西呃,谁谁谁谁跟谁会去解决这个事儿了,是不是调制和解调它们俩会统一的去协调这个事儿啊?对吧?哎OK好,他认为我发的时候,呃,我发的时候,我认为呃振幅大的就是一振幅小的就是零。但你那收的时候候是不是得按照这个逻辑去去解析啊,对吧?不就这么个逻辑嘛,哎,这是靠什么呢?这叫靠振幅来传达我这个数数据。好,那还有一种方式,那就是通过调整过这个频率调整我这个频率啊,比如说我频率快快点儿OK这叫频率快,对不对?同学好,我就认为我传的是一,那我频率慢一点。哎,好,那我就认为我传的是零,大家能理解这个事儿啊,呃这就是所谓的就是呃这个这叫什么呀?这叫移频监控啊,还有一还有还有控制咱们那个幅度的那种方式啊,呃这个所谓的移频监控呢,就是什么意思?
就是通过控制这个电磁波的频率来传输这个数据啊,就是这么一回事啊。好了,那这一点大家注意就可以了啊。好,那当然有同学可能会说了啊,不对呀,不对呀,你控制频率,那我这个是不是会出现问题?因为我这儿是不是规定了,就是我一共有一百二十六个一兆赫兹的这个带宽啊。那你举个例子啊,那我不是必须得工作在这个频率才行吗?就是我我我我同一个信道,大家能理解这个呃呃呃,是不是有可能会这么想啊,对吧?那我要控人的频率去传输零一,那我是不是可能会干扰到其他的这个信道啊?有有同学会有这种疑问,对吧?有这种疑虑,其实不用担心啊,同学你要知道的是你这个带宽是什么?
是一兆赫兹啊,对吧?相当于说我一个信道,我的实际可用的这个频率的范围是多少到多少呢?比如说是二四零零兆赫兹到多少?二四是不是九九九九九九九赫兹啊,大家能能想明白这个事儿吗?就是兆后边是不是跟了十呃,跟了这个十的六团跟了六个零啊,对吧?那实际的频率范围是不是从这儿到二十四后边跟一大堆的九啊,对吧?这是你实际的一个信道,它的这个带宽嘛,嗯宽宽宽宽是不是肯定得有宽度啊,对吧?所以它是这个范围里边,这是一个信道,所以说那它在在这一个信道里边,这个频率是可以随便用的。所以说在这一个频呃一个信道里边边,对吧?比如说我高频呃,对吧?高频比如说接近二四九九九九,这就是的高频嘛,对吧?哎,好,我代表是一,那我接近二四零零零啊,好,那我传的就是就是零了,对吧?哎,大概是这么一个意思了啊,就是大家体会一下就行了。OK好,这就是所谓的GFSK和FSK啊,这个大家稍微再调呃理解一下就行了。总总之呃,明确一下,就是我们这款芯片呢,它是通过调整什么调整电磁波的频率是不是来表达我这个数据的呀。对吧?哎,这一点注意就行了啊。好了,然后传输的过程当中呢,他说可以支持这个速度的调节支持这么呃几种这个传输速率啊,这个了解一下就可以啊。行,这个咱们就不再看其他的了。然后呢,我们往下翻看还有没有什么咱们需要不了解的东西啊,呃这个是关于它低功耗模式的一个介绍,对吧?
哎,这个咱就不多说了。然后呢我们往下看,哎,这儿有一个哎操作的一个基本逻辑。这儿提到了,他说SI二四二幺操作非常简便,只需要我们的单个耳机通过SPI接口对这个芯片少数的几个寄存器进行配置即可。实现数据的首发通信,这是不是就是它的核心使用逻辑啊,对吧?我们刚才其实也已经提到了啊。好,然后再往下走。这边呢他说呃集成了这个ARQ这样的一个自动重传请求,对吧?这样的一个通信机制啊,所以说呢是支持自动重发的,所以这个呢也是大家呃了解了,这个咱就不多说了啊。好,然后我们再往下走啊,他说这个需要非常低的系统应用成本,只需要一个单片机和少量的外外电路啊,然后呢就可以组成一个无线电的收发系统啊OK这里边其实也有它的典型的应用原理图。在这个位置呢啊,实际上你要是想用它去做这个收发的话,持续参考它的这个应用内图就行了。我们这其实也是参考的这个啊行了。那这就是对咱当前的这款芯片的一个基本的介绍啊,然后这儿是不是还有一个它内部的一个结构图啊,对吧?啊,一会儿我再单独给大家说这个结构图啊。好,现在我们稍微的总结一下同学啊,关于咱们当前的这款芯片呢,我们需要了解的内容有什么?首先第一个唉,它是一个工作,在二点四g赫兹频段的这样的一个无线收发器,对不对?唉,好了,那它是呃具体的这个这个这个这个工作的频段是上到多少呢?是二四零零零兆赫兹到二五二五是不是兆赫兹的对吧?然后一共提供了多少个,是不是一百二十六个一兆赫兹带宽的信道啊啊,对吧?OK大家一定要理解,就是这个一兆赫兹带宽指的是什么意思啊?也就是它这一百二十六个信道,具体指的是哪哪一百二十六个,咱得得知道不是应该是二四零零零零零到二四九九九九九,对吧?然后后边再干一个啥,是不是二五零零零零零,再到是不是二五九九九九啊,对吧?哎,这是它所提供的一百二十六个一兆赫兹带宽的这样一个信道啊。好了,大家体会一下这个事啊,行了,就是这个意思啊。好了,然后再有呢就是它是怎样去呃通过这个无线电传输数据的呢,是不是通过调制这个无线电信号的一个频率啊,对吧?呃,高频比如说代表一低频代表零等等等等啊,这个其实就是无线电通讯的这个专业领域的知识了啊,还挺复杂的啊。行,呃,这个咱们理解,然后再有一个需要大家注意的就是我们在使用它的时候,咱的核心思路就是通过SPI接口是不是跟它的少数的几个寄存器进行配置啊,对吧?就完事儿了,然后就能实现收发了啊。好,然后再往下呢呃它内部有一个自动重重传的这样的一个机制啊,所以说是能够保证这个数据的安全可靠的啊,这一点要注意行了,就说这么多啊,这是对这款芯片的一个基本。

02-无人机-飞控项目-通信任务-SI24R1-芯片结构
02-无人机-飞控项目-通信任务-SI24R1-芯片结构
有呃好,各位啊,那接下来呢咱们需要再来看一看,就是他这块儿给咱提供的一个系统结构图芯片结构图啊一个框图啊,一个简图就是我们大概了解了,了解它里边都有什么结构,然后它的一个基本的工作流程是什么样的啊,来我们快速的了解一下同学。呃,首先各位啊我们现在呢先来看一下左半部分吧,左半部分其实大家能够看到啊,这两这两个东西你可以看成看成一个什么东西,看成一个模块啊,这是什么东西叫做transmitter,是不是发射模块啊,对吧?叫做发送模块。好,然后这俩东西呢你可以给它看成啊一个部分,这个叫做receiver是不是接收部分呀?
没错吧。同学OK好,然后我们来分别看一看,就是这两部分都是啥啊。首先我们看这个这是一个所谓的GFSKFSK的什么东西?这就是那个猫嘛modullator对不对啊,咱们就这么读吧啊OK好,那这是不就是那个所谓谓调制器器,对吧?好,那与之对应的这边有一个啥,是不是第modudulator啊,对吧?这是不是就是一个解调器啊,对吧?哎,OK好了,那完了之后,你注意观察一下,同学就是这个p制器也好,解调器器也好,就是它的两端都分别联接到了哪儿?我们先看这个,哎,你看它的输入端是谁?是不是这个所谓的ARQ引擎啊ARQ引擎是不是专门用来做这个就是自动重发的呀,对吧?哎,发送数据是啥的,都是由它来说的算的,要想发送一个数据OK是不是由它来发,对吧?他他要发的话,需要怎么着?先把这个数字信号给到这个调制器,是不是让让它调成调制成什么?是不是无线电信号啊,对吧?哎,OK好,不就是这么个逻辑嘛,你看这人箭头是这么标的嘛,对不对?OK好了,那完了之后,你注意连的是什么?看一看也就是它输出端连的是什么?是一个PAPA就是功率放大器的意思。因为他需要把这个呃是不是无线电信号发出去啊,出去啊,对吧?对,所以说为了让这个信号更强,哎,它会进行一个功率放大啊。好了OK那这样一来的话呢,就会把这个信号发出去。好,注意,那这两侧连的是什么啊?是两侧连的是天线啊,这个天线就直接发出去了啊。OK好,这是不是就是一个大概的一个发送流程啊,对吧?好,那解调是什么样的?呃,就是接收是什么样的呢?注意,这是不是咱们那个接收接收端呀,对吧?接收端这块呢,首先这儿连了一个放大器,这其实也是一个放大器啊,叫做低噪声,放大器啊OK好,它会去做一些这个滤波的一些处理啊OK好了,那总之它会把什么呀?那左侧是不是连接的是天线,这是天线啊。好,那它会把天线上边收到的,是不是这个感应信号是不是转换成是不是这个数字信号才行啊,对吧?OK好,那怎么转换呢?先经过它放大,放大完之后给谁是不是给这个低啊,对吧?是不是一个所谓的解大器啊,就能把收到的无线电信号器啊,哎解调为数字信号的好,数字信号就给到谁了,是不是给到了这个modumomolatataRQN这样对吧?哎,是这样的,也就是他说白了是一个专门负责,是不是发和收的一个核心的引擎啊,对不对?
发什么收收什么?他说了算啊,他来控制这个事儿啊。行了,那这个完了之后,我们再看右侧同学,咱看这右边首先看这儿这儿有个啥东西TXfaelTX是不是就发送的意思?fafoffirststeinfirstsalout这说白了就是一个什么东西,就是一个队列啊,用来做啥的,用来做缓冲的啊。OK好,那如果我们将来想要发送数据,我们不是直接把数据给它,咱们应该给谁呢?同学给这个是不是队列呀,对吧?你只需要把你需要发送的数据放到这个队列里。好,那它就会自动的从队列里边读数据。读完之后呢,是不是给到它,然后呢再给到它,然后就发出去了,对吧?哎,就是这么一个思路啊。好了,那接下来呢我们再往下看各位同学再看这儿,哎,同样的道理,这还有一个什么RXfaflsalout对吧?是不是也就是一个接收的缓冲区,对不对?同理,我现在要想接收数据的话呢,怎么着呢?你也不用直接去找它,它会自动的把收到的数据给到哪儿,是不是给到这里边啊,对吧?我们要想接收数据,我们只需要读这个fafo就行了。哎,是这样的啊。好了,那现在问题来了,同学我们怎样去读那这个fafl或者是怎样往这个fafl里边去写呢?很简单,哎,咱通过谁呀?同学SPI嘛,前面讲过咱们单片机跟它通讯的接口是不是叫SPI接口,对不对?然后这块儿呢,其实它那个SPI的四个引角啊OK好了,那完了之后,我们要想往这个肺复里写,你通过它哎就可以写进来。那读的话也是通过它就可以从里边读了。这个大家应该是能想明白这个事的对吧?哎,好了,就这么一个思路嘛。好了,那完了之后,这块表达达来的是啥呢?是一堆堆寄存器,一堆的的存器器,要想配置一些参参数乱七八糟,你需要去配置这个寄存器。当是配寄存器的话也得通过,是不是SPI接口啊,就这么一个思路啊。好了,那同学现在呢大家关于这张结构图里边呢,是是哪儿还不太了解的这这还有俩这这俩其实就是俩引角啊,各位同学这就是俩引角啊,包括这个是不是是是部的引引,这是不是也都是给咱们暴露出来的引角啊,对不对?OK啊好,这个是接天线的,这个是SPI接口这俩是啥呢?我们来看一下,先看CECE应该好理解CE是不是checkenable呃,enable对对吧?
是是就是是enenable对吧?就是说白了就是使能信号嘛,对不对?哎,你要给它置一好,那咱们这个就能够收发出去置零,它就收发不了,就这么一回事儿啊。好了,完了之后,这个IRQ不知道大家能想明白是啥意思?不房子IRQ这个是重发的意思吗?不是啊,i是interrupt的意思,r呢就是RQ就是request嘛,是不是就是中断请求啊,对吧?哎,好,有没有同学能想明白这个中断请求的作用是什么?你看它这个箭头的同学箭头指向里边的那就是你需要是不是给它这个芯片输入信号啊,那指向外边的,是不就是他给咱们外边发送信号啊,对吧?
你看这个SPI是不是也能看出来MOI是不是指向里边的?MISO是不是指向外边的?哎,没错吧。哎,好,那所以说这个IRQ它是指向外边的,说白了就是它向我们的单片机发送数据的一个引脚吧。哎,好,那大家能想明白它的使用场景是啥?不举个例子啊,同学咱现在这个芯片是不是既可以发又可以收?比如我现在收到了一条数据,收到数据,你说我单片接分得读他这个数据啊,对吧?那你怎么知道他这儿收到数据了呢?无非就是两种思路,要么就是轮询,我一直去查他有没有收到数据?是不是可以可以拿到了,对吧?可以及时的拿到好,那还有一种方式就是就是啥呢?哎,让他是不是把这个眼角接到我们单片机的一个眼角上,我们眼单片机眼角开个什么东西?你开个外部中断呗,大家能想明白这个事儿吧。哎,好,开,外部中断断了之后呢,他这儿是不是一来数据,唉,直接通过他给你的中断引角发个信号,那你当片机不就知道了吗?知道之后不就可以去读他的数据了吗?是不是也可以这样做呀,对吧?哎,两种方式都可以啊。
呃但是经过实际的测试,它的这个中断引脚有点问题,它工作不稳定,工作非常不稳定。那所以这块咱们项目当中并没有采用这种中断的方式啊,其实还是采用的呃轮轮的方式。那啊这一点大需需注意意下下啊OKK那那这是于它的整个芯芯片的一工工作。呃,流程程测测试程程么?读读写数据,咱们大概应该清楚了啊。行,我听一下。

03-无人机-飞控项目-通信任务-SI24R1-工作模式
03-无人机-飞控项目-通信任务-SI24R1-工作模式
啊,好的,同学,这是咱们当前这款芯片,它的这个所有的银角啊OK好了,然后呢我们往下翻这块是不是就给出给出介绍了呀,对吧?呃,这块咱们就不用过多的去看了啊,就是咱们这边只关注和咱们和咱们什么呀,和咱们这个呃相关的这个银角就行啊,其实相关的角主要就是这几个正常情况,咱们看这几个就行,对吧?来明确一下都是啥啊,这四个引角这四个没啥可说的吧,对吧?这是我们的SPI的是不是标准的一个四线通信的一个引角啊,对吧?哎,有它的片选信号,有时钟信号有它的输入,还有输出,对不对啊?有这些啊。行,然后数字之外呢,还有一个就是咱那个CE眼角,刚才也看到了它的作用,是不是就是芯片的开启信号,说白了就是使能对吧?
要想发送或者是接收数据。这个你得至一才行啊OK好,然后你注意看看它这个所谓的端口类型DIDIDO这个啥意思呢?
DII的意思就是input对吧?b就是d类的数字输入,对吧?那这块呢你像这种是不是数字输出啊,对吧?
哎,这个大注注意下,ILQ呢这个是一个终端信号,什么叫做可屏蔽终端信号呢?就是你这个可以用,可以不用,那能能理解这事事吧,同学就是可屏蔽吧,对吧?能用你想用,你就用,不想用,你就给他屏蔽了也行啊,就这么一回事啊。好,然后是什么有效呢?低电平有效。也就说白了,他这儿如果收到数据了,他给你发了一个呃这个这个这个呃这个这个终端信号的时候,他是不给你一个低电平啊,平时它就是高电平呗,那意思就是就这意思啊,行了这些咱们了解一下就可以了。像其他的咱们就不再一个一个去看了,有些接什么天线的这些东西,你按照它的这个呃这叫典型,应为原理图去做,这不就行了吧吧?关注咱们跟咱相相关的就行啊,这吧,关于它的引角的一些说明啊OK再往下呢,我各位同学要给大家介绍的就是啥?
就是他这个芯片的工作模式了啊,我这个这个文档非常多啊,同学,但是我不可能都带着大家看,我现在就挑核心挑特别重要的东西跟大家说啊,那首先我们看一下它这个所谓的工作模式。呃,这块呢他说这个芯芯内部是不是有一个所谓的状态机啊状态机这个概念大家现在能理解了吧吧,对吧?所谓的状态机呢,就是说我有的东西呢,它有各种不同的状态。然后我这些状态呢是不是可以来回转换呀,对吧?在某些特定的条件下,可以来回转转换,就整个的一个转换逻辑,就是它所谓的状态机啊OKstatemachine就是这个意思啊。
好了,那之前咱们讲freryRTS是不是咱们那个任务还要有状态机呢呀,对吧?哎,来这是这个芯片的状态机,呃,我稍微调小一点,哎,算了,就这么看吧啊。好,他说这个芯片呢一共提供了五种工作模式,也就说白了五种状态呗,对吧?哪五种呢?shutdownstandbyidolTXTXRX就是说核心就是是在看名字,咱就能看出来啊,真正的可以发送数据和接收数据的模式,是不是一定是这俩模式啊,能理解刘事吧。同学。那所以你想啊就是如果说我只是为了收发数据的话,那其实没必要设计这么多的模式嘛,我这俩模式是不是就够用了呀?
那前面那些模式都是干啥用的呢?你听他的名字,瞅着就像低功耗,对不对?什么特shdowndownstbyidle,这哎是是不就是低功耗啊,对吧?哎,是这么一回事啊,所以说它实际上是为了实现这个低功耗的模式呃,低功耗,所以说才设计了这么多的模式啊OK好,我能我需切发的时候,我就进入到发送和接收模式。我不需要的时候呢,我就要不就沙特down,要不就standby,要不就idol呗,不就这个逻辑吗?同学哎,就是为了省电,说白了就是啊好了,那接下来呢我们需要了解一下,就是这几种模式,他们都是啥意思?
完了之后呢,他们之间是怎么切换的?因为你将来你写代码,你是不是得知道就是我我怎么切换到TS,我怎么切换到RX啊,对吧?这事咱们得清楚啊,来吧。那现在我们就快速的过一下,这是它整个的一个转换的逻辑图是不看起来还挺还挺啰嗦的呀,对吧?不过也没关系啊,一会儿咱们其实这个写代码也写不了太多。因为我们是不是直接用它官方提供好的驱动啊,对吧?啊,所以一会儿咱们稍微的改改代码就行,就这个咱们了解就行啊。来我们先看最开始的这个沙特down模式说沙特down模式杀down是不是就是关关闭的意思啊,对吧?就这个模式下边呢收发功能啊,模块关闭,注意收发功能模块其实指的是哪个东西,是不是就是这这这个模块啊,你像它的调制解调功率放大这些东西是呃包括这个射频模块,就是往往外发数据,这个这个时候它都不工作呀,对吧?这个是它最省电的一个模式啊,这个大家要注意一下啊。OK好,那我们继续往下看啊,呃然后呢芯片停止工作,消耗电流最小。但是啊哎哪儿呢?内部的寄存器的值和缓冲区的这个值保持不变。我们的单片机呢仍然可以通过SPI对这个寄存器进行读写。好,这时不就是它这个所谓的沙特down模式啊,对吧?哎,好,这一点大家要注意啊。OK好了,那接下来我们往下进行看第二,一个模式standbystandby工作模式。
啥意思呢?他说在这个模式下,只有晶体振荡器电路工作保障了芯片,在消耗较少电流的同时,能够快速启动。呃,是这个意思啊。ok来什么怎么去理解这个事儿呢?其实非常简单,晶体震量器,其实咱们前面没提啊,但是你应该知道它它的作用应该是啥呀?是不是提供时钟信号啊,对吧?比如说它内部其实也是有一个时钟信号的OOK是在这种模式下边呢,我的时钟信号是有的,有它的话有什么好处呢?他说能够在保证我消耗较少电量的同时,能够怎么着快速的启动?来我们看上面的那个转换的原理图案去呃,怎样从你看最开始芯片上电之后,是不是先进入关断模式啊?对吧在这个沙特浪模式,也就沙特浪模式。ok好,这个模式下边我们前面讲了,是不是只有那个寄存器是可以读写的,其他所有电路是不是都不工作呀,对吧?好,那完了之后,我怎样进入到这个下一个模式,所谓的待机模式呢?是不是这有一个寄存器叫做PWRR这是寄存存里里边的某一位啊,你给它置一是不是就进入到待机模式呀,对吧?好待机模式跟关断模式有啥区别呢?首先,待机模式我能收发数据吗?同学也收发不了,我的收发模块,也不工作,能理解这个事吧。同学但是他谁工作了呢?时钟信号有了,你时钟信号有了之后,你将来要想去收发发。据行,你从这你你切到这个接收,或者是等送模式,是不是要比最开始那个沙特down,切到这个模式要快啊,对吧?
说白了,我这个时时刻准备着吗?对吧?不就是standby的意思吗?对吧?不就这个意思吗?哎,好能大家能理解这个事吧。哎,就这意思啊OK好了,接下来我们再往下走,再看另外几个模式啊,对吧呢?就是idolTS模式,还有这个模式模式了。这个我就不再看这个文字了,我直接看这个图,给大家解释就行。
非常简单来,我们先看这个RXRX我们听名字就知道,一定是接收模式,对吧?哎,好,接收模式需要从哪来呢?是不是从待机模式就可以切换到所谓的接收模式啊,对吧?
怎么切的?你看一下啊,首先第一个CE得等于一,大家还记得CE吧,使能演讲,这个必须得使能,对不对?好,那完了之后,这儿还有一个什么东西,什么prayMRX显然这应该是寄存器里边的是不是某一位啊,对不对?OK好,你把这一位之一RX嘛RX之一。好,那就进入接收模式了OK好了,那我要想进入发送模式,怎么进呢?来看一看啊,它这儿不是直接进到接发送它,还有一个啥发射空闲模式,什么叫发送共闲呢?说白了,就是你可以理解为,就是等待发送模式,等待发送模式,他等谁呢?同学是不是等那个发射的缓冲区里边有没有数据啊?大家能想明白这个事儿不啊解释一下啊。OK你看它这个转换逻辑其实很简单啊,注意观察,要想从待机模式进入发送模式。首先你得先将谁先将这两个东西呃,给它搞定CE肯定也得等于一对吧?但是这个标志位RX哎,这个标志位是不是就是这个标模位,对吧?说白了啊,这个标志位你可以怎么解读呢?就是是否进入接收模式等于一是不是就进入接收模式等于零,是不就就发送模式啊,对吧?OK好,那完了之后需要注意的就是我进入到发送模式之后呢,我不是说立即就会真的进入到这个发送的模式,它得看什么呢?它还会看你的这个发送的缓冲区里边有没有数据,其实想想也是这么回事儿,我要是里边没数据的话,我在那儿我那个发射模块,我工作有意义吗?
同学是没意义啊,对吧?哎,他会判断这里边有没有数据,你没有数据的话,那我就等等,就进入所谓的发射空闲模式。好,那什么时候就真的进入发送模式呢?好,这里边有数据了,我是不是就进入发送模式啊,就是这么个逻辑啊,就这么个逻辑啊?同学好了,这就是它的这样几个状态态机啊?好了,其实它为什么要设计这么复杂啊?它不是为了就是增加难度,它说白了就是为了实现低功耗模式,对对吧?哎,好了,同学这一点大家要注意一下就行了。哎,了了,这就是它五五工作模式式,我简简单了解一下就行了。那将来我再去使使它的时候候,我发数据据和接收模式,我们肯定直接就是进入到呃RXmode以及这个TSmode了,对吧?哎,这个大家注意就行了。行了,这是关于它的工作模式的一个介绍。那这一个时间长了,我我先说一下,后边两位还得看啥,你课下,你可以自己看看啊,我们后边还需要了解什么东西呢?呃,什么东西东西我们需要再了解如下,这三张这三张分别是啥啊?了解首先第一个数据包处理协议。哎,其实里边我们重点要了解的就是啥,就是他发送的那个数据包的格式。因为因为一个协议,一个协议是不是肯定是说白了发送方接收方需要约定好一个数据的格式啊,对吧?这不就是协议嘛,我们需要去了解一下人的这个协议,它的这个结构是什么样的?哎,OK好,这是这一张需要了解的内容。好,那第二下一张是什么呢?哎,咱们需要去了解一下它的这个SPI的数据与控制接口。说白了,就是我要想通过SBI的数据,我怎我我需要发什么样的命令,对吧?我要读数据,我需要发什么样的命令,是不是咱们得通过这一张去了解啊,对吧?其实跟咱们使用密切相关的啊,其实就是谁,是不是这是最密切的呀?就是这是一个啊。然后再有呢,就是咱们需要去了解一下,它内部都有哪些寄存器,就这些把这些看完了这个芯片咱就也咱就能用了。
其实下边好像也就没啥了,对不对啊,基本上就是这个文档,咱们需要差不多通读一遍吧。哎,行,就这些,我把视频。

04-无人机-飞控项目-通信任务-SI24R1-通讯协议
04-无人机-飞控项目-通信任务-SI24R1-通讯协议
呃,来吧各位,那我们接下来呢要学习的内容就是FI二四二幺。呃,咱们当前的这款芯片的这个传输协议了啊,也就是它那个所谓的是不是ARQ协议啊,对吧?哎,呃,我们前面大致了解了一下这个ARQ它的工作机制是不是说白了就是发送方给接收方发数据。发完之后呢,我要等我要等一个什么东西,等一ACCK对吧?当然他它不会无限限等下去啊,他它肯定会有一个超时的时间,对吧?超出时间,如果还没等到,那它就会怎么着重发。哎,就这么一个意思啊。OK好了,那接下来我们来聊一聊它的细节啊。呃,首先这提到了说FI二四二幺基于包通讯啊,什么叫包通信呢?就是它会把你要发送的数据封装成一个它规定的这种ARQ包。哎,这是它那个包的格式啊,一会儿我们了解一下。完了之后呢,它是一个包一个包的发的啊,然后我重发数据的时候,我最小的重发单位是什么呢?就是一个包,这个包发错了,我就把整个包重新发一下,就这个意思啊。
好了,然后支持平等式ARQ协议,这儿提到了一个停等式啊,停等,其实很好理解。什么叫平等式啊?就是我发先发一个包,这个包发过去之后呢,我就直接停下来,我就等着等什么等ACK嘛,这不就是停等式嘛,对吧?哎,停下来等着ACK就这意思啊。好,收到ACK之后,我是不是再发下一个包啊,对吧?就这意思,这就是停等式ARQ协议啊,简单了解一下就可以了啊。
好了,那完了之后呢,我们往下进行各位,其实它这儿呢这个ACK是可选的。你看到没有?他说你可以选择有ACK,也可以选择呃,不等这个ACK能理解这个事儿吧。同学那显然等ACK是不是它的这个速度要慢。但是呢我这个数据的可靠性要高啊,对吧?那我要不等ACK呢,那显然就是传输的速度快,但是可靠性比我也不知道到底有没有传成功能理解这个事儿吧,就是它容易丢包啊,就是你要是noACK的话啊。好了,那接来再往下走,还有一些需要了解。他说ARQ这个协议呢它支持什么呢?一到三十二个字节的动态数据长度。啥意思?就是我通过这个咱们这个芯片往外发数据的时候呢,我可以发送变长数据,发送变长数据。哎,你这个长度呢可以是一到三十二个字节,你可以随意的去选择,能理解这个事吧。同学。但是有一个要求,你要是采用这种所谓的动态,呃,变长数据啊变长数据你得怎么着呢?你得把数据的长度给它放在哪儿,放在数据包里。其实这个东西跟咱们自己写函数是一个道理。你要是想比如说呃操作这个变长数据或者是怎么着呢?你是不是除了要把这个数组给他,你还要把长度给他呀,对吧?这样一来,人家处理方才知道我到底应该接收多少数据嘛?对吧这也是一样的道理,你要是发送变长数据,你得把那个长度告诉人家,哎,当然你也可以选择发送什么,是不是定长数据啊,对吧?那定长数据你这个长度需要在寄存器里边指令发送方接收方都要指定这个长度。那这样一来是不是人家接收的时候,他才能知道我到底应该收多少啊,对吧?就这个意思啊。好,那这就是他的一个ARQ的一个基本的呃流程啊。好了,那完了之后我们往下走。呃,还有一点,他说这个ARQ的这个呃处理单元呢,它会怎么着呢?会自动的完成解包打包自动回复ACK等等自动通话。这个所有的操作是不是全是自动的对吧?哎,这个咱们了解一下就行。然后还有一个东西,呃,这个我们用不到啊,但是咱看一看啥意思啊,他说这个处理单元呢,内部有六个通信管道,然后呢可以直接支持一比六星型网络,这个是什么意思呢?同学给大家解释一下啊,它是这么个意思。呃,哎我记得后边有个图来着啊,算了,我给大家画一下啊,呃什么叫一比六星星网络呢?他是提到了说假如说这是我的一个芯片,这是我的接收方啊,同学接收方,它一共有六个管道。ok哎,我这个画的这是几个了,这这就六个了,对吧?呃,我稍微画好看一点啊,画的尽量的像一个星星。哎,OK好,这是不是它的六个管道啊?同学它支持一v六,然后呢星型网络什么意思呢?这是我的接收方啊。好,他可以同时去接收六个发送方给他发来的数据啊OK好,那当然呢你这个发送方在给这个接收方发送数据的时候呢,你得指定你要发送给他的哪个管道啊?他这个管道是可以配置地址的,每一个管道都可以单独的配置一个地址,大家能理解这个事吧。同学哎,好了,完了之后呢,你的发送方再给他发数据的时候呢,你需要指定发送给哪一个管道啊,他发给他他发给他,他发给他他发给他。
好,这就是一个所谓的是不是一比六的这样的一个新型网络呀,对学就这个意思,那是这样的啊,大家理解一下能能理解吧。哎,好了,那接来我们往下进行各位同学这个当然我们这儿用不到,我们其实就是一v一吧,对不对?咱们遥控呃,还有我这个无人机一v一嘛,对吧?哎,好了,那接下来往下走,下边呢我们就可以来了解一下,就是他这个ARQ协议里边的这个包的格式了。ARRQ的for的格式看起来还挺复杂的,有那么多东西,对吧?呃,但实际上我们需要关注的,只有这咱们需要重点关注的,只有这儿啊,其他就是了解一下就行。首先我们看第一个前导码,r啥叫前导码呢?看它的解释前代码字段呢,主要用于接收数据的同步。
接收数据的同步。也就是说你把这个数据包发给谁,发给咱们的那个接收端之后,对吧?它会识别到这个前导码,其识别到前导码之后呢,我这个接收方就开始逐步的解析整个包的数据去了。你可以理解为这就是一个啥咱们常见的通讯协议,它前面都会有一个什么东西,是不是起始标识啊,对吧?你像串口是不是有一个起始位,那iphonec是不是又有一个起始信号能理解是吧?就是类似于那个东西啊OK用来同步这个接收数据的啊,那这个东西也说了,你发射的时候,芯片自动附上接收的时候,芯片自动去掉,对,用户根本就不可见。所以咱们是不是都不用管它呀,对吧?哎,好了,那接来往下进行看。第二一个呃,这个啊,这当然这个地址咱们也很关键,我们也得重点关注一下东西啊,这个东西是啥呢?指的是是不是这叫啥地址,字段为是不是接收数据放在地址啊,对吧?哎,OK好了,那刚才提到了,说咱们当前的这个芯片是不是支持一v六啊,对吧?完了之后,一v六是不是每一个芯片,它接收的话都有六个信道,可以用来接收数据啊,对吧?啊,好了,那完了之后,你的你这个地址其实应该说白了,说的严谨一点啊,并不是说是接收方地址,而是什么呢?而是接收方的里边的,是不是那个具体的通道的那个地址啊,它六个通道嘛,对吧?你到底给谁发,你是不是得告诉人家,对吧?
一般情况下啊,你像我们这种一v一的情况下,我就发给通道,姐,我就发给通道零就行了,能理解这个事儿吧。同学哎,好了,这个注意啊。ok好,那继续往下进行,这后边又提到了后边这句话说的就是接收方了啊,就说只有当这个地址与接收方芯片的地址寄存器里边的地址相同的时候,那是不是接收方才会接收啊,对吧?
什么意思啊?比如说我这儿有一个接收方,对不对?因为你是无线电信号嘛,对吧?那空气中是不是随便的去进行传播呀?那它不是说我直接就是说通过线连接的,所以说这个接收方啊,他可能会经常接收到,是不是呃这个信号啊,对吧?但是哪个信号他是发给他的呢?人家是不是有地址啊,对吧?我看地址能理解这事吧,同学地址跟我相同,我是不是才会怎么着,我是不是才会接收啊,对吧?哎,是这样的,这这有点类似,于是不是有点类似于iphonec里边的,是不是那个从机地址啊,对吧?我从机我是不是收到得跟我这个地址一样,我是不是才处理这个呃这个数据啊,对吧?
啊,一个一个意思啊OK好,继续往下就行。然后这个地址的长度呢,咱们是可以配的同学地址长度呢,我们可以通过配置寄存器配置AW呃呃这这是一个寄存器AW是啥意思?a就是addressw就是宽度嘛,vice对吧?说白了就是地址长度,就这个意思啊。好了,那完了之后呢,你这个地址长度可以选择啊,你可以仨字节四个字节,五个字节都行啊,这个无所谓啊,就是咱知道怎么着就就行。
然后往下走,需注意意的是你这个地址的最高字节,你不能设置为这几个值,他说可能会导致么呀,接受失败啊,我我的理解啊,当是他也没说说为什么接受失败啊,我的理解应该是啥呢?你看同学,他这个地址跟前导码是不是挨着呢?同学最高次节是不是跟前导码挨着呢?对对吧?也就是说有可能这几个东西会跟它的前导码是不是产生这个干扰啊,对吧?因为无电信号无电无线电信号之间,它可能是不是可能会出现前后的一个关系啊,对吧?就可能会导致前导码受影响,我的理解是这样的啊。好了,呃,然后前导码受影响了,它是不是用来同步接收数据的呀,对吧?你太有影响了,那我我是不是后边就接收失败了呀,对吧?哎,你可以这么去理解这个事儿,总之按人要求就行。一会儿咱们改地址的时候,这个信号不不不要要不要不要忽略略,一定要注意一下这个事儿不要瞎写。
哎,好,呃,然后需要给大家说明的一点,就是你想一想同学,我们现在办教室里咱们有这么多同学,对吧?然后呢,每个人都有一套这个东西,那你到时候地址是不是咱们不能重啊,对吧?尽量尽量不要重啊,这里边不要重的东西有啥呢?首先咱们最开始那个那个信道是不是有一百二十六信道啊,对吧?而信道不要重,然后这块是不是咱这个地址尽量也不要重啊,对吧?哎,OK好,这个大家注注意就行了啊。但是严格意义上来讲,同学我信道要是不一样的话,我地址相同,其实也没事吧,同学理论上上也没事啊,但是保险起见是不是咱们尽量都让它不一样啊,对吧?哎,OK这一点大家注意一下就行了啊。好,接着往下走,下边咱们要干啥的,下边咱们了解解是第三部部分做做包控制字啊,这是用来做控制的啊。这个控制呢一共有九位啊,注意是九位,不是九个字节,这九位都是啥意思呢?首先第一个数据包长度,大家还记得吧,我们这个呃他这个协议是不是支持什么来着,是不是支持传输变长的和定长的数据啊,对吧?
如果传变长,你是不是得把你这个数据的长度给人家放在这个包里啊,对吧?就放在这几位上,哎,一共是六位,为什么是六位呢?为什么六位呢?同学因为我一共是一一到是不是三十二个字节啊,对吧?哎,按理说一到三十二个字节,我是不是五位就够了呀?因为二的五次方是不是就等于呃,三十二了呀,对吧?那为什么是六位呢?他这还能传空包,你看到没有?同学,如果这个六位全是零表示的是空包,什么叫空包呢?空包就是你后边这个实际的数据是没有的,啥也没有啊,它它有一个这个东西啊,所以说五位是不就不够用了呀,对吧?所以他就搞了一个六位啊,这个大家注意一下就行了。好,那接下来往下走,看这个PID这个PIDAA是个啥呢?注意它不是咱们那个做PID控制那个PID啊,这是干啥用的呢?我们来看一下哈,他说PID这个字段适用于告知接收端。这个包是一个新包还是一个重发的包,可以防止接收端重复接收一个包,就这意思。哎,好,他的工作机制是什么样的呢?我给大家说一下,其实非常的简单来大家试想一个这样的场景啊,比如说这是我的发送方,对吧?
这个是我的接收方,大家大家不要走神啊,就是这个东西确实有点枯燥啊。这个但是咱得了解啊,对,不要不然然话一一儿咱们用明白这个东西啊来不要走神。好,那他再明确一下PID是不是用说白了是用来干啥的,用来防止接收方是不是重复接收同一个包啊,对吧?哎,我们来看他怎么重重复发生的呃,重重复接收的。我们先来看一下什么情况下会重复接收。举个例子,现在发送方给接收方,我发了一个包过来了。过来之后,这个他明明接收到了,理论上接收到之后,他要干啥?他是不是要回复一个ACK啊,对吧?但大家想想啊,你说有没有可能我收到这个数据之后,我的ACK发出去了,但是他没收到呢,有有没有这种可能性,有这种可能性,对吧?比如说我这个信号不知道怎么收到,干扰了等等等。总之他没收到,但是呢人家接收方是不是已经实实在在收到这个数据包了呀,对吧?OK这个时候这个就会出现一个什么问题?那t是不是没收到?ACK这就会认为那边没收到啊,没收到,我是不是就会再重复的发送这一个包。哎,那这样一来是不是就会可能会出现重复接收这个事儿啊,对吧?如果不做任何干扰,那你接收方这边只要收到包,我就接收,只要收到包,我就接收,那肯定会重复的对吧?它是有一个这样的潜在风险的这就是这种你ARQ它是一定存在这样的一个问题的,对不对?那所以它是怎样避免这个就是重复接收呢?很简单,他给这个每一个包啊都分配一个ID都分配一个ID这个ID呢是可以自动累加的啊。ok好,我每发一个新包,我这个ID就加一,也就是说同一个班,我的ID是什么样的同学是相同的。呃,比如说我这个是我发的第一个包发的是零,对不对?好,那这边ACK没收到。好,我再重发重发的话,我这个还是啥?我这是不是还是零啊,对吧?你这个接收端这边你是不是就发现了?哎,我上次接收的是零,我这回收到还是零,那是不是说明你这俩是一个班啊,对吧?
OK一个班,那这回我还接收吗?我就不不实际的去接收了,我直接怎么着呢?我直接就给你返了ACK告诉你,我收到了。哎,那这时候他是不是就可以继续发下一个了呀,对吧?
下一个人再发,是不是这个就是一了呀,对吧,就这么个意思啊?好了,那当然这种机制呢能够就是实现就是这个一定程度上的,避免这种就是重复接收的问题,但是他不能完全杜绝,为啥呢?你看就是他这个位数是不是只有两位,只有两位的话,我这个只有多少同学,是不是嗯只有零一二三,是不是得有这个东西啊,对吧?啊,ok好了,那也就说这种情况下,它有可能会出现一个什么样的问题呢?比如说我连续多个包我都丢了,是不是就可能会出现一一些,这个就是当然可能不会重复,但是可能出现丢的问题,对吧?啊,总之啊就是这个大家简单的了解一下就行啊,就是说这边呢他是只有只有两位零一零一二三四,它是轮轮着来的对吧?我第一个零啊,一二三后边是不是又来一个零啊,对不对?那这个什么时候会出问题呢?呃,我就举个简单的例子吧,比如说呃我想想啊,哎其实也还好,也还算是比较安全,对吧?我刚才可能想错了,咱们咱们咱们分析啊,比如说我最开始发的是零,对不对?你要是发的是零的话,我想的是啥呢?如果说他这一轮,比如说一二三都没发过去,然后又来了一个零,但是他明他俩明明不是同一个包,那我这边是不是会认为它是一个零啊,那是不是可能会有这种这种问题出现呀,对吧?那后来想来好像也不是很容易出现这种情况啊,为啥呢?因为我这个零没发过去,我我我我是不是不会发译啊,对吧吧,他是不是零会重传呀,对吧?对吧?其实呃出现刚才那种情况的概率其实很低啊。ok呃,除非什么时候呢?就是他有一个有一个问题,就是他他他可能会有一个重试的最大次数,他不可能一直无限的重试,对吧?比如说我重试十次之后,我就不重试了,那可可能可能就会出现这种,但是概率极低啊,所以说这个情况下就不考虑了啊。好,所以这个还是比较安全的啊,理解下这个事就行。再接着往下的同学下边这个是啥呢?是这个noACK这个就简单了。这个其实就是告诉我这个接收方,我这边边我到底要不要ACK对吧?前面不是讲过嘛,就是咱们可以选择有ACK选择没有也可以选择,不要ACKK嘛,对吧?就是通过它啊,那根据它的命名,我们应该能看出来啊,如果它应该是制一质疑,就是noACK吧。置零是不是?就是有ACK啊,对吧?所以想要ACK这个得质零才行。哎,好了,这就是它所谓的包控制字,就是这部分内容。好,最后就是这个负载了这个简单了吧,同学哎OK好,需要注意的就是它的长度是零到三十二,对吧?
你可以发空包啊。好了,接着往下走,最后一个三十c这个是用来做啥的呀,做校验的对吧?OK注意同学这个CRC这个值呃这个CRC它的计算原理是啥呢?是不是针对于整个包,我算出来一个数放在这儿啊,对吧?然后接收方呢敲到数据之后,是不是再针对整个包算一下,然后呢,再怎么着,是不是在跟这个原来的数做一下比较啊,对吧?相同就说明没问题,对不对?好,这一系列的计算比较这些逻辑都不用我来做,都是这个芯片自动完成的。
哎,是这样的,同学说白了同学咱们将来你要想去用这个芯片发数据,你只需要重点关注啥就行了。我们可能需要去配备这个地址,然后呢数据负载,这是不是需要我们关注的呀?你像其他这些东西是不是咱们都不用管啊,基本上就这么个思路啊。同学好了,那这个完了之后往下走包的格式,我就给大家介绍完了。

05-无人机-飞控项目-通信任务-SI24R1-ACK通信流程
05-无人机-飞控项目-通信任务-SI24R1-ACK通信流程
呃,好了,各位啊,那接下来我们进入下边一个环节,下边一个环节呢,就是ARQ的通信模式。通信模式。其实我我们是不是前面也简单了解了一点儿来,对吧?然后这块可能有一些细节需要咱们扣一扣,那咱们就扣一扣啊,咱们扣一扣。好了,先来看一下它对整个通信模式的一个基本介绍吧。我们看看目录呢呃这个目录结构什么样的?你看前面是不是讲的是这个包的格式啊,对吧?然后讲的是这个下边其实你说的是通信模式不太合适,说的是通信的流程吧,对吧?它呃通信模式有这么两种啊AC有ACK的这ACK的对吧?动态长度的静态长度的呃,就是变长和和这个配漏ad,是不是就是那个数据负载啊,对吧?呃,配load的这个动长呃,动态就是那个什么意思?变长的这个就是呃就是定长的对吧?
其实咱们都是咱们理解的概念啊。呃,然后呢,我们现在呢呃先看一下它这个概述,然后一会咱们重点关注一下这个ACK模式就行了。你像这个模式,咱们是不用管呀,对吧?像这个呢其实就是配个寄存器的事也比较简单,这个是多信道通信,就是那个EV六呃动多通道,通信啊,多通道呃,一v六,那那个咱们也是简单了解一下。我们先看先看一下这块啊,先看一下这个概述啊,看这他说通信的时候是不是必须得进入发送和接收模式,还记得这个工作模式一共有五个,对吧?前面有低功耗模式啊,然后呃这俩发送和接收模式。我们先看这个tts说了,在TTS式式边呢发发送,将将自动将将导导码址址包控制字负载数据CCC包通。通过这个频模块块,就是我们前面讲的那个天线,对不对?哎,将信号发出去。呃,对不对?将这个信号调制成天线调制,然后通过天线发射这个大家好说的看接收方接收方这边呢呃他在RS模式下边会怎么着,会怎么着,会在接收到的解条信号中不断的侦测地址,哎,侦测有效地址,对吧?什么叫做有效地址?同学是不是只要那个包里边的那个地址和他自己的地址一样就行了,对吧?那其实一个接收方他可以有几个地址东西?按照我们刚才的描述,一个接收方是不是有六个通道啊,对吧?它其实可以有六个地址了,它有六个地址了OK好了,那只要跟任意一个地址相同,是不是?他就会认为这是发给他的呀,对吧?哎,他就会去处理这个数据了。好了,接着往下走,一旦侦测到地址与接收地址相同,然后就会开始接收数据。
哎,好,如果接收到的数据有效,那就会将负载数据负载数据是不是就是咱们那个真实的数据啊,对吧?
它会自动的将数据放到哪的同学好到接收的缓存里边,这个跟我们之前的描述是不是一样的呀,对不对?
然后产生一个中断,是不是通知MCU对吧?这跟我们描述也是一样的啊,然后MCU可以通过SPI接口访问RX非fo计算器进行数据读取。
哎,你看这个是不是闭环的同学,哎,咱们今前讲的一样的啊。好了,接下来我们往下走,这是一个一个整体的一个工作流程。接下来我们重点关注一下它的ACK模式应该如何使用?因为咱们一会儿用的是不是就是ACK模式啊,对吧?来看一看怎么用啊。好,来读一下这段话,他说了,我们要想发送数据。好,你需要向这个芯片发送一个这个命令,你看这个命令叫做什么?WTXpayload是不是就是发送负载呀,对吧?你需要呃这个命令需要发给人数,发给他一芯片啊,对吧?咱们怎么发?是不是通过SPI接口发给他呀,对不对?完了之后发给他之后呢,就可以通过这个命令向哪儿向发送端的这个发送缓区写写数据好,是这个命令向发送缓冲区写数据好,是不是剩下的事儿,咱就不用管了。哎,同学对不对?OK好,这个时候这个芯片就会自动的打包数据,打包数据啊。好,那完了之后呢,呃打包数据的同时,它会将控制字流那个noACK给它整成什么?是不是整成负位啊,负位是不是就是零零,是不是才是有ACK的呀,对吧?我们接着分析了OK好了,那接接着往下写,这是发的流程。所以对于我们来讲,发的流程非常简单,你就是通过这个命令往非for里写数据就行了,剩下的是不是都不管了,就这么个意思嘛,对吧?好,那接着往下走,接收端,在接收到这个一帧有效的数据之后,它就会产生一个是不是RXDR就是接收成功,接收是不是成功的一个中断呀,对吧?好告咱咱们MMPUOIMCU啊。好,完了之后它会怎么着?它会自动,是不是返回一个ACK呀,对吧?哎,好了,那发送端在接收到这个ACK之后呢,就会自动之后TX非for里边的数据。哎,大家想一想,它为什么要在接收到ACK之后再清除啊,你得劝人家收到了,我是不是才能清,我要没收到,我就清了,我一会儿重发的话,我是不是没了呀,对吧?哎,这这个是不是应该是比较安全的一个操作,对吧?他应该能理解的啊,好,接着往下走,哎,然后再产生一个发射成功的终断表明此次通信成功。哎,这就是它的一个完整的发送和接收的流程,还是挺细节的啊。好了,接下来我们往下走,各位同学员这句话非常关键。这句话非常关键。来读一下,看能不能读懂啊,他说接收端在发送ACK信号时,哎,注意啊,接收端是不是得给这个发送端返回一个ACK啊,对吧?好,那你想一想,所谓的返回ACK是不是也是在发送数据啊,是在接收端在给发送端发送数据,对吧?那你只要发送数据,你是不是得声明那个接收端的地址才行。当这个事儿吧。同学好,你看看他这怎么描述的啊,这个接收端在返回ACK的时候,它会直接取接收管道的地址作为目标地址来发送ACK大家能想明白这个意思不?它表达的是什么?他表达的是什么东西?这句话的言外之意是什么?这好好你好好想想啊,这个东西这挺关键的啊,这是什么意思?嗯,大家能不能想明白呃,有耳绕啊,我给大家解释一下,它是这么一回事儿。前面咱们讲过啊,就是首先咱们接收数据的话,我是不是可以配置六个通道进行接收啊,对吧?OK好了,那比如说我们现在这是我这是我原来的接收端啊。好,比如说我用的是通道零,是不是进行接收啊,对吧?好,那前面也讲过,我发送方在给接收方发数据的时候,这是t啊。好,那理论上啊,你这边指定的地址,其实严格意义上来讲应该是什么?应该是你这个接收方是不是具体那个通道的地址啊,比如说我给这个r这边啊,它的通道零配的地址是a,然后呢,我发送端这边给谁给咱们的这个呃就是接收端啊,接收端发的时候,我我我发的就是通道零。那所以说我接收方指定的这个目标地址是不是应该就是a呀?
大家能理解这个事儿,那就会发到接收方的通道里OK好,现在说的是啥呢?是这个接收方返回ACK对不对?返回ACK的时候,他是什么需要取接收管道地址作为目标地址能理解吧。也就是说这个接收方返回ACK的时候,会直接把自己接收数据的这个管道地址,是不是?也就是我这配的这个a呀,对吧?直接把a作为什么作为目标地址往这边发能能理解吧。那有同学可能会说,你这不就是相当于发给自己了吗?呃,不会的啊,因为咱们这个无线电信号是不是往外传呀,对吧?你这个接触他自己这个天线是收不到自己发这个信号的。咱们可以这么理解这个事儿啊,同学能理解吧OK好,那既然他直接取自己的地址作为目标地址,那这就要求什么同学要求你是不是得给接发送端它的接收地址设置,为什么跟他的这个接收地址得是什么样的?你得是一样的,是不是他才能收到你这边的ACK信息啊。哎,他是这个意思,你看后边其实也说了,他说所以你你发送端注意指的是原来这个发送端啊,需要设置自己接收管道零的地址与自身发送地址相同,自身的发送地址,也就是是不是这个地址啊,对吧?哎,它得相同才行,说白了啊,就是你将来到时候设地址的时候,你是不是不管什么接收发送全设一样的就行了呀,对吧?人家是这么个意思,这儿稍微有点绕,但是两者人那个要求来啊。OK好了,那接下来我们往下进行同学。呃,下边呢还有一小段儿,咱们需要了解一下,就是这段这段话读完咱们就就o差不多就OK了。这个这个发送的这个协议啊。好了,看这儿。他说如果发送端在ARD时间内没有接收到ACK信号。这个你可以理解为是一个就是超时时间,等待ACK的一个超时时间,这个东西也是可配的啊。
OK好了,那完了之后我们往下走,在规定时间内没有收到。ACK是不是就会自动的重新发送上一点数据啊,对吧?
哎,好了,然后需要注意的一点就是当重发次数达到最大时,仍然没有接收到确认信号,那它就会怎么着发送班就会产生一个maxRT中的RT你可以理解为是什么意思?
retry对吧?retry是不是就重试的意思啊,对吧?啊,已经达到了最大的重试次数,重试次数,这个东西也是可以配置了啊。
OK好了,那完了之后呃,说白了就是正常情况下,我这个发送端啊,我会等待ACK对吧?等不到我就重发,等不到我就重发,最多重试多少次呢?最多重试这么多次就会发生一个中断啊,就是这么一回事啊。OK好了,那接下来往下进行。这还有一个呃说明说啥呢?说MASRTT这个中断。因为中断情况下是不是会有中断标志位啊,同学OK这个中断标志位不清除,你是没法发送下一个数据包的。啥意思呢?这个其实也是出于一个安全考虑吧。你这个标志位没清除,那就意味着我的单片机是不是还没有去处理它的这个是不是就是发送失败的这个事儿啊,对吧?所以我就不会给你发下一个。只有你当你把我当前这个包发送失败的这个事件处理完了之后,我才让你发下一个,这是他这个逻辑啊。
好,那我怎么去清除这个标志位呢?通过直接写写寄存器来清除,到时候咱们可以看到那个寄存器啊OK行,那这就是咱们这儿所呃提到的这样的一个机制啊,就是大家需要注意它是有一个最大的重试次数了。行,其他东西咱们就不用看了。哎,好了啊,那下边呢还有一张图,这个图看一看能看明白不?这是一个带ACK的一个完整的通信流程啊,简单了解一下啊。好,我们要想发送数据,首先你发送端得怎么着,是不是得发送得往那个就是非复里边写数据啊,对吧?啊,OK好,我发送配漏的。好,那发完了之后呢,这边他就会怎么着,是不是就会在这儿去等待这个ACK了呀。对吧?OK好了,那接收方是不是会接收这个数据?他在接收到这个数据之后,怎么着会先产生一个,是不是RXDR终断呀,对吧?RSCR是不是就是说明我接收成功呀,对吧?先产生中断,然后呢,再回复ACK好了,那接收方收到ACK之后,是不是会产生一个TXDS,也就是发送成功终断呀?对吧?这是它的一个完整的呃通信流程啊,这个咱们看一看就行啊。好了,那至此呢这个ACK的通信模式就给大家介绍完毕了啊。行,我把这个视频。

06-无人机-飞控项目-通信任务-SI24R1-多通道通信
06-无人机-飞控项目-通信任务-SI24R1-多通道通信
呃,好了,各位同学这就是他的一个所谓的这这就叫什么?这是不是就是一比六星星网络呀,对吧?哎,你看人家这个怎么配的啊,你看能不能看明白,这是接收端,这是它的六个发送端,重点看地址,理解那个地址,你得理解那地址啊。
好了,首先你看接收端接收端,我前面讲它是不是有六个接收通道啊,对吧?六个通道六个通道的话,那呃,是不是就有p零到p五,对吧?所以六个通道是不是有六个不同的地址,哎,能理解这个事吧。同学好,然后呢,我的发送端在给这个接收端发数据的时候,其实严格意义上来讲这个TS是不是就是你的发送地址啊,对吧?TSCD点OK严格意义上来讲,你这个指定的并不是你的接收端的地址,接收端没有地址,它它的通道是有地址的对吧?哎,你指定的应该是啥呢?是通道的地址,你看它指定的是不是通道零的地址,它指定的是不是通道一的地址啊,对吧?指定的是你要发到哪个通道啊,这一点一定要注意。好,那接下来往下进行。为了能够让发送端接收到接收端给他们返回的ACK能理解吧。同学OK好,你看发送端他是不是也得有自己的接收通道啊,你想啊你ACK你不行,是反过来了吗?现在他现是是发送端了,这个是不是接收端了,接收端,我是不是得得有自己的接收通道的地址啊,对吧?你看人家这个接收通道注意,因为我只需要接收他一个人,所以他是不是只用了通道零啊,对吧?你看这个地址是什么地址,跟他之前的目标发送地址是不是一样的呀?为什么是这样设置呢?因为人家接收端这边他是这么设置的,我给你返ACK我直接取我接收通道的地址,是不是作为我的目标地址啊,对吧?那所以你这个发送端的,你的接收通道零的地址是不是就得跟这个地址是一样的呀,对吧?总之乱七发糟的,最终总结一下,就是你所有的地址都配一样的呀,对吧?因为人够正常工作了,现在大家能理解他这个地址的一个工作逻辑了吧。哎,好搞清楚啊。好了。行,那就是这些啊呃这个就不多说了,我把视频。

07-无人机-飞控项目-通信任务-SI24R1-SPI接口&寄存器说明
07-无人机-飞控项目-通信任务-SI24R1-SPI接口&寄存器说明
哎,好了,各位,那下来我们往下进行来先读一下这段话,这儿提到了这个芯片采用标准的四线SPI接口,对吧?实测的最高的读写速度是大于十兆每秒的。呃,大家知道吧?就是我们在呃三二里边去配。那SPI的时候是需要给它设置一个波特率的吧,嗯,对吧?那三二里边要求这个SPI的波特率不能超过多少来着,不能答于多少来着,还记得吗?不能十八,对吧?不能十十八,对,不超过十八之后,是是不是会提示你那儿那个就是分辨器有问题啊,对吧?要让你去改的啊。OK好了。呃,但是我们其实也不能配到最高的十八啊。
因为人家这边呢他测的是能大于十兆每秒,但是最最大是多少,他也没说对不对?所以我们保险起见的话呢,我们配置在多少以下呃,是比较合适的呢?十兆以下,咱们十兆以下是不是肯定是安全的呀,对吧?
所以一会儿咱们配那个波特率的时候要注意一下同学,哎,这是需要大家注意的。好了,那接下来我们往下进行那外部微控制器,我们可以通过SPI接口。对这个芯片进行配置,包括读写寄存器读写非否读写寄存器状态,清除中断等等等。是不是都通过这个SPI接口去做呀,对吧?哎,就这样的好,接下来呢我们来了解了解它的这个SPI这块具体怎么进行通信啊,来吧。各位同学来看一看,这上面呢是对这个SPI的一个基本介绍,包括这个偏远信号,对吧?这些东西是不是咱们都很了解呀,标准的呃,这个CS这个需要怎么着?由高到低,是不是这个接口才开始工作呀,对吧?哎,这个咱就不多说了啊,然后呢这句话很关键。他说,每一次SPI操作MISO输出的第一个字节均为状态寄存器的值。这个是啥意思呢?首先明确一下,哎,这个芯片它有一个寄存器叫做状态寄存器啊,这里边保存了这个芯片的各种各样的一个状态啊,就是一个状态,标志位能理解这块吧。同学好了,那大家都知道这个SPI通信,我在通讯的时候,我是什么样的更换我,我是我是我是全双工的,对不对啊,它是交换进行的,对不对?也就是说你每次进行SPI进行通信的时候,只要我们这个单片机给这个SPI发送了一个字节。好,那你发送的第一个字节,它那边就会给你交换过来一个什么呢?交换过来一个是不是就是咱那个这个状态寄存器的一个值啊,对吧?啊,一会儿咱们看的那个通信的时序就能看出来啊,这个需要简单了解一下,别的咱就不看了啊。好,接下来往下走,看一看咱们这个基本的通信的格式是什么样的啊?注意通信的格式是这样的,每次和SPI进行通信,我都得给他发送这样的数据。什么数据呢?首先是一个commandword打头,后边会紧跟着什么database,哎,每次通讯都是这样的一个格式啊。首先发一个命令,能理解这个事儿吧。完事紧跟着是你要发送,或者是要读取的数据,是这么一个逻辑啊。好,那可能光这么听,有点抽象啊,我们看一个具体的例子。比如说我们看第一个命令,这个命令叫做什么呢?叫做rregister,明显是什么操作读寄存呃readreadread读寄存器吧,对吧?
就是读这个芯片的寄存器啊。好了,那完了之后,你看它的这个可on的word是什么渴望的word是不是就是一个呃零零零后边跟上几个a对吧?这个a是什么呢?大家能够去想明白,哎,表示是不是寄存器的地址啊,是不是你得告诉人家,你要读哪个寄存器啊,对吧?哎,OK好了,那完了之后,前面这个零零零是啥意思呢?就是相当于是写死的固定的,注意,这是一个字节啊,一个字节八位嘛,对吧?哎OK这是固定的。好,只要我们那个芯片,它识别到了零零零就证明什么?是不是你这个单片机要读它的寄存器了呀,对吧?哎,就是说白了做一个命令的一个标识啊。好了,那后边跟跟上的是啥?你要读的那个寄存器的地址好,然后继续往下进行同学,再紧跟着后边这个信号线上传输的,是不是就是那个你读的什么东西?那个寄存器的具体的是不是直了呀?同学哎,就这么个意思啊OK好了,那这是数据字节嘛,对吧?OK好,那继续往下进行需要注意的一点,就是它是先把这个数据字节的什么?是不是第一字节给你发过来呀,对吧?哎,OK这个注意好,接来往下走。第二一个,咱们再看个例子啊,这个是啥写寄存器嘛,这是不是就是零零一跟零零零是不是有区别啊,对吧?然后后边紧跟的就是啥,哎,你那个寄存器的地址啊。ok好,那完了之后呢,那后边紧跟的是啥,你这不要写吗?对吧?嗯,你写你是不是得告诉你写什么数据啊,对吧?后边紧单的就是你要写的那个具体数据啊,就这个意思。哎,好,那现在大家应该已经对他这个SPI通信的一个基本流程有所了解了,对吧?哎,注意啊,先发一个命令,然后后边跟的是数据,当然是数据,可能是他发给你的,也可能就是你发给他的啊,好得看你是读还是写啊OK好,然后大家看一下这个位置,这个命令大家还熟悉吧,这个质量这个质量是干什么来着,是不是就是往那个发送的缓冲距里写数据啊,往发送的那个非里是不是写数据?说白了,你将来要想发送数据,你是不是得调这个命令后边跟上,你要发送的数据没多少同学,你看这个数据的长度是多少到多少?一到三十二个字节嘛,咱们是不是一个数据包里边的数据长度就是一到三十二个字节。哎,就这意思嘛。好,那同理这个是啥,应该就知道了,这是我我是读数据的命令吧,对吧?读数据的话呢,我是不是应该发这个指令,然后后边就接收他给咱们拿过来的数据就行了呀,对吧?不就这么个思路嘛,非常的简单啊。好了,其他的我就不再一个一个带大家去看了啊。呃,后边呢这个有很多都是封装好的,我们直接用就行。咱们了解它的这个工作机制就行。然后咱们看一下它这个时序啊,这是forsPI的这个时序,这个时序应该很好很好了解,这是写,这是读。咱们先看写啊,前面给大家讲过,写的话,你注意啊,这是MOSI这是不是masteroutputslaveinput呀,对不对?OK所以说这个是向谁是单单儿机向谁向这个芯片,是不是发数据啊,对吧?OK好,注意观察,你看可能能字有点小调,大一点。你看前边是什么?第一个字节是不是c什么呀?c就是啥意思command嘛,是不是不管哪个东西,我都是先得发一个什么命令,再再再跟数据啊,对吧?哎,所以这是command的八个位啊OK好,后边紧跟的就是啥了,是不是就是了呀,对吧?哎,datdatata啊,数据吧OK好,然后注意观察同学,你看在你发第一个字节的时候,这个是不是就是这个芯片,它会给你给你怎么着给你交换过来,一个是不是s啊?对吧,这个s是啥?大家应该能想到吧,是不是status那个所谓的状态寄存器啊,对吧?哎,他会给你交换过来一个这样的东西,你这个可以接收,你需要的话,就接收不需要就不接收了啊。好,这个完了之后,我们往下的同学再看这个读操作读也是一样的。你是不是也是先给他发一个命令,然后就是接收是不是他给你发的数据字节了呀,对不对?那同样的道理同学,你发第一个字节的时候,他会给你交换过来一个什么东西,是不是状态计行器的值啊,对吧?就这个意思。哎,好了,同学这就是他的一个SPI的操作逻辑,整体来看是不是不不复担啊。同学哎,好了,这个就过了啊。同学这个过了之后,我们再看最后一个就是寄存器的列表的这个东西咱不用看啊,就是我们能看懂这个结构就行。将来咱们需要哪个,咱查哪个就可以了啊,同学注意观察啊,呃我稍微缩小点,这个怎么看啊?注意这是一个寄存器,这是一个寄存器啊,它两个寄存器之间是有一个空格的。你看这个是不是空格啊,这是不是有空格两个寄存器之间,它是有一个空格的啊,这个应该能看明白,对吧?哎,好了,这是一个寄存器。然后呢,我们看一这个寄存器啥意思啊?这个寄存器首先呃看这address这个是不是我们当前这个寄存器的地址,零零,这是它的地址啊。好,完了之后呢,这是不是它寄存器里边的零到七,一共是八个位呀,对吧?哎,OK也能看明白啊,然后每一位的介绍啊,然后它的说明都有啊。OK好,那接下来就这样,我们找一找,就是咱那个一直说那个状态寄存器,咱们看能不能找着啊,来往下翻往下翻。哎,你看这儿是不是就有一个所谓的status啊,这是不是那个状态寄存器啊,对吧?好,那这儿提到的说呃,我们状态寄存器,然后呢,你每次使用SPI进行操作的时候,它都会是不是把这个东西作为第一个字节给你反复出来呀,对吧?哎,人家也说了啊,这就是咱这个所谓的状态寄存器里边呢,就是就是一些状态标志位啊啊,一些中断的标志位其实都会在这里面去置位的啊。OK你看哎这个大家看到了吧,这是这什么来着?最大重罚次数吧,是不是这个完了之后会有出现一个中断呀,对吧?这就是那个最大重罚次数的标志位,这个是什么?这是发送完成的标志位吧TSBS对吧?这个是什么?这个是接收完成的标志位吧,对不对?就这个意思啊。好了,那这个大家简单了解一下就行啊,呃我们就不用一个一个去看了,它寄存器还不少还挺多的。哎,好了,那这样一来的话呢,整个这个芯片的使用逻辑就给大家介绍完了,停一下时。

08-无人机-飞控项目-通信任务-SI24R1-驱动移植-上
08-无人机-飞控项目-通信任务-SI24R1-驱动移植-上
哎,好了,各位同学,那接下来呢我们就开始去做一下这个所谓的呃移植操作啊。呃首先呢先带着大家去找一下咱这个驱动在哪儿呢?我们找到无人机的这个项目上找到资料资料,呃,这边有一个二点四g对吧?然后这是不是有两个压缩包了,对吧?两个压缩包其实都差不多,我们用下边这个吧。呃,毕竟这个和我们使用的这个型号是完全一样的那然后给大家说一下,就是这个东西是从哪下载下来的啊,呃是这样,我们是在一个叫做追观察同学这儿是不是有一个这个哎,这是我之前搜的啊,叫做安信,可就是这是一个公司啊,呃它是做什么呢?其实可以看到它其实主要就是做物联网的,这个是不是无线通信的呀,对吧?啊,就是他这边呃呃一会儿就能看到它的产品中心里边呢有各种各样的无线通信产品啊,其实咱们就可以点开呃,看一眼。你看这里边有wifi,甚至有雷达,对不对等等啊,lower二点四g啊等等的,非常非常的多。那其实咱这个驱动呢,就是在哪,就就在在这下这儿,是不是有一个二点四,对,对吧?呃,完了之后呢,你往下翻下方呢就有这么多的东西,各种各样的这个模块模组啊OK。那当然下载的话呢,这个我们可以在这儿这儿是不是有一个所谓的开发资料啊,同学对吧?我们点进来稍等一下呃,有点慢啊,这个网络。好,那进来之后呢,我们一样还是找到这个二点四g的,是不是这个通讯模块啊,对吧?这是不是有一个二点四g模组系列,我们点进去啊,大家稍等你看就是这里边呢就有非常非常多的这个类型了。然后这里边是不是就有我们所使用的什么SI二四二幺,对吧?唉,这个是不是也有一个NRF二四l零幺。这个前面咱们提到过SI二四二幺,是不是就是咱们国产的,是不是仿造他做的呀,对吧?唉,好了,然后你往下翻,往下翻,下边就有各种各样的这个开发文档了啊,然后呢咱们就在这里边去找这个SI二四二幺,这是不是有一个二四开发资料了,对吧?这儿有一个SI二四二幺,就是咱们demo驱动程序嘛,对吧?把这个下载下来之后得到的就是把大家资料里发的这个了。然然后你要下这个的话话呢,到的是不不就就是这个个发对,对吧?就这样的就是大家可以把这个网站收藏一下,就是以后呃用得着的话,只要是跟无信通信相关的。其实都能在里边找到相应的这个示例程序啊。其实还挺不错的啊。好,然后大家呃要做的事儿呢,就是把这个东西给它解压一下啊。解完之后呢,我们来到这里,这就是我解压完之后的啊点进来进来之后呢,这实际上就是一个非常简单的一个小项目。这儿有个readmmereadme,就是一些使用说明,对吧?然后大家注意一下,你看他在做这个测试的时候,他用的是谁?不是咱们目前所使用的这个三二,它使用的是STC幺五等等等等,是不是STC还记得STC吧,咱之前学五幺的时候是不是就是STC的呀,对不对?
OK啊好了,那所以一会是大家会发现啊,就是它这个这个程序里边的这个个性各种各样的操作呢,其实跟咱们这个五幺的操作习惯是一样的啊,是这样的啊,它的内核应该也是五幺的内核啊。OK好了,那总之啊就是我们不能拿过来直接用啊,这个东西咱们还是得怎么着呢?还是得改一改的啊,好了,这个注意就行了。
呃,然后呢,可以看到这里边有一个useruser里边是不是就是用户代码啊,对吧?主要其实主要就是它这个慢点c啊啊,完了之后呢,还有一个SI二四二幺,这里边是不是有点h点c啊,这里是他给咱提供好的那个驱动,一会儿我们要做的就是就它这个驱动就行了啊。OK好了。那所以接下来呢我们就对这个驱动进行一个改造啊,呃来吧,我们现这个在哪儿啊?OK进啊,我们我们的这个INT这个目录下边INTinterface,对不对?呃,咱是不是得在这个下边去创建一个目录,然后把那两个文件给它放进来呀,对吧?哎,好了,我们现在新建一个文件夹,哎,跑哪儿去了?哎,怎么跳了了个文文件啊,呃二点四g我们就是二四g是不是就可以了呀,对吧?哎,OK好了,那接下来呢我们呃点进来,连来之后呢,把那俩文件给它往里一放就行啊,这conc,但是这个文件名啊,包括里边的这个函数命名什么的,可能跟我们目前的习惯不太一样,对不对?呃,大家你要是说想改一改也行,不改,其实也不影响咱们使用,能理解这个事吧。同学,我这儿改一下吧,改一下,改一下。这个看着舒服一点啊,来我们把这个给它重命名一下,这个我们其实只要给它加个前缀就行,对吧?我们叫做INT,没错,把SI二四二幺点HOK。好,这个改一下。完了之后,这个我们也是重命名。完了之后呢,我们点过来,然后呢回车好了,这就是我们这儿的两个文件,对不对?呃,然后我们在拿到这俩文件之后,咱别的不说,我们先快速的浏览一下,就是这俩文件里边都干了啥啥儿吧,定义义哪些内容?咱先看头文件啊,先看头文件啊,呃头文件这里边呢这个东西大家能看到了,这个是不是用来防止啥的,大家还记得吗?是不是防止重复引入的一个逻辑啊,对吧?啊?OK好,你看他这定义的这个标识,这个名字叫什么?
是不是?NRF二四l零幺啊,对吧?这时候咱前面说的那个就是相当于是那个原产的那个芯片嘛,对不对?
好了了,还有一些那个痕迹啊。行,咱们不多说啊,接下来我们往下翻,这里边它引入了一个所谓的config点h,咱这有这个东西吗?同学没有肯点,其其实里边它肯定是定义一些这个红啊等等这样的一些通用的东西,对吧?咱没有没有,不要谁删除这个没问题吧,各位同学哎,好了,往下走。接下来你看这儿啊,这是定义了,什么东西很明显,是不是定义了?哎,这是fisPI的,是不是那四个引角对吧?这个是芯片的那个CE眼角,大家还记得吧,整个芯片是不是有一个使能眼角啊?对吧?哎好,然后再往下这个是那个中断,是不是请缩眼角要定义了几个引角啊?OK你看就是这种书写方式,是不是跟咱们大家前面学的那个五标是很像的呀,对吧?哎,其实一会儿你看他这个c文件里你也能看出来啊OK注意观察同学,他这儿c边边就定了一个这样的方法叫做SPIreadright吧。你可以理解为是是不是读写呀,对吧?也就是说白了咱之前是不是写过一个什么交换这样的一个函数啊,对吧?就是那个意思,你看他怎么写的,显然他这儿是不是用的是软件模拟的方式,对不对?OK好,直接引角至一引角至零,引角至一直角至零。这明显是在用软件模拟SPI吧嗯,对不对?OK而且是用五幺那种方式去模拟啊。OK好,那应该是能够看懂的。当然咱这有硬件。SPI我们是不是直接用硬件就行了,对吧?所以这个函数一会儿咱稍微的改造一下就行啊。来,我们再回过头来看,这边这边呢定义了两个呃红啊,这这些引角其实实们一会儿用引角模西咱也用不上它,对吧?咱也用不上啊,我们直接用硬件的话,这个东西没用啊,对吧?所以我们就直接删掉,直接删掉,用到了就删掉啊。好,接着往下走。这个东西呢大家看一看,这其实就是定义了两个宏啊。哎两个宏你看是什么?一个是ADRvice一个是payloadviceweite,你可以理解是宽度也可以理解,是咱们咱们那个长度,对不对?哎,ADR是不是就是addresspayload,是不是就是那个数据负载呀,对吧?哎呃,说白了就是定义的长度,大家还记得吧,那个地址的长度是不是可以选择三个字节,四个字节,五个字节还记得不?哎,所以人家儿是给了一个五啊OK好,当然你你几都行啊啊,下下就就是配漏的pay漏的。我们前面也看过是一到三十二,是不是都以以对吧?三三十四节间,那它的长度呢是三十二。那这个当然我们到时候还得改啊,就是咱到时候到底需要发多长的数据,我们得自己设计对吧?
是多少,你到时候就改成多少就行了。我们这个先不动啊,好,接着往下走,你看这是啥?是哎,哎哎,哪去了。哎,你看这个是什么?是不是SPISI二四r幺里边所有的什么东西?可曼是命令啊,对吧?哎,大家还记得吧,我们在跟SPI进行通讯的时候,咱们的核心思路什么样的来着,是不是得先发一个命令,然后再跟上是不是数据啊,对不对?这就是它所定义出来的所有的命令。你举个例子啊,我们以这个为例,哎,哎哎哎,咱们以这个为例,这是不是readREG啊,对吧?这个是rightREG,也就是一个是读,一个是写寄存器,对不对?好,你看他这个写的是什么啊?呃,先看这个读寄存器,读寄存器写的是零x是不是零零啊,对吧?哎,大家来看一看这个是什么意思,看能不能看懂零x零零,哎,这个好像不太懂这个是什么意思啊?
雷s零零怎么用呢?将来同学你看啊,你要想读一个寄存器,是不是理论上应该是高三位,是这个,然后是不是低低呃,低五位呗,对吧?第五位是不是那个地址啊,对吧?哎,好,那一会儿你这个命令怎么用呢?这个东西这个东西怎么用呢?这大家能不能想明白很简单,就是你直接用他的这个命令后片,其实这个无所谓,你后边直接加上一个什么就行,是不是加上一个寄存器地址就行,一加是不是就组合成它这个所谓的是不是读寄呃读寄存器的命令了呀,对吧?因为它这个高几位就是零说白了,你你你你这个整体来看这个命令,是不是就是寄存器的地址,整体来看是不是就是寄存器地址啊,对吧?地址是多少?我这个命令是不是就是多少,对对吧?以这个可能不太好看着咱们看第二个吧,看这个看这个这个你看这是呃写寄存器的命令,对不对?你看人家定义一个什么是不是零s二零啊,同学,对吧?你想将来这个东西你应该怎么用?零x二零零x二零实际上相当于是你要转成二进制的话,应该是多少?零二四二零是不是应该就是零零一零零零零零,这是不是就是零s二零啊,同学对吧?所以将来他那个宏你怎么用呢?你是不是直接用零s二零加上一个寄存器的地址,就组成了这样的一个命令了?
是是不是这么个逻辑同学,你算啊,比如举例子,我那个寄存的地址啊,假如说是十五吧啊,假如十五十五的话,你这儿应该怎么着?同学是不是直接用这个零s二零,加上你一个十五十五页,就是是不是零s零f对吧,是不是这几位?第第四位是不是全置一,然后就组成了一个完整的写寄存器的命令呀?对吧?哎,也就是这么逻逻辑啊OK好,所一一会儿你就能够发现啊,他给咱们封装了一个就是写存存器的那样的一个命令,读寄存器,写寄存器的命呃,方法方法来,你拿到这边来看同学,你看这是不是有一个写寄存器,没没没问题吧。同学嗯,ok好,那完了之后呢,你看他这儿是呃怎么去做的啊,呃写寄存器,这个可能还不是很直观啊,不是很直观,咱们找找哪儿呢?
找这儿啊。ok你看这儿,其实他这个名字啊写的不是很合适。你看就是他是基本上都是怎么用的呢?这是不是在调用一个写一个寄存器的一个逻辑啊,对吧?你看看这这个值它怎么传进来的,是不是就是用那个rightr一键那个命令前缀加上了,这就是一个寄存器的一个地址,这是下边定义的,然后后边是不是跟的值啊,对吧?你看是不是就是组合起来组成一个命令啊,呃能理解这个事吧。同学大概是这么个逻辑啊,一会儿我们再详细的看啊,就是总之这就是它定义的一些命令。那这些命令呢呃跟地址啥的拼起来能够组成一个完整的这个命令。当然下边这些命令它就是固定的了。你看这个RD呃RXpayload,这个明显是读那个是不是配的呀,对吧?
呃呃,look好,那它应应的是零x六一。其实你在这个手册里边去找的话呢,也能够找到,应该是谁?同学应该是它吧,这是不是零x六一,是不是四加二等于六,这个是一吧,是不是就是他呀,对吧?就是他给你把这些命令呢都给你封装好了啊。但是这些命令呢,尤其就其实特殊的就是他俩,他俩这个命令不是固定的,你是不是得给他批上那个寄存器地址啊,对吧?那其实其他那几个命令是不是都是固定的呀,对吧?人就是给你都在这给你定义好了,哎,就这么个逻辑啊。好,这是所有的命令啊呃用这俩命令的时候,咱们特殊特别注意一下就行,别的就无所谓了。然后再往下,你看这是啥,是不是所有的寄存器的地址,人家都给你定好了呀,对吧?你看第一个config零s零零,你去找一下同学,我们实际上上午就看了第一个了,对吧?config零s零零是不是就是呀,对不不对,有的的存存地址址给你定义了,然后再往下翻各位。哎,这啊这还有几个特殊殊的这又这这不是地址了啊,这是statuusregister,是不是那个这叫什么寄存器状态寄存器吧,状态寄存器里边,它其实是定义了几个标志位的那个掩码啊OK好,那我们去找一下那个状态寄存器啊,同学来往下翻,往下翻这儿是不是有一个status来?哎哎哎,哪去了?这儿大家看到了吧,同学哎,好,那这里边呢有几个比较关键的这个标志位是需要我们注意的啊。呃比如说有谁呢?RSDR这个实际上指的是什么呢?指的是这叫什么?RS是不是接收的意思啊,对吧?这是接收到了一个一个数据包,接收到了一个数据包之后,那这个标志位它会质一。
那所以我们将来要读数据的话,是不是得看这个标志位有没有之一啊,同学对吧?好,那同理,那这个呢是发送完了一个是不是数据帧呃,数据包之后,它是不是会把这个呃发送标志位之一啊?对吧哎,是这样的啊,然后还有一个这这这个还记得这是不是达到最大的重发次数之后,会发生一个中断,然后这个标志位会质疑啊,对吧?
哎,好,实际上它这声明的这几个是啥呢?就是这几个呃相当是掩码吧,大家知道研码是什个意思吧吧。好,举个例例啊,同学咱们以这个MATRmaxRT为例啊,它给的是零s一零,对吧?你看零s一零对应到我们这里边应该是啥,这是不是相当于是注意啊,这是这是八位,对不对?
零x一零是不是也就是这一位是一,其余都是零呀,从上往下上面是高位啊,这四第四位是不是都是零啊,对吧?哎,你看是不是就是说白了,就是可以通过这个标志位呃,通可以通通过这掩掩码去找到咱们对应的这这三个标志位啊,对吧?
就这么个意思啊,那这这能理解这事吧。哎,好,那接下来我们往下进行啊,同学再往下就是它给咱们定义的一些API函数的。哎,这些API函数都有啥呢?我们来看一看。首先第一个就是一个innete初始化函数,其实初始化函数,这也没干啥,你看它这里边做了什么?初始化初始化管理点往上翻,这是不是那个初始化,它是不是就是对这些SPI的引角,是不是做了一个置位啊,对吧?这些东西咱要啊同学不需要SPI我们是不是系统会自动把我们进行初始化的呀,对吧?所以这个直接删,这个,咱也是直接删掉啊,咱就不要了。哎,好了,那接下来往下进行,这是定义了几个什么样的方法呢?
我们一个一个看啊,这个是一个rightREG这个叫做rightbuff,这个叫做readREZ这个叫做readbuff,对不对?实际上啊同学就是它这个a它这个驱动啊,它的函数命名非常的不规范,其实这个很容易让人产生这个就是误导啊,他说这个东西是叫做rayrite,而且看起来就是样写记读器的,对不对?那我下边这个呢,我这个rightbus我是写啥呢,我写的不也是寄存器吗?其实都是在写寄存器,对不对?就是它俩的区别是什么呢?这个是写一个字节,这个是写多个字节。其实你看它这个c文件里边的注释也能看出来。你看啊redREJ是不是叫做写写写单字节呀,这个是不是叫做写多字节呀,对吧?就这个东西让人看起来很很很难受啊。所以一会儿咱们改一下这个名字,我们把这个改成redbite,这个叫做red呃bit这个呢叫做reite,这这个叫做bread。哎,一会儿咱们改改之后就舒服一点啊。接下来我们再看下面这俩是在干啥?这个是brxmode,这是TSmode,这其实是在设置咱那个是不是芯片的工作模式啊,对吧?你想我们遥控这边是不是得设置为发送模式?我们以飞机这边是不是得先设置为接收模式啊,对吧?哎,它有这样的一个函数啊,然后再往下走,这俩就简单了,这是在干啥呀?这是不是一个是收一个包,一个是发一个包,是不是就是收发数据的呀,对吧?好了,这就是它这个驱动所提供的内容啊。好了,大家现在因为已经对它有一个初步的认识了啊OK那接下来咱这样,我们现在就着手开始对这个驱动进行改造啊,我刚才呢已经顺手把一些不需要的东西是不是给删除了呀,对吧?接下来咱们开始改啊,首先咱们先把什么改呢?先把这个类型改是不是我我我们现在没有u八这个类型啊,对吧?u八这个类型,其实它这个u八哪来的还记得吗?我们这刚才不是删了一个config点h吗?对吧?他在那里边定义的啊,好,我们现在就把这个玩意儿直接都给它替换成uint八t是不是行,对吧?全局替换啊,来吧,先来一个UU,然后呢,我们这儿找到这个呃uint八下划线t对不对?那直接全局替换啊,这个替换完了啊,那接下来我们再来到这个c文件,这边是不是也是直接全局替换就完事了呀,对吧?先把类型搞定呃这个搞定之后,那接下来呢我们进入下边一个环节,各位同学这个u进零八,我们现在是不是拿不到了,同学是拿不到,对吧?这个拿不到,是因为咱没引是不是任何相关的文件啊,对吧?所以这边呢我们稍微的调整一下,呃,我们现在h里边啊,现h里边引,那咱们把谁引进来,你要是单纯为了演这个类型,应该是引standint,对不对?但是咱这儿不要忘记同学,我们这需要用的谁一会儿需要用的SPI吧,没问题吧,同学所以一会儿呢,咱们这儿需要引入是不是SPI点h啊,对吧?但我们的SPI咱们配了没有同学是不是还没配呢呀,对吧?哎,所以一会儿咱们再去配就行了啊。OK那也就是这个SPI点h,我们就先给它在这儿,先放着就行了啊。
OK好,那所以演演演不过来,那所以这咱咱再好像往下改,也不太好改了,对不对?因为你SPI没拿过来,所以我这里边很多东西是都都整不了了,对吧?但这样我们我们先去先去配好SPI吧,配好SPI之后回过头来,咱们再去改它。这个驱动是不是要改起来舒服一点呀?对吧?哎行,我所以这个我们就先暂时置置一下,先搁置一下来,我们先停一下视频。

09-无人机-飞控项目-通信任务-SI24R1-驱动移植-中
09-无人机-飞控项目-通信任务-SI24R1-驱动移植-中
嗯,好了,各位同学,那接下来呢我们进入下边一个环节啊,我们先去把这个SPI配好,配好之后回来,我们再接着去改这个代码啊。好,那要配SPI的话,是不是得先打开q吧MS啊,对吧?来我们找到flag找到这个flag的IC啊,来打开稍等一下。呃,当然呢咱们配这个SPI的话,是不是得先去看一看,就是呃咱们的这个硬件原理图上边就是这款芯片,它跟我们的SPI几是相连的呀,对吧?啊,所以得去看一下原理图啊,咱们看一眼。哎,哎,好,那先去找一下原理图。原理图应该是在给大家发的资料里啊,找到呃搜无人机资料,二点四g完了之后呢,找a不是零,应该是找那原理图,对吧?然后找先先找飞控啊。好,那现在咱们去找一找,哎,就在这儿了啊,二点四g是不这个收发模块了,对吧?哎,然后呢,我们就重点关注一下,他给咱标出来的这几个引角就可以了。哎,好了,这实际上就是咱们所需要关注的六个眼角。哎,大家一看啊,首先我们先看这几个,这明显是和SPI相关的四个引角,对吧?
哎,然然后呢,往上传同学这儿,还有一个EN这是那个呃它当然这儿叫EN,其实它里那个哪儿,它那个那个手册里边叫CE对吧?哎,就是那个CE啊OK好,这个是呃IRQ他这那个拼写写错了IRQ对吧?interruptrequest,它写的是IRO啊OK这个大家注意就行了。好,那接下来呢咱们就把这些东西一并都给它配。好啊,来吧,我们先去配SPI明显他这儿用的是SPIE对不对?那我们去找一下,找到connectivity找到SPIE好,然后呢,我们这儿直接给他来一个,是不是全双工master就可以了呀,对吧?
哎,好了,那NSS这个咱们就dispi一对,不管,然后往下传同学,其实下边这些东西呢,我们找到parametersetting里边多数,那内容我们都是不需要去配置的。你像这个基础的算试配置啊,这个真的格式啊,呃这个datasize等等,这些咱们都不用管同学,对吧?咱们接下来呢重点看一看谁呢?看一下这个时钟时钟这块是不是需要配一个预分频器啊,对吧?
好,那可以看到默认是二的话,这个波特率是超了十八了,它会提示我们是不是不行啊,对吧?那你配成四实际上呢就就行了,它行了,但是谁不行?但我们这款芯片是不行啊,呃人家说他只测过就是十兆以上是可以,但是十八兆的平行没说,对吧?所以保险起见,我们再让它低一点,咱们给他来个八来个八的话,是不是正好就是九兆每秒了呀,对吧?这个它就肯定没问题了啊。行了,那之后呢,我们这个时钟的这个极性相位,这些东西我们就都用默认值就可以了,不用改它。好,下边这个CRC什么的,我们都不用管,也就是咱这其实只需要改一下,是不是这个呃时钟这个频率就行了呀,对吧?就这个东西啊,好,别的东西咱们都不用动。好了,这样一来,咱这个SPI就算是配好了,非常简单,配好之之后需要注意一下,检查一下这个个GIO对不对?
默认情况下,咱这个SPIE用的是PA五六七这三个眼角,对吧?但是大家看原理图上啊,是不是呃,是不是他用的PA呃,是不是是PA五六七,这个没问题吧。哎OK啊好啊,这个也能用能用,没问题。PA五六七嘛五六七。OK好,这仨眼角是不是就配好了呀,对吧?但是我们还剩下仨眼角啊,一个是谁?一个是NSS注意这个NSS指的是控制骗选谁的是骗选从级的,对不对?也就是对我们那个呃无二点四g无线通讯通图片,通讯芯片进行呃这个骗选的啊,所以咱咱这个眼角得用GPIO去配,对不对?哎,同理呢,下面EN呢还有这个IRQ是不是都是GPIO啊,对吧?
哎,好了,那接下来呢咱们去配一下,我们先把这个配一下吧。
这个是PAS,咱们去找一下啊,PA四呃PA四,应该是它叫NSS。所以我这是是这样,我们统一命名一下。这个叫做CEchip呃,chipselect呃,enable这个是不是按照咱手册来呀,对吧?这个也别叫NSS了,我叫我叫什么呢?我叫CS,是不是就是chip呃呃,chipselect啊,对吧?片角嘛,对不对?咱们就这么去命名吧。哎,好,那现在开始我先找PA四啊,呃这边直接GPIO就行PA然后咱们来找这个四,在这儿呢,对吧?那这个我们应该配成输入,还是输出模式呢?明显是不应该是输出模式啊,对吧?好之后呢,我们找到这个system括号和GPIO找到这个引角啊,刚才看了这个是那个CS引角,对不对?
我先起上名字啊,咱那个叫啥名呢?你就叫SI二四r幺,然后后边跟上一个下划线,咱叫CS,对吧?没问题吧。哎,好,这个就搞定了啊,同学那上边呢咱们去看一看这个CS引脚,我们应该给它什么输出模式以及默认值应该给什么输入模式是推完就可以啊,对吧?
那这个默认值给什么呢?哎,给高对不对?因为呃它的这个有效电瓶是不是低电平啊,对吧?哎,就是你低电瓶,它是呃偏选的啊。好,那这个给高就行了。接下来呢我们再去看一下另外一个这个引角啊,另外一个我们把这个CE先配了,这个是PA八,对吧?a八啊。好,你去找一下,应该是a八在这儿呢呃PA后边跟成一个八啊,在这儿哎,你点一下这个也是output就可以了。点点完之后呢,我们来看一下,就是先起名字啊,这个应该还是SI后边二四r幺后边来一个应该是CE,对不对?好,那这个默认值应该就是低电平了吧,它这个CE是不是给高的话,它是给它给个进入那个发送,或者是接受模式啊,对吧?对,默认咱们给没啊OK这个就完事儿了,也是特远输出啊。行了,那这样一来这几个眼角就配好了,现在咱们是不是还只剩下最后一个没了,最后一个这个IRQ引角的对吧?
那前面给大家讲过这个引角,它实际上是用来是不是通知我们的呀,对吧?比如说我那收到数据了,我那发生中断了,它是会通过这引角通知我们。但是啊这个引角前面讲的工作非常不稳定,有点问题,所以是咱们这个就不用它了,不用的话,你配不配都无所谓了。如果说它能正常处使用啊,同学你这个要配的话,你得配什么?这这只是输入模式吧,对吧,是不是人家是给给咱们单片机发通知的呀,对吧?你得得用输入模式,然后你的电瓶啊就是默认情况下,你是不是得有上上下拉呀,对吧?你的电瓶应该是给高还是给低的同学默认值就输入的话,输入的话是是得配一个上下拉电电电啊,呃呃,下下电电阻啊,对吧?你是给上拉还是给下拉呢?首先说了它是低电平有效,对吧?它会给你是不是下拉呀?所以我们平时就应该保证是什么?是不是上拉的一个状态,对吧?这个大家注意就行了啊,呃我这就不配了,咱们配了也不用啊。行,那也就是说我们配上这个这个加上下面这仨就行了啊啊,irq就不配了。行了,那也就是说咱现在需要做的配置就已经配置完毕了啊。那接下来呢我点一下这个generatecode点,嗯,哎大家稍等一下啊。好,那现在已经这个生成完毕了啊,完了之后,我们接下来回到就是咱这边来啊,回到这边来,回到这边来之后呢,呃,是不是这儿会生成新的这个呃有这个库文件呀,对吧?所以你现在再重新这个进行编译的话,编译我这个中断会处理。但是它新增的那个库文件,这个东西他要找不到,咱是不是还是得给它,是不是给它放上了,对吧?呃,哦这个报的是SI二四r幺的,这是我们刚才那个驱动的文件,对不对?哎呀,这个驱动文件咱其实放的有点早了,我们应该我们先干啥?同学我们最好我其实当时应该是先是不是去配这个SPI啊,对吧?所以这样我为了确保它没问题,我这样我先给它,我先给它移除出来,省得干扰它们,先给它放下来,放拿出来,然后呢我再呃再去编译,咱们先把那个基础的内容给它处理好,然后再去处理它啊。
好了,那呃你看我那个是不是freeRTS相关的驱动,现在它不报错了,是不是自动已经给我处理完了呀,对吧?哎,刚才刚才已经编译过一遍了,已经删掉了啊。好,进来往下走,你会发现这儿是不是有报报这个说法呀,对吧?这明显是SPI相关的文件,是不是咱们这个原文件里边是没有的呀,对吧?哎,好,那然后呢,昨天不是有同学说嘛,就是出现这个问题,咱们只需要在这儿,是不是重新导入一下这个项目就行了,对吧?确实是这样的啊,确实是这样的。呃,但是啊呃呃它导入的话,谁会导入进来呢?这个新的资源文件确实会导流,它不会把原来的这个includepass这些东西覆盖,但是谁会被覆盖呢?你像我们在这块儿做的编译器的这些配置,你像比如举例子啊,你像呃呃它这挡住了,你像这些配置,包括这个配置,这些里边的配置都会丢失。那里边因为这些配置我们是在是不是这个这个k这个在这个EID里边配的呀?对吧它是单独维护的,你把把o那边再导过来来之这些东东全全被覆盖了,就就全白配了,就能理解这个事的东西。所以我这儿呢,我还是我,我还是一呃单独添加吧啊,单独添加啊,这是大家注意一下就行,单独添加,我们先找到application,对吧?嗯,然后application里边呢先找到user,找到call,在这里边,我们右键添加文件,找到car,找到FRC找到咱们刚刚的这个SPI就行了。好PI进来了之后呢,我们再找到driver啊,往下翻,然后这里边也是添加文件,找到driver,找到这个啊,找到SRC然后呢我们往下翻,应该找SPI,对不对?是不是就是它呀,对吧?来添加原文件。好了,那这样一来的话,应该就算是搞定了啊。接下来我们再回到这边来,回到这个INT吧,就是或者随便找一个文件,就是让它把这个编译按钮出来啊,编一下。好,现在是不是已经编译通过了呀?各位同学,哎,那也就是说明咱目前的这个SPI相关的配置就已经都搞定了。哎,搞定了。那下来呢把这个视频停一下啊,呃呃呃,停停前停之前这样样,再把刚下来咱们是不是处理好的那那那几个文件再给它放进来,对吧?二点四GG我完了之后呢,我给它放到咱这个INT这个目录下啊,放进来们这位。好,那接下来咱们要做的就是处理这俩文件了啊,来停下视频。

10-无人机-飞控项目-通信任务-SI2
10-无人机-飞控项目-通信任务-SI2
来吧,各位,那现在呢我们就一起来看一看,就是他这儿给咱们提供好的这个驱动啊。好,首先这块他是不是用到了一个SPI呃RW的方法就是交换一个字节,对不对?哎,这个我们已经给他实现。好了,这个咱就不用管了,对吧?哎,好,接下来我们往下看同学,咱们先把它最基础的这些驱节,看一看最最底层是是不就就是一个字字节写个字节节啊,对吧?一个字节该怎么写的?呃,首先第一个参数,我们刚才提到了这个实际上这个唉,这个他没改过来是吗?这个RAA实际上我刚才说了,这个应该是什么?应该是那个是不是CMD啊,对吧?应该是CMD啊OK好了,那完了之后,后边才是你要真正写入的那个字节啊。OK好,那接下来我们往下进行各位同学,你看看看这啊呃注意,你看他这儿是不是做了一个片选呀?先拉低是不是写完之后再拉高,对吧,这是不是一共就是发发了两个字节,对不对?然后第一个字节注意,他是不是接收到了返回值了呀,对吧?大家还记不记,我们在跟他通信的时候,第一个字节它的返回值是什么?还记得吗?是不是那个状态寄存器啊,对吧?哎,你看他这是不是是用状态寄存器接收了一下,然后把这个返回出来了呀,对吧?哎,是这样的,然后第二一个字节是不是要发给他的数据,你要发给他的数据,他是不是不给你返回或者返回的数据是没有意义的呀,对吧?这个时候呃,你就不用接收了,你看是不是很简单呀,对吧?好,接着往下走,那下边写多个寄存器,那也就跟刚才其实差不多,只不过就是说怎么着呢?我先发一个命令,然后我后边的数据是不是通过for循环的方式给他发呀?嗯,对吧,是不是就这么个逻辑,这个就过了同学这是呃写一个和多个字节。然后接下来呢就是读一个和多个字节啊,那读一个或者是多个字节的时候,比如说我读一个字节,读一个字节,你给他发的,其实只有一个什么东西,只有一个命令,这个他用的REG,但其实应该是命令,对吧?他们应该都知道啊,我我所谓的命令指的是谁?指的是咱们这个列表里边是不是这些东西,能能能能能理解这事吧。同学啊,其实只有你在读写寄存器的时候,那是不是这个命令才跟地址是才跟寄存器的地址是有关系的呀,对吧?你像你下边这些命令,这这都跟寄存器地址没关系,都是命令啊,这一定要注意啊。好了,那接下来我们继续往下看啊,好读的话,那你是不是就是先发一个它,然后再接收返回值就完事儿了呀,对吧?然后把这个结果返回出来。对,这是读一个,那读多个,是不是就是用数组去接一下就行了呀,对吧?这个也很简单,都没啥可说的,这基本驱动,咱应该是知道了,对吧?重点重点咱们看啥呢?咱重点得看一看剩下的那四个函数。那四个函数一个是用来设置接收模式的,一个是用来设置,是不是咱们当前是发送模式,还有一个是发送,是不是这个数据,还有一个是接收数据啊,对吧?哎,咱们得看看这四个函数,我们快速的看一下啊,同学来我们先干啥呢?咱们先设设置这个接收发发模模式吧。我们们看看这这儿是不是是用来设置当前模式?为什么模式的为发送模式,对吧?好,你你看设置当前模式为发送模式,你看在这做的什么操作啊?首先ce是不是先拉低了,大家还记得ce是哪不CE是不是就是咱们当前的这个芯片的一个矢能引讲啊,对吧?大家注意观察看它的工作模式啊,你不管你现在处在什么模式,下边,你将CE置为零之后,他就会怎么着,同学是不进入待机模式啊,对吧?哎,好了,也就是他现在确保目前是没有处在这个接收和这个发射模式的,对不对?ok好,现在这个模式下,在这个模式下去干啥呢?去做一系列的配置,配置好了之后,你看它又干啥了,把这这意儿是不是拉高了呀,对吧?那拉高之后,他就又会怎么着,是不是回到这个接收模式,或者是进到这个什什么射射空闲模式啊,对吧,取决于什么取决,于是不是这个计算,其他到底一还是零啊,对不不对?学。ok好,那接下来咱们就看一看他这这都配置什么东西啊呃来我往这边稍微的拖一拖,后边人都有注释啊。首先你看他配的这个是啥写入发送地址。哎,我大家想想,我现在是不是要给某一个这个呃就是我的接收方发送数据啊,对吧?那你是不是得指定你的接收方,他他的地址是是什么才行啊,对吧?OK好,那这个怎么指定呢?实际上这样呢是通过一个寄存器指令的啊,这是通过一个寄存器指定的。但是大家都知道啊,我回忆一下同学,咱们那个最终最终发的那个包里边是不是会包含咱们这个目标地址还记得吗?对不对?OK但是那个包是我们去打包吗?不用吧,对同学是不是那个芯片自己打包啊,对吧?所以你就得告诉人家,你这个地址是什么,你就直接给他配在寄存器里就行了啊。好了,你看他这儿怎么写的,是不是调用了一个rightbest,问一下大家为什么是rightby好因目标标址址,咱是不是有三四五个字节选选对,对吧?是多个字节,所以你rightrightby好好,那第一个字节应该是什么来着,是不是咱那个命令啊,是那个是咱那个命令啊,同学OK这个命令。你看啊,我们现在是要干啥,是不是要把这个地址写到某一个寄存器里啊,对吧?所以这个命令你要按照我们前面讲的的这个接口逻辑来拼,你要把它拼,你应该用哪个命令同学写寄存器,时时咱咱得用这个命令吧,对不对?
同学这是写寄存器啊。OK好,那所以前面应该是零x零呃,零零零一对吧?
零零一,然后加上是不是那个目标寄存器的地址啊,大家能理解个事儿吧。同学,所以你看他这怎么写的,是不是就是SPIrightREZ我们点进来是不是?就之前咱们看到一个零s二零啊,对吧?后边又拼上了一个TXADDR显然这应该是一个寄存器的地址吧。TXADDR零x幺零。你去找的话,能找到这个寄存器啊,同学我们去看一下,我就带着大家看这么一两个啊,后边我就不再一一看了,就是咱知道是怎么回事就行,来往下翻。咱们找到那个TX呃ADDR呃status在哪儿呢?呃,这是RX这是不都是接收的地址啊,对吧?你看你看这个接收地址能配几个同学,是不是能配六个?为什么?因为是不是有六个通道,是不是可以同时接收数据啊,对吧?你是可以配六个接收地址的,但是你发送地址是不是只能配一个?嗯,是不是这个呀,对吧?能看明白同学它的地址是多少?零x幺零嘛?所以说你看最终拼成的命令,是不是就是零x二零加上那个零s幺零,是不是得到了一个完整的写命令啊,对吧?就这么个意思嘛?哎,好,那完了之后,我们再往后走,后边是不是就是咱那个数组数组是不是我们前面定义的一个这个呀,对吧?这是我定义好的,这个它驱动比定好的一个地址。但是到时候大家这个得改呀,改成自己的。好,完了之后往下走,这样还有一个什么是不是就那个长度了呀?对吧?好,这个长度是不是也定义了一个宏五,哎,这个长度应该跟谁保持一致,是不是跟这个速度的长度得保持一致啊?哎能理解这事儿啊。好了,那现在是不是这一行代码,大家就能够搞清楚了呀,对吧?接下来我们再看第二行,他做了什么事儿啊,来注意观察这儿,他说为了应答接收设备,那什么意思?他呃哎呀,他这个写的也不好啊,不是叫做为了应答接收设备啊,他其实是为了为了什么,为了接收什么,是不是接收方给咱们返回来的ACK啊,对不对?那我需要怎置着,是不是将我注意,这是在设成发送模式啊,我需要将我自己的,是不是那个我那个个个通道零对吧?设置设置置为我这个发送地址跟这是不是设成一样的呀?嗯,大家还记得这个逻辑吧。哎,上午给大家分析过了。所以说你看他这不就是在配置RXADDR零嘛点呃,零SC零。我们刚才看这个寄存器的列表,是不是咱们也看到了呀,是不是就把这个寄存器的值设置成了啥,是不是设置成跟跟我那个目标发送地址是一样的呀,对吧?这样一来就能收到ACK。哎,你看这这些逻辑是不是跟咱们上午讲的是一样的,这都能看懂吗?好了,然后下边基本上都是类似的模式啊,你看看他他这都干了啥使吧?通道流呃,通通道流呃,使能接收通道零,自动验答使能接收通道零对吧?设置是不是自动重发的这这延延长等时间,然后以及这这个发的次数啊,对吧?前面讲了,就是我如果果ACCK我多长时间没收到,是不是超时之后才会发送那个是不是那个呃才会重发呀?对吧?并且我重发的次数是不是有限的呀,对吧,怎么配都通过,是不是这个寄存器去配置,对吧?叫做做重发的trytryRETR是不是reretry的意思,对吧?都是和重试相关的次数啊,呃参数都在这里边配啊。好,那再往下呢,这儿还设置了一个这个很关键,同学这个就很关键了,这是什么东西,是不是选择射频通道啊?前面咱们讲过是不是我们目前的这个一共是有多少个信道,是不是一百二十六个信道啊,对不对?这个是不是就是在选择你现在要用哪个信道?那按照我们自己的写法,咱们的接收方和发送方信道,是不是也是用一样的类型啊,对吧?好,这个信道取值范围是多少呢?一百二十六个,一共是一百二十二十六个,对不对?那你取值范围是多少呢?这个得去看一下手册啊,同学你看它设置的是哪个寄存器,这个是不是设计的是RFCH啊,对吧?是不是就是这个寄存器啊,对吧?呃,RF就是天线的一个这个信道嘛,对吧?OK好,那所以接下来呢咱们去找一下这个寄存器啊。RFCH你就看它地址是多少?地址?零s零五,对不对?那我们就打开这块儿,找零s零五往上返零八零六零五,这是不是零五对吧?这是不就就是那个RCCH对对吧?OK对,那这块儿可以看到这个RFCH寄存器呢,它一共是有几位的同学,一共是八位八位。但是它这个第七位是不是reserve保留了呀,对不对?然后也就是只有零到六位,对第六位是有用的,对不对?
好,那完了之后,你看它的取值是什么?他说设置工作室的信道,然后呢分别对应零到一百二十五个信道,对不对啊?然后呢,信道间隔为一兆赫兹,然后呢,默认零二就是二四零二,那零零是不是就二四零零零一是不是就二四零一啊,对吧?所以咱们这能取的范围应该是从多少到多少,严格意义上来讲,应该是零到是不是一二五啊,能理吧,我们取值是不应该是在这个范围里边取值,对吧?但是有同学跟我说,之前大家自己做这个测试的,是不是有些同学已经给他设到二百多了,也能够工作呀?是吧尤其是这部分同学,咱们当时当时老师给大家分了一下,对吧?呃,也能正常工作,这个是为什么啊?我后来想了想,我觉得就是有可能啊有可能是啥呢?就是他内部的这个他内部的这个算法应该是啥呢?就是你这儿只要这儿给个值,他应该是在二四零零的基础之上,怎么着呢?给你加上加上。虽然他标注的是我的工作范围是二四零零到二五二五,对不对?但实际上呢,你要是超了这个范围,他可能也能挣,也能工作,但是不保证不保证稳定。我觉得他可能是这么一回事啊,所以大设设二百多也行,但是呃稳稳妥起见。咱咱们一会咱们在设置的时候候尽量还是怎么着呢?尽量在这个范围里边去能理解明白吧?
同学哎,零到幺二五里边去啊。好,这个一定要注意行,咱这样同学呃,技术支持啊呃啊,已经联系上技术支持了是吧?让频频一测试试看看咱们这也没有啊。OK啊行,就是咱知道一下这个事就就行。呃,就是我们尽量啊,还是在这个一零到一二五里边,零到一二五里边选啊,呃,然后呃具体怎么着呢?等后边咱们再有时间再看吧。呃,来吧,那接下来咱继续往下进行同学,呃,为了方便一会儿大家进行修改。我们把什么呢?把这个东西咱们给他提出来,提出来,咱们作为一个啥呢?作为一个宏也好,做一个参数也好好的时候是不是比较方便,对吧?我们在这儿们定一个,咱咱就直接接范范,咱咱底范CHNNNLL。这个呢如说说这儿呢就给它设置为四十,然后呢接下来咱们要做的工作,是不是就把这个controlc拿过来,哎,往下走,注意我这个四十是十进制的,四十,对不对?咱OK好了,拿过来,然后他这个注释其实写的有问题,他这儿给的四十,他说选的是不是零s四零,呃,然后跟零s不是一回事,对吧?啊,就是他注释有点问题啊,不用管这个个替换,然后注意注意RSmode需要设置我这个信道,我TSmode说用不用设置也要注意。你看这是TSmode在设置RRC是这个寄存器啊。对吧?所以这个咱们也是给它替换成它。那到时候大家要是改的话呢,是不是统一直接改这个位置就行了呀,对吧?这个大家一定要注意一下啊,一定要注意一下。行了。那这是关于mode啊。对了,再往下这边呢是在设置置功率,是在设置咱们这个就是无线电通信的这个传输输速率以及发置的功率啊,这个东直直接满满,它应应该高高就到传输功率。咱们不用管啊,这个都直接用就行。然后后边呢是在设置这个CRC校样啊,使能CRC校样。
行了。你看这一套下来之后,是不是TSmode,它就设置好了呀,对吧?就这么个逻辑,说白了,就是写各种寄存器啊,行,那我们就改成这个c了呀,对吧?那接下来往下吧,各位同学这个是在干啥呢?呃呃,这是RI呃,这是TSmode,是不是还有一个RSmode呀,对吧?RSmode,我就不带大家一点一点去看了啊,咱们就快速的过一下就行。RSmode。首先第一个这一定是在设置什么?是不是它通道零的这个接收地址啊,对吧?啊,因为我们现在一对一,我只用到了通道零啊,接收的时候,其他五个通道明白啊,所以说这边呢直接就是呃把它设置为是不是那个TSRS咱们两侧这个地址是不是都设置成一样的东西,对吧?哎,所以一会儿你改的话,咱直接改一个地方就行了。好了,那接下来往下走,下边就是什么通道零的接收使能啊什么这个信道啊等等这些我就不再一个一个去看了,就是大家知道咋回事就行了啊。哎,好了,那这样一来呃,发射模式接收模式的设置就算完成了,然后再往下再往下还有俩API一个是这是接收,是不是一个一一个数据包啊,对吧?好,再往下走,这个是什么?这个是不是发送一个数据包?那将来咱们去做测试,我们去发数据,是不是咱最终最终调用的,主要实际上是这俩方法吧。对不对?这方方法咱们下下个再再看,然然后俩方块里边是还有一个地方就中断这块,我们是不是还得处理一下啊,对吧?到时候咱们改一改这块的逻辑。小兰同学呃,咱们先到这儿,下课,先休息会儿,然后下节课咱们再处理这两个事啊。

11-无人机-飞控项目-通信任务-SI24R1-驱动说明-上
11-无人机-飞控项目-通信任务-SI24R1-驱动说明-上
这个嗯好了,各位,那接下来咱们就开始处理这俩文件了啊,这俩文件我们处理到什么程度呢?它至少编译不能报错,对吧?呃,得到这个程度才行啊。好,那现在咱就开始始呃,首首先我我们先进到这个头文件,看看头文件里边有没有咱们需要去改的东西啊,头文件实现在在啥啥,对吧?头文件是不是现在本本上已经不报错了呀,对吧吧?唯一需要改的,可能一会我把这个函数的命名改一改呃,让他呃好理解一点啊。行,接进来,我们再进到这个c文件里。c文件。首先这得引改一下,咱这是不是没有这个文件,我我刚才是不是给这个文件加前缀来呀,对吧?首NTSI二四二幺h。当然当然这个呃现在它也其实你编译它引引不着,因为我我还没怎么着,我我我加加一下,它在没在咱们那个INT目录。哎,在我这儿是不是自动已个加进来了呀,对吧?哎,在的话他就能找着了啊。行,那也就是说目前呃头文件差不多了,进来,我们重点改这个c文件啊,c文件这块呢可以看到,首先它上边定义一个什么东西,这是发送的地址吧。哎,那一会儿大家去呃自己去做这个移植的时候,这个地址是咱每个人尽量都要不一样的对吧?哎,尽量不一样啊。好了,然后需要大家注意的是这个关键词,咱这能用不?它有一个code。大家还记得code这个关键字在五幺里边的作用,不是不是就是把这个变量放在咱们那个内存的是不是代码区啊,还记得吗?
忘了之前咱们最开始写那个我到时候讲讲,我我要写那个ORED屏幕还记得吗?当时是不是定了一个非常大的数组啊?我在那个普通的这个数据区里是不是放不下了呀,对吧?是不是加了一个code放到代码去了,还记得吧?哎,这是干那个事儿的,所以咱咱这三二里论没有这个东西吧,没有的话,你就给它去掉就行了啊。OK好,这个完事儿完之后,我们接着往下翻。那这个方法咱是不是必须得改一下啊,对吧?肯定不能用这种方式啊,所以咱这直接现成改就行啊,这个非常简单,它是不是就是做了一个readright呀,对吧?这个是他要写的,这个是不是把它交换回来的数据是返回出来呀,对吧?不就这么个逻辑吗?
接下来咱咱就写呗,好个,我直接删了,直接删了好了。那接来咱们开始开始写怎么写,是不是直接调how后边跟上一个SPI后边再来一个啥,咱应该是有一个transmit加receive吧,是不是就是这个函数transmitresave对不对?好,那现在我们就开始往里传东西了啊,那一共需要传这那么一大堆的参数来一个一个来。首先第一个就是SPII一的这句句柄,对不对?好,那第二一个参数是啥?
是我要发送的数据吧,我要发送的数据是不是应该就是它这个参数对吧?也就是应该咱们那个是BYTE,对不对?BYTE啊OK好,那完之后,当然这个得是一个指针吧啊OK那接下来往下进行下边一个是什么?呃,下边应该是交换回来的,也就是咱们收到的数据,对吧?这个东西咱是不是就得声明一个变量的东西。哎,声明一个啊来这边我们来一个uinint八t对吧?好,那完了之后呢,我们随便取个啥名字就行,这个就不能叫bat了,我们叫做呃result吧。RESUSresult一个结果吧,对吧吧?哎,完了之后呢,我们把这个结果给它扔进去啊。OK好,那完了之后呢,来来一个这个之后,我们再往下进行,下边,咱们要给它方程啊,呃下边是不是要放size啊?我们size是不是就是一同学对吧?OK好,再往下进行。呃,下边咱们再放的话,要放的应该是一个超时的时间。这个写个一千是不是就行啊,对吧?哎,好,完了之后不要忘记,咱得return,谁得return这个result吧,对吧?RESUFT哎好了,那改造完了,你看这就是移植驱动嘛,对吧?呃,然后这是一个静态的方法,也就是只在当前文件可用,咱就留住它就行了啊。行了,接着往下走,这个完事儿,完了之后,接下来下边呃,还是有些东西需要咱们去改是吧?
啊,比如说我们以这个为例,你看就是这个函数它的作用实际上呢就是写什么?就是写一个字节,大家能想明白这个道理吧啊,就是写一个字节啊,写一个字节,然后它这个参数是什么呢?
这个参数其实也不是也不一定是这个寄存器啊,这个这个参数应该是什么呢?应该是一个命令。呃,因为因为咱们前面有个就是他封装这个函函,名命名的很恶心啊。其实他是这样的同学,我我们稍微回顾一下同学,我上午是不是给大家说了,就是咱这个SPI在进行通讯的时候啊,就是第一个芯片是这规规定的吧。就是你所有的通信都应该是怎么着呢?是不是先发命令再发什么再发数据。对对,所以它实际上啊第一个字节应该是什么么?应该该是个么?对,是就是寄存器的地址址,这大家能想明白这个事儿吧OK啊,好了,那所以这个东西就不能叫rightREJ就是名字命名的很恶心。这个参数呢也不是REJ啊,后边这个是真实的数据,这个没毛病,这个应该是啥呢?这应该就是rightbite,就是往里边写一个字节。完了这这个第一个字节应该是啥呢?应该是你发送的那个是不是命令啊?对吧?OK好,第二一个才是你后边跟的数据是不应该是这么个逻辑啊,应该是这么个逻辑啊,就是它这呃整的不太好。所以咱们这样我们统一的去改一下这个东西啊,怎么改呢?很简单,我们来到这边来呃,这是不是叫做rightREG啊,对吧?我们直接摁一下f二,f二是不是可以把所有引用它的地方都给它改了呀,对吧?
来,咱们统一修改f二啊,这边呢哎哎f分拿过来。完了之后呢,这个我叫做INT,后边跟上一个SI二四二幺,咱们就叫做rightBYTE是不是就是rightback呀,对吧?好,回车呃,回车之后,他这边好像是没没同步修改,对不对?我我们编译一下吧,编译一下,他可能还没有建立起来这个联系啊呃OK好,那编译完之后,你会发现他这里边是不是会报很多的错误啊,对吧?呃,那报错误是因为报什么,为什么报错呢?我们就那那我们就先这样,我们先把这个报错修改完,然后再去改这个名字吧,要不然的话,他这是不是联想不到啊,对吧?他没法改啊。好,那注意观察这个报错很简单,哪报的错,是不是什么CSN等于零CSN等于这是在做什么?是不是在做骗选呀,对吧?你那但是我们现在是不是不能用这种方式了,对不对?所以咱这样我们去呃处理一下,就是他的这个骗选的这个这个这个逻辑啊,其实除了这儿之外,你看下边还有基础报错这个CE它是不是也要置零也要质疑啊,对不对?你看五幺零不是都是这种写写法啊,对吧?但是咱这不能这么干啊,所以我们这怎么着,咱们定义几个红吧,咱们定几个红就完事儿了。对不对?来我们写几个红啊,来来到头文件这边儿代码的逻辑,咱们最后再看。因为咱现在他这个还没法看啊,来现在咱们先先先先处理完这个代码的报错啊。好,来,我们这DEFIE。好,那这边咱就是啥,我就叫SI。比如说呃二四r幺后边呢,我们来一个CS,哎,后边我们来一个LLL是不是就是拉低呃,然后h就是拉高啊,对吧?嗯,OK好,那接下来我们往后走啊,呃后边大家应该写啥呢?你看才给大家提示的是不是这样的啊?
呃,howGPLredpin,那找到part找到pin,那拉拉低嘛,这个拉低拉低是不是就啊,对吧?那我们点一下能跳过来,那就说明没问题。哎,生成的这个代码代码是不是正好是正确的呀,对吧?好,接下来我们回车再让它呢给我们生成一下这个这个resigh的h也没问题,对不对?好,接下来呢我们再替换一下啊,这时候我们再来一个SI后边跟成一个二四,应该是r幺。咱还有一个是是不是CE啊,对吧?哎,CE再来一个l啊OK好,后边也是一样的思路。好,这个往下走。哎,h那这样一来是不是就完事了,我们之前是不是经常用这种方式啊,对吧?之前与软件模拟的时候就都都是这么干啊。好了,那这个咱们就拿过来了。拿过来之后,我们先把这里边的所有东西给它处理一下。
所有的CE等于零,我们都肯上f,咱们给它替换一下,替换成什么?是不是替换成我们刚刚的那个呃这个我们去复制一下啊,应该是CE漏吧?是不应该是这个呀,对吧?所有这个都给它替换过来啊,找到c里边来拿过来,这个是不是就替换完毕了?
那所有的CE等于一呢,是不是都给它替换成这个是不是h就可以就了呀?同学对吧?来,我们拿过来这个没问题吧,同学哎,好了啊,现在我们基本上就给它处理完了啊。呃,哎我看一下这个方法,呃,这个方法大家注意观察一下啊,这儿是不是有一个什么t设置TSmode呀,对吧?那它这有CE等于l,但是他那个CE等于h,是不是这个驱动有点问题,他是不是把它给注掉了呀,对吧?但是这这个不能注啊,这个你得给它放过来,这个一会儿大家也注意一下这个事儿啊,就是它这个都是成对的。你看上面那个上面这是不是CELCEHCECEH啊,对吧?它这个应该是驱动写的时候,不小心给它注的啊。呃,这个大家注意一下就行,给它拿过来就行了。行,我看还有没有这个问题啊,呃,这个这儿替换了,应该是该替换的地方应该都差不多了。哎,这个这个没替换,这个是那个CS的对吧?CS我们也替换一下啊。CS是f应该是CS等于一的那个,反正有点麻烦啊,这有点啰嗦,这个东西啊。好,那我们统一都换成是不是CSH啊,对吧?替换呃,然后等于零的,哎,我们这个都给它改成,是不是low啊,对吧?替换呃,哎这个哦,他这个啊他不叫CS,他叫CSN是吧?那就CSN我去那那这这这这这个这个来拿过来。好,这个没问题吧。然后这个等于一的这个就等于h。哎,好啊,但是这个还是替换不干净啊,因为他这儿是不是有有些地方有空格啊,对吧?那那那就手动改一下啊,这就改看还有哪编译一下,看哪还有报错啊,来吧,找还有几个地方呃,应该是在这儿,这儿,是不是也是给它改成CS等于呃CS漏就行了,对吧?
CS漏啊。好,那还有这个位置,这个位置应该是CSH大家千万细心啊。不要改错了啊,呃,这个改完了,这个没改完,这个改成CSL就完事就完事儿了,就再编一下啊,再编一下,还有一个是吧,还有一个应该是在在这儿呢。哎,这儿这个就是啥了呢?这个是不是他用了一下那个IRQ那个引角啊,对吧?但是我前面给大家讲过,就是咱这个IRQ引角是不是有点问题啊?对吧?所以我们就不用这个了。那这儿这个逻辑一会儿咱们整体得改一改。
所以这个我们暂时先不处理啊,这个我们就先给它注了,同学能理解吧,先注了,先保证咱这个编译是能过的啊,来走变异过过敏过内粉。呃,这次基本上是过了,对吧?但是好像还有点问题,哪儿有点问题呢?他说的是这个头文件里边的,是不是这俩红有问题啊?同学来我们找一下这俩红是哪个红哦,这说了一个是readREG,一个是rightREG对吧?呃这个是怎么回事?我给大家解释一下,这个正好是跟咱们号库里边的代码重了。你看啊同学号库里边也有这俩红啊,你你直接全全局搜索一下,你直接readREJ,对吧?你拿过来,你放在这个位置,直接搜,你看是不是咱们这个SM二,这里边也有这样的宏啊,对吧?撞上了。所以这个呢咱们必须得给这俩东西,给给他改个名字,能理解这块事吧。同学千万不要那个啥不要撞上啊,这边你不要全局修改,你不要这么改啊,有的同学学会了,我直接f二一下,我把所有地方都改了,你改这儿的话,号库那边是不是也改了,千万不要这么改,这回你只能手动改了啊,只能手动改了,这边我们加个前缀吧。SPIreadREJ拿PI是不是readREG,是不是就这么就行了,对,对吧?好好,那那样样这这这同吧,那我们来到这个c文件,这边是不是用它的,咱们都得跟着改下,对吧?哎,全局替换了,就啊来先把这个拿过来拿过来,应该是原来叫readREJ,我们替换成SPI是不是readREG啊,对吧?唉,替换好,那是不是?还有一个rightREJ啊,对吧?RITEwriteREJ。那这个呢也是替换成writeREJ就行了啊。好,所以你看移植个驱动其实也不是那么省劲儿啊,来,咱们重新的给它编一一下。好,这回是不是就全通过了呀?同学,哎,这回至少代码不报错了啊,不报错了。接下来呢我们进入下边一个环节,我把这个代码的名字我给它规整规整。呃,你要是你要是能接受不规整也行,我还是希望规整一下啊,要不然这个太不好理解了来吧。那现在我们开始去做这个相应的调整了啊。呃,首先我们把这个先给它命名一下,哎,他说找不到这个含义了,这个刚才是改成功了吗?这边我哦哦,他那个函数名上是不是也带这个?哎呀,我天这个太恶心了,那那咱这个再把这个函数名给它去了吧,就没没事,只有函数名无所谓,只有函数名无所谓呃,对,应该区分一个大家写,对吧?刚才呃但是咱们没没做啊,没做没做呃,撤一下撤一下是不就就了。对,对吧?撤一下完之之后,我们一下这个呃,然后呢,这边是不是可以点一下这个就是呃AB啊,对吧?这个就能够区分大小写了啊,呃,找到它,然后这个是有大小写的吧。呃,那我们应该是找这个CTRL咱咱得得得得替换这个这这回是不是行了,这不行了,同学怎么怎么二十项了啊?这确实二十项,因为这里边有好多地方,是不是都都用到了这个红了呀,对吧?行,应该是这么替换啊。好,这回应该行了。来,那我们再把那个谁这个有点有点点,有点坑人啊,这个东西手动替换一下吧。哎,大家没被我绕晕吧,就是就是就我就是想把这个名字给它调一下啊,我再把这个函数的名字我再回原原来啊,原原来叫么来着,原来是不是叫这个呀,对吧?啊,我再给它改回来啊,好拿过来,然后这回我们再进到这个c里边,我再重新替换,好,再替换回来就行了。行,这这回咱们再编译一下啊,别别晕啊,别晕自己改的时候也是一样。这个东西反正用人家的就是没没那么顺啊。
行了,我我现在是不是已经改回来了,同学呃,他原来的函数是不是要这个呀,对吧?哎,我现在这个呃函数名没动,但是我把它那俩红的名字给它改了啊。行了,那接下来咱们这样同学,我们就可以去对它这个名字进行这个调整了,这回就可以全局修改了,直接摁一下f二f二。
这边呢我们首先给它加个前缀啊,规范一下,然后后边我就不叫rightREJ了。它其实就是说白了写一个字节,咱们就叫做rightbite,是不是就可以了呀,对吧?好,那咱们现在直接回车,那这回注意观察我们来到c里边,是不是所有的这个就是rightREJ它就都改成rightbat了呀,对吧?你看这块是不是都改了呀,对吧?好,这个完事儿,接下来呢我们把它的什么?对对对,我们把它这个参数名也改了,这也不是REG,这应该是那个命令,对吧?所所这这边我们们也只向它它一一f二。那那这所所有的这形参参g它就一一就就给它命名为CMD是不是就是的呀?对对,好,回车好,那他问我都要要改些些这个函数里边的,我们这里边都改,你看是不是就是呃这四个函数啊?对吧?都是命令啊,都直接给它改的,我们点击应用就可以全选上啊,点应用好就都改了。commcMDCMDCMD是不是都改了呀,对吧?哎,好了,接下来往下进行,下面再改。第二个名字咱们都给它调整调整规范了啊,这个来一个INT后边呢我们这个叫right,别叫什么buff了,你就直接right,but这是不是好理解啊,对吧?哎,好了,那接下来呢我们这儿直接这个回车懂你好,替换完毕,下边这俩也是一样的,摁一下f二,这个也是先加一个缀INT下划线SI二二二幺后边边上一个read的个biteBYTE啊。好,直接回车考定,这个也是一样的。f二好,这边呢我们来一个INT下划线SI二四二幺,这个叫做read次bieYTES对吧?回车好了,那这样一来的话呢,我们整个的这个逻辑就算是清楚了啊。呃,首先再明确一下它的作用是像这个SPI是不是写多个写一个字节呀,对吧?哎,然后呢,这个是写多个字节,甭管你写几个字节,你在发送的时候,你的第一个字节都是什么,是不是都是命令啊,对吧?
然后后边写一个字节,还是写多个字节,指的是后边的数据,对吧?你要是写一个字节,是不是就是一个uent八y六就行,写多个字节,是不是得给人家一个数组啊,对吧?就是这么一个思路啊,同学哎,好了,那读的话也是一样的道理啊。行了,那接下来呢我们就回到这边来,呃,这俩也改了吧,这个是不是也给它加个前缀啊,对吧?也加前前缀啊,这个咱们叫做INT看划线啊。好,这个去掉RXmode等你这个也是一样的,加前缀啊。呃,大家你要是觉得啰嗦,这个东西你不加也行啊,都可以都可以啊。这个是它。然后这个再加最后一个前缀就完事了,加IND或者你到时候直接复制我这个也行,反正这个都是都是抄嘛,我这也是抄的,你抄我的也没啥区别,好,拿过来。嗯,行了,那这样一来,我就已经把这些函数是不是都调整好了呀,对吧?ok调整好了之后,接下来咱们先编一下,看看能不能过啊,能过没问题,没问题了之后接下来咱就可以去读一读他写的这个驱动了啊,来吧,那现在咱们就正式开始啊,我先把这个视频停一下啊。

12-无人机-飞控项目-通信任务-SI24R1-驱动说明-下
12-无人机-飞控项目-通信任务-SI24R1-驱动说明-下
行,好的,同学。那接下来呢我们一起呃往下进行了啊。呃,接下来呢咱们把这个发送一个包和接收一个包的这个函数,咱们再来看一看,然后看完之后咱们就可以开始去做这个准备去做这个发送和接收的测试了啊。那么我们先看第一个,这就是接收一个包,对吧?好,那前面给大家讲过啊,你正常情况下,你接收一个包应该怎么接收,应该怎么接受来着?同学要想接收一个包的话,是不是按照他正常的工作流程啊,来看一看。同学,你按照正常的功能,那是怎么接受我呃,我们找他的那个结构图就行。看这正常的情况下,你呃这个芯片它收到一个包之后啊,它它正常会怎么着呢?
它是不是会把这个包进行这个所谓的解调,对吧?解调之后呢,放到哪儿?放到是不是这个RX恢复里边啊,对吧?然后需要给大家明确一点,就是这里它只会放什么,是不是只会放那个数据包里边那个配漏的呀,你像什么那个前导码啊,什么那个控制字啊,这些是不是全都没有了呀,对吧?
它只放这个配漏的,也就是我们只从这里边读配漏的就行啊。好,那我们这边怎么知道它有没有收到呢?呃,两种方式,一种是它会通过中断通知我们再一个我们是不是通过轮询的方式啊,就是两种方式啊。那我们这其实最终采用的是一种轮询的方式,一会儿大家就能看到啊。好了。那所以接下来呢我们看一看他这是怎么去写这个接收方法的啊,来注意观察同学。首先看这儿,这是在干啥?同学这是在干啥?是不是在readbite呀?对吧,readbit是不是读一个字节呀,对吧?OK好readbite你正常情况下,你看它读的是谁啊?他直接是不是把这个status寄存器的地址给扔到这里边来了呀,对吧?其实说实话,它这个写法呢就不是很规范啊,规范的写法,这儿应该怎么着呢?应该是SPI后边该是谁?它这实际上是在读这个寄存器的值能力也开以吧?同学他应该是这么写,但是大家都知道SPIreadRED那个值是不是就是零啊,说零,你后边拼上这个地址,那是不是最终结果还是那个地址啊,对吧?这个status那个寄存器的地址啊,OK他读的是状态寄存器,为什么要读状态寄存器呢?各位同学是不是状态寄存器里边是有我这个发完一个包和收到一个包的,是不是那个那叫什么来着,是不是相当于是标志位的呀,对吧?哎,好,那我收到一个标包之后,那哪个标志位会置一,大家还记得不?我们找到status零s零六是吧,那零零七是吧,是不是RSDR,而这个是一个收到一个数据的一个标志为二,对吧?OK好,他其实是在读这一位啊。好了,那先来看一看,就是他首先他读了,读完之后呢,这儿是不是就拿到了这个state的值了呀,对吧?
好,拿到之后,他紧接着后边又往这里边干啥了,又往这堆干啥了,是不是又写了呀,对吧?写的目的是干啥呢?是清除这个RXDS终端标志位就是这个标志位不会手动清,不会那个它自动清除的,必须我们手动清除。哎,好了,那它这是在做清除操作。好,接下来我们往下走,注意啊,这它它它读完之后是不是这个状态寄存器的值,我们已经保存到咱们自己这个呃内存里边了呀,对吧?它清除是清除哪儿的,是清除,是不是那个芯片里边了呀,对吧?所以无关紧要啊。好了,接下来往下走,这边它要做的事就是干啥?唉,说白了,就是判断一下我们当前有没有收到数据吧,对吧,怎么判断,是不是就是让他捋一下那个掩码就行。RSDR的掩码零s四零是不是就可以直接定位到哪一位?是不是这一位是对吧?RSDR你可以算一算零s零零。是不是是正好定位到这一位呀,对吧?哎,好了,那这个完了之后,我们先发一到这边来。那如果这个东西语完之后,它不等于零同学,那就证明什么是不证明DXRSDR那那位是是一了呀,对吧?是一了,说明我收到数据了,收到数据之后,接下来咱们要做的应该是啥?是读是读非eo同同,是不是读读el,就说明我就可以读数据了呀,对吧?就这么个逻辑辑,那对吧?所以说你看这块怎么做的的fael是不是就得去调用readvice这个方法呀,对吧?那读fael大家要注意读fael,是不是得去先发一个指令,然后再接收数据,对吧?好,那读fafo是哪个指令了,也可以看到读做命令或者命令啊,是不是就是RD就是readRSKO的呀,对吧?说白了就是这个零x六幺嘛,零s六幺,你是实对应到手册上面,你也能找到,这是寄存器,咱们得找那个命令啊,找命令呃,找命令往前翻呃,是不是就是这个零s六吗?这是不是就是read那个配漏的呀,对吧?说白了就是readfafo啊。好了,那回过头来看,这这是不是就开始读了呀,对吧?那读完了之后,我接下来要干啥同西,哎,得手动的去清除一下这个RSfafo也得手动的清除再行,它不会自动清除啊,好,手动清除。那它怎么清除的,是不是RXright的一个bit呀,对吧?把谁是不是发了一个指令,后边跟那一个数据啊,对吧?是不是就是flashRX显然它的作用我们就看名字就能看出来,是不是就是清除,是不是那个RS那个fafo啊,对吧?那这个东西你看它的手册已经对应上了,咱们就不看了。好了。那这个完了之后啊,return了一个零,说白了,就是告诉啥告诉呃,是不是那个方法的调用者,如果是零的话,那就说明你收到数据了。如果是一的话呢,是不是就说明没收到数据啊?因为我你想啊,就是我某次调用这个方法的时候,某一次我调用这个方法的时候,我读到的这个状态里边的这个标志位是不是可能没质疑啊,没质疑,是不是就是没数据没数据,它会给你返回一个一有数据会返回零返回零的话,你就去读,你给他传进来。那个是不是八份指针就可以啊,对吧?就这么一个思路啊OK好,所以这个方法其实将来咱们需要循环不断的去调用的吧,这也是轮询的方式,咱没有用中断的方式啊,这个大家注意一下就行了。好,那现在怎么去收一个包,咱就已经掌握了,对吧?哎,好,接下来往下走,再看怎么发一个包啊,好,发一个包,其实跟它的思路差不太多啊,发我们其实不用管那么多,不用管它怎么打包,怎么发送,我们只需要认准一点就行。往那个是不是发送寄存器里呃,不是那个发发送的那个那个那叫缓缓缓冲区里,对吧?那个非负里写是不是就行了,对吧?你写到那里,它自动的就发送了,就这么个逻好,来看一看他这是怎么做的啊。首先你看这儿上来之后,是不是就干这个事儿了,是不是就是rightbiice,然后WRTSpayload,这个明显是什么命令,是不是就是发送那个要附带的一命令令。
对吧?零XA零这个就会把数据怎么着呢?把你这个八份给他写到哪儿,是不是写到那个fafo里边啊?对吧哎,然后这块儿注意观察一下,同学这里边呢是有一个啥的,是有一个这个要写的数据的长度的对吧?因为咱们这个方法这是不是得传一个长度啊,对吧?我这个长度是目前咱们是固定的三十二个字节,到时候需要改的话,咱们再改啊。行了。那这个是不是就完事了呀,对吧?呃,但是这个完事之后,它并没有直接就返回这个这个这个方法没有直接返回啊,他他干啥了呢?他会在这儿等你看它原来的含义是什么啊?他这会怎么着,会会等会等谁会等IRQ这个引角是不是变为变,为什么?第一吧,它等等于零是在等它变成零吧。啥意思?是不是如果等于一,我我就一直外绕循环吗?是不是等于零,我就会退出这个循环呀?是不是就是它是在等这个IRQ眼角拉低前面讲过是不是怎么着呢?是不是我们那边发中断了之后,那个呃这个是第电电平,为它会把这个引角拉低啊,他是在等这个事儿啊。好,那他具体等的是什么?说的是等待发送完成,因为咱们前面讲过,就是我一个包,我现呃看看咱们看哪儿啊,就就不用看了,就回顾就行啊。我们发送的流程是怎么着呢呢?这芯芯片首先会把这个包怎着呢呢?不是通过咱们这个天线发送出去啊,对吧?发送出去之后,这个芯片是不是会会行行个所谓的的等啊,对吧?停下来等待谁ACK的到来?OK好ACK来了之后,是不是这个包,它才算是发送完了呀,对吧?哎,这才叫发送完成啊。OK好了,那完了之后需要给大家说明的一点就是啊呃这个收到ACK之后,就是这个收芯片啊,咱们这个芯片收到ACK之后啊,它实际上会怎么着呢?是不是也会产生一个发送完成的中断。这个大家还记得吧?呃,你要忘了的话,你就看一下这个这个这个东西,看他那个发送的流程啊,应该是在在这儿吧,在这儿,你看这是发送,对不对?哎,这个是他接收方,对不对?你看发送方是不是在收到ACK之后会怎么着会产生一个TXDS中断呀,对吧?哎,是这样的啊。ok好,那实际上他这这个等就是在等啥,是不是在等那个TXDS中断呀,对吧?其实在等那个但实际上大家要知道的是,他这最终一直等等等等等等。来的可能并不是那个中断,他还可能等等来另外一个中断。大家猜他应该是哪个?我发送了一个包,我一直在这儿,等我等来的,可能是另外一个终端,可能是哪个终端,是不是maxRT那个终断,也可能是它它会等到这个终断吧,能理解这个儿吧。同同学这啥意呢?我我这边一一等等ACK但是我一直等不着。按照前面的分析析,一直等不着的话,它这块儿就会是不是自动重试啊,对吧?那自动重试一直重试一中式,但是是不是最终会有一个最大的重试次数啊,对吧?超过最大重试次数之后,是不是就不再重试了,然后会发起一个什么中断来着?maxRT最大的重试嘛,retry嘛,对不对?能想起来吧,同学,所以它这最终等等等等。来的可能是俩中断啊,所以你看一看同学呃,这儿如果说变成零了,也就说白了中断是不是来了呀,对吧?来了之后呢,它这就怎么着了?对,不是读了一下这个状态寄存器啊,对吧?读完之后是不是立即又清除这里边的那个标志位了呀呀,对吧?你看它清除的时候是不是可能会清除,它也可能清除。那这个中断啊,对吧?你就不用管。然后呢,你看下边是不是人做判断了?如果哎maxRT置位了,对吧?超过最大重事事事了了,是超出了个个状重次次器啊,对,直接return一个什么maxRT呃,说明我这个是没有发送成功嘛,对不对?好了,那完了之后,如如果state里边的TSDS这个标志位置位的说明什么?说明我是不是发送成功了呀,对吧?哎,然后如果这俩情况都不满足,那直接它就定义成发送失败了,这是不是它目前的一个核心的逻辑啊,对不对?
OK好了,那这个大家应该能看明白啊,然后咱这儿呢就不能用这种方式了。我们这种方式不行啊,因为它这个引角确实工作的不稳定,所以咱就不去看这个引角,咱也不读这个引角了,咱直接怎么着了,同学咱直接怎么着,我们直接去读它的这个寄存器行不行,我一直循环不断的去除它的一个寄存器,直到这个寄存器里边的这一位之一了,或者是这一位之一了,那是不是也就相当于是等到这个中断了呀,是是这个意思吧?同学,所以只就咱们绕开它这个坏的眼角啊,咱就不用它,咱直接给他去了。好,那所以我这儿应该怎么写这个事儿呢?同学,咱这应该怎么写这个事儿呢?等待发送完成啊,循环的咱们这样做啊,注意观察呃,我这儿直接这么写啊,我就直接来个循环wellwell啥呢?well呃,咱们就直接去,我想想啊这个人怎么着?呃,他这儿是不是声明了一个死代变量,对吧?呃,state,我初始时我给它一个零啊CD零默认都是零啊,假设都是零。好,那完了之后,我这边我这么写啊,你看我直接死state,我让它怎么着呢?
与上一下,就是我等等来的,可能我这标标注其中的任任一个置位,对不对?所以我得语上一下谁呢?一个是maxRT,还有一个是谁呢?我再或一个啊,或上谁或上那个TX是不是DX啊,对吧?ok好,那我与它俩,如果这俩东西我与完之后,我为了确保它没问题,我加个啥加个括号吧,哎,确保优先级没问题啊。好,与完之后,如果等等于零x零零。ok好,那我就怎么着呢?我就让他再去读咱们的这个计时器,大家看能不能看明白啊,读状态寄存器的值。你看我这个逻辑啊,唉,你看是不是这么回事啊,你看初始值是零吗?都对吧?哎,好了,那完了之后,我第一次来这儿的时候,我俩我跟他俩语完之后,最终结果是不是一定是零啊,对吧?是零好,那我现在是不是就会读这个状态寄存器啊,对吧?如完之后,是不是立即又会跟它去进行行啊,对吧?如果读完之后还是全是是全都没有置位,这俩都没置位,都没置位的话,语完之后是不是还是等于零啊,对吧?直到什么时候就不等于零了呢?它俩其中的是不是任意一个置位了,就不等于零,不等于零。我这个循环是不是就推出去了呀,对吧?这是不是也是等到了这俩中断的某一个发程啊,唉,跟它是一样的思路啊,只不过就是咱避开了那个呃就是有问题的引脚啊,行了。
唉,那这样一来的话,咱这个就算是搞定了。哎,搞定了。好,那如后咱借这这个同学,我们稍微的规范一下,就是咱们当前的这个也不是规范嘛,咱们简化一下吧。
就是你看啊,他这个收一个包收一个包啊,它的返回值是不是零表示收到了一表示没收到啊,对吧?所以我这这个返回值呢,我也稍微的简单一点,我就别给它整这么这么麻烦了,咱不分这么多什么之到,除除了次数发送失败还是什么?发送失败发生,咱们就就俩要么成功,要么失败,对吧?一样跟前面一样也是零,咱就是发送成功。
一,我就表示它发送失败能理解零是吧吧?同学咱跟这个保持一致啊,所以咱这改一改呗,呃,应该怎么着?
这个是不是发送成功了?TXDS这是发送成功了,对吧?这个我们就return一个零。那这块呢就直接returtain一个一,这个呢也是不是让它retain一个一就行了呀,对吧?哎,好了,那这样一来的话,咱这个驱动就算是改造完毕了,改造完毕了啊。
来,现在呢我再重新编译一下,看有没有问题,行,没问题,搞定了啊,同学哎,好了,那这个完了之后呢,我们呃就完成了这个所谓的SI二四二幺这个驱动的移植了啊,刚才有同学问啊,就这个东西你要自己写呃,这个行不行呢?也行,就是太说呢,你你你就不能像咱们前面那样粗读这个他的手册了,你就得细读精读它那个手册了,你得知道我这个设这些模式,我到底要配哪个寄存器?我以后是不是每个寄存器你都得看一遍啊,对吧?太麻烦了,这个咱就咱就不手写了啊。OK我停一下视频。

13-无人机-飞控项目-通信任务-SI24R1-初始化函数
13-无人机-飞控项目-通信任务-SI24R1-初始化函数
呃,好了,各位同学,那接下来呢我们就准备去做一下这个相关的测试。但是在测试之前呢,咱这儿需要这样的东西,我们需要我们需要提供一个初始化的方法,对吧?你想啊同学,我一会儿不管是接收方还是这个发送方,我再去呃接收数据或者发送出之前,我是不是必须得设置当前的工作模式啊,对吧?接收方我得设置为接收模式,我发送方是不是得设成发送发送模式啊,对吧?所以咱这儿呢需要给他们提供一个enet方法啊,来我们在这边呢提供一个word,咱叫做INT后边SI二四r幺后边来一个enet。没错啊,同学这个e的方法将来咱是不是要暴露到其他的方法里边被调用啊,对吧?所以我们最好在头文件里边给它怎么着呢?添加一个这个声明右键,然后创建声明这边是不是就有了呀,对吧?哎,好,那我们再回头来看这边啊。好,那在这边我们看一看,咱应该写什么同学。呃,对于咱们当前我是不是neflat项目我fat我要做的其实就是啥呢?是不是就是设置为什么接收模式吧,没错吧,同学你要设置接收模式直接调什么就行?是不是直接调我们上面的这个INTFA二四r幺i呃,i呃,这叫什么呀?RSmode是不就完事了呀,对吧?就行了。哎,但是各位啊,但是各位这个经过我们的实际测试了,就发现这个芯片它有点坑啊,就是它上电之后啊,你看你看我们稍微等一等同学,就是他这个工作模式,他上电之后,他不是说立即就会就就就就能怎么着了,不是说立即就可以用了啊,他这块是不是需要过一段时间之后,是不是才会才才能够进入到这个所谓的关断模式啊,对吧?那呃然后呢,所以说你如果说按照我们目前的逻辑,我这个上来之后,直接就调这个函数,那就可能会出现就是你设置的这些东西,他根本就没收到。因为你这个往寄存里边寄存器里边写东西嘛,对吧?可能没收到,就可能会出现初始化失败的一个情况。所以咱这最好怎么着呢?我们要不就延个时呃,或者说我们这儿呢做一个什么呢?做一个自检,咱们做一个自自我检查,我检查查通过之后,我再去设这个个查查,通过表明明已已经这个确确确认这个芯片能够正常工作了。然后咱们再进入下一个环节,大家能理解这个道理吧。哎,好,所以这边呢咱们应该怎么着呢?等待等待自检成功。好OK好,所以接下来咱们要做的工作,就是在这个地方呢,咱们去呃做一个所谓的自检操作。那自检怎么自检呢?自检其实很简单,举个例子,它是不是有很多寄存器嘛,对吧?哎,我就随便找个寄存器,我往里边写入一部分数据,我再读出来。如果我写进去呢,跟我读出来的是完全一样的那是不是就证明这个芯片已经能够正常工作了呀,对吧?哎,我就做这么一个测试啊,好,确保它没问题了。完了之后,咱是不是再进入到这个下边的接收模式就行了呀,对吧?
呃,设置个接收模式就是这么一个意思啊。呃,所以接下来我这样我写一个静态方法,咱们就叫static法,呃,就给咱们当前的这个用啊,static后边呢我就叫做呃,那你自检成功了,还是失败了,理论上是不是得有一个返回值啊,同学对吧?所以咱这样呃为了方便,我们后边的很多方法都有类似这样的返回值,就是成功或者失败。我们在这儿呢咱定义一个通用的类型,我们进到comtypes啊,这边注意观察我定一个枚举类型吧,咱们就叫做type看。后边呢我叫一decom,然后后边呢我里边写一下东西,先写名字,我这个呢就叫comSTATUSstatus没问题吧,同学然后里边呢我就给它定义俩值,一个是OK,一个是iver能能理解这个事儿吧。同学哎,咱们就定义一下啊。好,这是一个通用的类型啊OK后边我们经常会用这个类型啊。好了,所以接下来咱这样,我们回到这个呃这边来困乱同学精神精神啊,接错神了。呃,我includede下啊,那需要把这个COM是不是给它引进来?COM后边来一个。TYPE呃点呃,typec吧,是不是点上,对吧?哎,好了,那看能不能过去能过来啊。行了,那接下来回到我们这个这个c文件里,我这个自检方法它的返回值,我是不是就可以用刚才那个comstatus来,对吧?好,那完了之后呢,我写一下我当前的这个函数的名字啊,呃我这个名字我想想我叫啥呢?我就叫做INT后边SI这个二大写的啊,二四r幺后边呢我就叫做SELFCHECK呃,是不是就是staatcheck啊,对吧?哎,好了,那完了之后呢,我们就开始写一下这个逻辑啊。呃,前面逻辑其实很简单,你就随便找一个寄存器往里边写,写完之后读出来读出来之后,你写的跟你读的呃,是一样的那就证明已经能够正常工作了,对吧?好,那现在我们来看看怎么去写这个事儿呢,咱们就随便找个寄存器啊,随便找一个。呃,比如举例子,你像我们再去设置咱的这个发送模式也好,接收模式也好的时候,它是不是会往这个寄存器里边就是那个发送地址寄存器吧,是不是会写这个地址啊?对吧?好,那我接下来呢我就写这个好,这直接拿过来,哎,我就写一下这个大家看看这个有没有问题,没问题吧。呃,这个是不是就是往随便找了一个寄存器嘛,这是咱那个发送地址寄存器往里边是不是写入了我们这个地址了呀,对吧?哎,好,写进去完了之后呢,咱们别的不干再给它读出来,你再给它读出来,读的话,是不是咱们得调那个INT后边跟上一个啥SI是不是二四r幺后边跟上一个,这回得readbite了吧,对不对?readbite,那你要是readbite的话,同学你想想我们这个里边应该怎么写,怎么写,这个readwisreadbest,那是不是首先得发一个地址啊,对吧?这个地址应该是s呃,得发一个命令,对吧?一个命令应该是SPI后边跟是谁?该read是不是那个REG了呀,对吧?哎,再拼上传你上是不是这个寄存器的地址TSADDR是不是应该是这个呀,对吧?那能能理解解同同学好,后边接下来我们要做的,你是不是得去找一个地方去接收一下这个这个值。你看咱们传它,这是传命令这个第二一个是不是那个收收的什么西,是不是那个缓缓冲区啊?对吧吧这是是你读的长度。所以接下来呢我们还得再定义一个什么东西定一个bufer啊。所以这边呢我们就来一个uint后边八t后边我来一个呃应该是RXBUFFER是不是就是接收的一个缓存呀,对吧?好,那这个长度给多少呢?长度咱们写是不是写了这么多,这是那个长度吧啊,因为因为这这就是随便找了个东西,写了个地址嘛,对吧?好,那我我我我我我我接收的话,是不是长度也是这么多呀,对吧?好,拿过来完了之后呢,咱是不是把这个controlc放在这儿就行了。好,那这样一来他是不是就会把读到的内容写到我的这个八份里啊,对吧?
好,那接下来我要做的事儿,是不是就是比较这个八份和谁和是不是上边的这个数组里边的值是否一样啊,对吧?一样的话,那就证明它已经是不是工作成功呃,正正常工作了呀,对吧?哎,好,那现在来写一下啊,所以这边咱怎么比较呢?这是俩数组俩数组,我是不是来来份循环呀,对吧?所以份那后边呢,我们我看他写对不对,还还挺对,这个逻辑挺对吧?哎,II等于零i小,于是不是咱们那个长度啊,对不对?然后i加加比较LS八分,里边的和TSADL里边是不是一样的对吧?一样的,如果不一样不一样,是不是直接就returnerr了,对吧?那如果一样呢,如果我这一轮循环下来之后,没发现不一样的,没发现不一样,是不是都一样都一样的话,那说明什么了,是不是已经哎,工作正常了呀,对吧?大家能理解我这个逻辑吧。哎,OK啊,其实整体来哎,不是很难啊,哎,在这儿是不是不是很难对吧?哎,好了,那这就是咱这儿的一个所谓的自检的一个逻辑啊。好了,那接下来我们回到下边这个初始化这边来,那咱这儿是不是得等它自检成功啊,对不对?所以我这儿应该怎么着同学呃,他又给我提示出来了,你就这么写就行。你看啊我这儿怎么写的?如果我调用这个stellcheckcheck,等于comOK不等于看嘛OK说明什么?是不是说明自检失败了呀,对吧?失败了,说明我这儿这个芯片还不能正常工作。好,所以我这儿怎么着呢?我等会儿我等会儿之后呢,我再去做一次自检,对不对?ok好,如果还不成功,那我再等会儿再做一次。好,直到他这OK了,是不是这个循环就退出来呀?那我是不是就自检成功了?大家能理解这个事儿吧。哎,好了啊OK那这实际上呢就是咱们这所提到的一个呃所谓的一个初始化的逻辑辑啊,现在呢就给他写完了,大家能能理白这个逻辑吧吧。好了啊,来停一下这个视频。

14-无人机-飞控项目-通信任务-SI24R1-接收数据测试程序
14-无人机-飞控项目-通信任务-SI24R1-接收数据测试程序
对呃,好了,各位,那现在这个驱动我们基本上就准备好了,准备好之后,我们接下来准备开始编写这个测试的逻辑啊,呃这个测试的逻辑咱怎么着呢?呃,咱是不是得给这个通讯也创建一个单独的任务啊,大家还记得吧,来看这张图啊,在这儿你看通讯任务,咱是不是有一个单独的任务,对吧?哎,好了,那然后需要大家注意的一点就是啊这个通讯任务,我们首先要做的应该就是先接收到遥控那边发过来的数据,但是收到数据之后,我是不是需要做一系列的这个处理啊,对吧?那具体做什么处理,我们现在先不用管,咱们先把这个数据收到就可以啊。行,那接下来呢我们先把这个通讯任务给它创建出来,然后呢去写一下这个接收的这个大致的一个逻辑啊,来吧,需要创建一个新的任务了。好,word后边呢我们就声明我先写注释吧,这个应该是什么?应该是通讯任务。哎,好,那接下来往下走,呃,它叫做communicationtask,对吧?也就是一个简简称COM也行,就这样吧啊来往下走,这是名字。这个呢是它的这个stackp,这个我们也给大点同学,这个你其实你能够发现啊,就是呃咱也是double吧。呃,来你注意观察一下,你看在这个是不是所谓的通讯任务里边,咱们要执行的逻辑其实也挺多的,对吧?哎,所以这个占用占空间也要大一点。所以这个我们也给大点啊,给个二五六啊。好,接着往下走。下边呢,是不是就是到了它的这个优先级了呀,同学这个通讯任务的优先级,大家说重重要不重要,也挺重要的。这个我们给到最高优求级,咱们给四啊,好,接着往下走,下边是不是得给他声明一个这个呃handle啊,对吧?好,接下来往下进行下边是不是也得声明一下这个任务的执行周期。因为我们现在是不是采用的是轮询的方式啊,同学对吧?轮询你是不是得一直实时不断的去读它这个数据啊,对吧?
那所以这边呢我们也要有一个周期,这个也给给四百,我们和谁和这个非空任务,咱们这保持一致就行啊。好,说白了,就是我收到一个数据,那基本上我收到指令,我就去设置电机速度,收到指令设置电机速差不多是应该是一个平衡的一个状态,对吧?哎,好,那就这么着啊,行了,下边我们去把这个通讯任务给它创建出来呃,来呃,创建通讯是不是任务啊,对吧?哎,好了,那接下来呢我们让它给直接生成吧,xactst。好,那这个咱就搞定了啊,下边咱们要做两件事啊。首先第一个是不是得实现一下,就是这个通讯任务的逻辑啊,对吧?这是一个第二一个是什么呢?不要忘记初初始的同学,这个你要不处不初始化的话,它是不是执行不了啊,对吧?哎,所以这块一定要注意啊,这块儿应该是初始化。哎,好,接下来那个SI是不是二四r幺啊,对吧?哎,好了,那当然你要调它的方法,我们需要先引入它的头件啊,这个引线啊,来咱们ininclude后边跟上一个INCLU好,后边跟成一个INT哎,后边i呃SI二四r幺h。好,这个搞定啊。好了,那这个完了之后,我们回过头来去写这个初始化的逻辑啊,应该是在这儿吧。调用INT后边SI二四二幺inmeit。哎,这样一来是不是就完事儿了?同学哎,好,接下来我们只是下最后一步了啊,下边咱要做的是不是就是实现它的这个呃所谓的接收数据的这个逻辑了呀,对吧?哎,因为我们采用的是轮询的方式啊,所以里边咱应该还是啥,还是v二一还是v二一啊,v二一完了之后呢,我们把这个拿回来周期性的执行嘛,所以先获取一下执行前的时间。完了之后呢,我是不是采用这种绝对延时的方式,对吧?延迟这么长时间,这个写谁?这个咱那个名字应该叫做COOM是不是POR的呀,对吧?
COMM对吧?POR的应该是这个啊行了,那这个给的值是四,对不对?行了,那这里正常情况下,咱是不是就要去接收数据了呀,对吧?首先接收数据完了之后,后边是不是还得处理数据啊,对吧?处理数据咱们就todo了啊。ok处理数据啊行了,后边再说啊。行,那现在我们看这个接收数据,逻辑应该什么样了?接收数据其实很简单啊,同学接收数据怎么着?怎么接收数据是不是就是调INTE我们前面看到的这是不是有一个SI二四r幺RXpackage啊,对吧?呃,还记得吧?PACK呃的对吧?是不是就是这个方法,这就是用来去接受数据的嘛,对不对?好,但是这个方法它是不是可能能读到数据,也可能读不到数据啊,对吧?哎,所以这块呢我们是需要去做判断的啊。当然你数据读的话,你你给它读出来,你给它放哪了?同学你多来放点儿,是不是人,这需需要你给传传上一个八份一个指针呀,对吧?所以这边咱们声明一个八份啊,这个八份我就声明在外边吧。那这这个不用每轮循环都声明吧,咱们用一个就行啊。所以在这边呢,我们来个啥妖艳塔三十二packagd呃UUint八t啊,八t八TU呃INT对吧?UNT后面我们来一个这个呃几t呃八t对不对啊?
八t完了之后呢,我们这儿呢就叫做RXBUFFER。好,那问一下大家,我这个长度我儿应该给多少,咱这个长度给多少。其实咱们目前的方式啊,你看就是我们不管是收数据还是发数据啊,来吧,那我们来看一看,他这都是怎么着的。咱们先看那个发吧,这是RX排开值,你看发数据发数据的话,他直接是不是往那个非负里边写了多少,是不是就写了这么宽呀,是不是写了三十二个呀,对吧?所以说我们现在是定常发送数据啊,目目前都是最最最长的长度,一个三十二位的。所以这个发法呢,我们这儿就给一个三十二,就给个三十二啊。好了,那完了之后呢,这个三十二拿过来之后呢,咱把它放进来,是不是就完事儿了?同学好了,那完了之后注意这个方法是不是有返回值?呃,还记得吧,它如果是零的话,就是说明有数据一的话,就是没数据啊。所以我们这儿呢就需要去做一个这个判断啊,咱那不干别的就打印一下就行。收到之后打印一下就行啊。所以这儿来一个溢出判断啊,如果这个东西它等等于几零,那就证明我收到数据了。
那这个时候我就干啥,我不干别的,我就把咱们这个值给它打印出来PRNTF对吧?好,然后呢,我们这来一个啥,我就来一个receive。RECEIVEreceivereceive什么呢?呃,咱们来一个百分号s反斜杠,呃,是不是把上面的东西给它拿出来就行了,对吧?呃,然后呢把谁放进来?RX是不是buffer?哎,大家能看明白我这个逻辑吧。哎,就是我循环不断的去收数据。好,收到之后,我就给它打印出来,就是这个意思。哎,好了,那也就是说我们现在收的逻辑至此是不是就算是完成了同学哎,搞定啊搞定。那现在呢我把这个视频给它停一下啊。

15-无人机-遥控项目-通信任务&电源任务-移植和测试
15-无人机-遥控项目-通信任务&电源任务-移植和测试
呃,好了,各位啊,那接下来呢我们进入下边一个环节,我现在呢是不是已经完成了这个flag这端了呀,对吧?接下来咱是不是就得进到遥控端,咱们在遥控那边是不是也得去写上这个就是呃FLS二幺的这个驱动完了之后呢,两边是不是才能通信呀,对吧?好,接下来咱们进入到remote这段大家坚持一下,我们把这个remote这边咱们两边测完之后,今天的内容就结束了啊,来吧?来我们找一找这个remote这个remote,我之前是不是就已经创建好了一个项目了?对不对?那之前这儿应该是完成了啥完成了呃,RTOS集成了吧,对不对的集成啊?好,那现在我们把这个项目给它打开,大家稍等一下啊。呃这个没有咱们全关了啊,全部关闭。呃,行,那回忆一下啊,当时咱们这个应该是呃都配的什么东西了?当时应该就是福瑞flarQS已经有了,然后还有谁有了?呃,那个那个串口是不是配了一下,但是串口当时咱们是不是配的是串口二啊,对吧?
但是remote遥控这端呢,它实际上一会儿咱们看原理都能看着配的是串口一,所以这个咱们还得改啊。OK然后呢,我们再来看一看这里边呃我们主程序那边我们看看写到什么程度了,大家也得看一下主程序里边这个右览码我们改一下,应该是JBK啊呃主程序这边是不是还是咱之前那个测试程序的呀,对不对?这个我们是不是还没写那个什么task那个那个文件的呀,对吧?所以这些东西大家记得一会儿你要是移植的话,都得移植过来都得改啊。好,那现在咱们就从头开始改起啊。好,我们先梳理一下啊,这个这个系统,我们目前需要做什么操作?就是关于咱们这个遥控这块啊。呃,首先你要是移植那个SI二四二幺驱动的话,是不是得配SPI得配那个CE还有CS眼角对不对?
这是咱们需要配的。然后串口我刚才说了,这个遥控这个板子上用的是谁,是不是用的,是那个串口一样,串口一样,对吧?就这个咱得改,还有谁得改一下呢?电源对电源这个电源任务跟咱们那块那个电源源是一样的逻辑,它也是会自动进入低功耗模式啊,所以我们这儿是不是也得搞一个电源任务实时的去怎么着的,给他唤醒,能理解这个事吧。
同学也就是说我们现在要做的工作应该是哪些呢?咱们看这张图。同学看这张,我把这个先关了啊,它这个好像是只能打开一个还是怎么着的。好,各位观察同学,咱现在要做的工作应该是哪部分呢?通讯任务是不是一会儿咱们得完成,对吧?哎,完了之后,当然这个通讯任务呢,我们这个分两两部分,一个是打包数据,一个是发送数据,我们现在数据打包打不了,因为是不是遥杆按键,我们都没没做呢呀,对吧?所以我们现在先随便发送一下测试数据就行啊。好,能够发出去就行。除了这个之外呢,还有谁是不是我们这还有一个电源任务需要去做呀,是不是就是这些同学?哎,好了,就这些,那像这个显示任务,包括这个遥杆按键扫描任务,明天再做了。哎,咱们今天先不做了。哎,好,那接下来呢我们往下进行下边,咱们去做,先做这个通讯任务啊,通讯和电源吧,咱们一起做吧,这个直接这个是不就行了,对吧?来吧,那现在咱们开始去做相关的配置啊。呃,当然配置的话呢,我需要先打开咱这个项目的,先打开这个项目的啥呀?
同学呃,先打开这个项目的这个这个这个elo的文件,对吧?咱们给他打开大家稍等一下啊,稍等一下,稍等一下稍等一。哎,好了,那打开它的同时,因为我们要做各种配置,所以咱是不是得对照着谁去看呃,得对照那个原理图吧,来我们找到原理图啊,原理图找到这回得找那个是不是手柄的呀,对吧?一就是遥控啊,点开它呃,点开它之后呢,首先我们先去改一下那个串口啊,你看像这个串口,它这回用的谁啊?我们还是找那个就是STlink的插头,注意观察这回是不是用的UU三二零一啊,对吧?UU二t一对吧?
所以这个咱们先改个它啊,来我们找到这个已经打开了啊,找到connectivity找到这儿,是不是这个二,咱们就可以直接给它disable了呀,对吧?然后一给它放开这个呢,我们找到呃异步就行啊,其他不用配这些东西,咱们都是默认值就可以了。行,这个就搞定了,串口搞定了,串口搞定之后,我们再来看看,还有谁需要去处理一下啊。同学呃,首先是不是就是电源呀,电源电源那块,咱们需要配置的东西,是不是只有一个GPI眼角这个没问题吧。唉,来我们看一下啊,它这个电源芯片用的是哪个个角角,注意意是是个个源源,对吧?电源这块呢它用的是不是也是IP五三零五t。然后我们注意观察一下它那个引角啊,那个引角应该找那个按键呃,注意按键,也就在这呢powerkpowerk来往这边看powerk是不是PB十五啊,对吧?
所以这边呢咱们就直接用这个PB十五给它配一下就行。找到PB十五的GPIO来搜一下PB然后后边呢十五啊,应该是这个这个咱还是给它配置成GPIOoutput啊。好了,然后呢找到systemcoreGPIO找到这个咱跟之前最好保持一样的命名同学POWER这样有啥好处呢?好处是不是就是我一会代码直接拿过去就能用啊,对吧?这个尽量保持一致。好了,那这个完事儿完了之后,我们来看一下,就是咱这个输出模式应该怎么怎么着,还记得不同学得模拟那个按键的状态吧。哎,首先我应该让它使用一个开漏模式,并且默认值应该是高,也就是默认它是断开的状态,然后我拉低是不是置为一零之后,它就相当于按压呀,对吧?看一样的逻辑啊。好,这个注意好,电源任务的相关参数,咱们就配好了。好,还得配谁?是不是咱们一并把那个就是通讯任务的给它配好了,对吧?通讯任务咱们找SI二四二幺二点四g通讯啊,来我先缩小一下,应该就是这个吧。这个这会儿咱们要配的内容是不是应该是这些对吧?可以看到他这儿使用的是这些,我一下吧,咱们照着看就行了啊。好,先配SPISPI它用的是不是也是SPI一啊,对吧?来我们找一下connectivt找到SPI一,这个还是直接全程工就行啊?master好,然后首先需要咱们改的就是谁parameeter里边的是不是这个预分频器啊,对吧?这个我们还是给它改成八就行啊,然后呢速度是九啊,九兆每秒啊。好了,行,这个就搞搞定了啊,搞定之后一定要注意,也要检查一下GPIO的眼角来,这回,你看它是不是就不一样了,对吧?
默认用的是五六七这三个眼角。但实际上咱们这儿用的是谁?是PB三四五吧,这个是PA五六七,这不一样,所以得改一下啊,怎么改东西很简单,这仨不用不用一个改,咱们只要改一个,它一组就一块儿改了啊,你就找PB三四五里边随便,这是PB三,对不对?点点完之后,你看这是不是有一个SPIE的选项啊,对吧?来点点完是这一组,是不是就都切回来了?对对,直接就过来了。行了,那这个就过了啊,同学那完了之后,我们是不是还得再配两个眼角,一个是呃CE,一个是CS了,对吧?好,我们一个配啊,先配CE的,应该是PB七PB七是不是?正好在这儿呢,对吧?点这个应该是output对吧?CE的我们找一下TPIO来这个还是改成跟之前一样的名字啊,叫做SI二四r幺,后边我们来一个啥,呃,这是CE嘛,所以我们就叫CE,最好跟之前一样啊,省得改啊,这个就搞定了。
完了之后,我们看一下它的输出模式开漏呃,这个这个这个推板输出没问题。然后呢,默认值默认值。因为是CECE默认我们给d吧,用的时候再给它拉高啊,就是这样的行,这个搞定。接下来我们看下一个同学下,应该就是ILQ我们还是不配啊,我们配这个下一个c呃CSCSPH五注意这块有的同学可能可能会直接就配了啊,正正好PPC跟那个班是不是三四五六就连着了呀,对吧?注意这个六栏没用六没用啊,六是不是那个LQ啊,对吧?咱们是PA十五,一定要注意PA十五,别配错了啊。PA十五啊,应该是在这儿呢,好点过来。这个呢我们应该给它配置成一个GPIO是不output啊,好吧,那这个名字还是跟之前一样SI二四r幺。好,这个呢我就叫CSCput啊。好了,那它的这个初始电瓶应该是高电平的就得啊。好了,那这样一来我们这个该改的是不是就都改完了呀?各位同学哎,好,那接下来呢我们genanuatecode大家稍等一下啊。嗯,好,已经完事儿了啊,完事之后,接接下来我们再回到这个remote项目里边来,哎,回到这里边来。那进来之后呢,当然这里边有很多东西是需要我们去重新调整的对吧?啊,来吧,那我们现在就开始进行变异,来哪需要改,咱们就改哪儿啊?首先这里边是不是有这么一大堆这个错误啊,对吧?这个错误来自于哪儿?是不是来自于IT点c这很明显是咱们之前是不是那个中断的问题啊?没错啊,同学这个中断我就还是采用咱们之前,我就是上午我给大家说那个方法啊,所以我现在直接怎么着就行,我现在其实是可以直接是不把这个删除了,对吧?
咱们直接删掉啊,好一会儿我再把那个脚本给它放进来,先删除就行。这个删了呃,断pensv直接删除。好,当然你现在删除之后,要想让他正常工作啊,大家一定一定要记得把谁给放开,这俩是不是得放开呀?你得把谁把人家福瑞二加s给你提供的时间是不是给它重命名,为咱们这俩这俩函数啊,对吧?一定要放开,要不然不生效啊,一定要入夜,切记,切记啊。好,我们再编译。哎,编译完之后,你会发现现儿又有一个错误,这是哪儿?是不是来自于USART这边是不是咱之前用的是二啊,对吧?现在我们改成一了,这个是不是改成一就行,所以又解决了一个错误啊。好,那现在我们再重新编译好,还有哪有问题?这回再有问题,应该就是是不是就是那个SPI相关的这个代码了呀,对吧?
哎,我们给它加入一下就行了啊,加入到这个资源包里就行了。来我们找到项目资源,找到application,找到user,找到,然后右键添加文件好一样的啊ccallSRC找到这个SPI好这个完事儿。然后呢库这边也得添加一下啊,走底下右键,然后添加文件,找到driver,找到这个,然后找到SRC找到刚才的SPI,对不对?应该是这个吧。哎,考添加进来了之后,我们再重新编译各位啊,大家稍等行,现在是不是就已经编译通过了呀,对吧?好了,那初始化的这个内容,咱们就做完了。接下来我们进入下一个环节,下边咱是不是就得该往这个里边去做各种各样的这个移所谓的移植操作了呀?对吧?就是复制了啊。好,那现在咱们先分析一下,我这都需要复制哪些内容?呃,咱们需要从flightpart这个里边从往那复制哪些内容?首先com里边是不是咱们有一个那个基础类型啊,对吧?这个咱得拿过去啊,还有这些程序INT里边得拿俩,一个是二点四g,一个是那个谁那个power吧,那个是不是这俩东西拿过去,二点四g还有这个power也拿。你像这个电机,还有这个LED是不是都不需要,对吧?好,还有是不是就是这个task了,就这些东西,我们把这些东西给它拿过去就行了。咱们一一个个来啊,先拿最简单的。比如说我先把这个com拿过来,直接拿整个com吧,右键咱们直接复制。那复制完了之后呢,回过头下来到remote,我就直接在根目录下边controlv就行了。现在是不是添加进来了呀,对吧?但是记得啊加进来之后,我们这儿得怎么着得手动的,是不是加一下这个资源啊,对吧?点击添加文件,然后呢普通文件夹,这个咱们这样先不添加了一会儿几个文件夹,我们一并添加,是不是也行啊,对吧?哎,好,那接来往下走,下一个,下边一个咱们要放的应该是谁?应该是INT里边的,是不是这两个呀,对吧?这样我先把整个四个都复制过去,然后咱们再删啊,好,拿过来放在这儿remote走。你好,然后呢,是不是LED,我们是不需要的对吧?直接delete掉,然后还有谁motor不需要直接delete掉,搞定好,还有谁是咱们需要的呀,是不是就是那个task了呀,对吧?
来,我们把这个task拿过来,哎,ccontrLC哎,拿过来,拿了之后呢,我们就直接也是放到这个remote下。好,拿过来吧。行了,那现在我们是不是该拿的都拿了呀,对吧?接下来咱这样啊,我们就统一的把这几个目录都给它添加进来。普通文件夹完了之后,你这可以同时选中多个按着control点。首先com得点,然后呢还有谁INT得点,然后呢,task是为点啊,对吧?就是这几个完了之后呢,我们添加上项目好了,那这几个是不是就都添加上了呀,对吧?都添加添加上都添加上之后,接下来有些东西咱是不是也要处理了呀,对吧?首先首先要处理的就是谁最核心的,千万别忘了同学,你先去改一下呗,先去砍一下这个是不是这个这个这个这慢点c啊,咱之前这个慢点c是不是根本就没去调用谁,根本是不是就没去调用咱们的那个那个freeRQSstart的那个方法呀,对吧?
刚拿过来的嘛,所以这个一定要重新拿着一定要调一下啊,所以这个咱们先把这改了。呃,首先我需要先引引入一个这个文件啊,来咱们引一下,我就直接include了啊,include谁应该是辅瑞rtos是不是后边跟着一个task点也上,对吧?这个一定要先记得啊,要不然你这个不行,你后边所有的测试都通过不了啊,这一定要注意,你像我们之前做测试的,你这个URtask是不是不需要了删除,那这个呃往下走,往下走,往下走往下走。那这个初始化测试是不是也就不要了呀,对吧?来直接给它去掉。那完了之后,在这调谁调福RRTStask,是不是start呀,对吧?一定要记得啊,一定要记得先在这儿啊。好,这儿改完了之后,我们接来继续往下进行,看看咱们还需要去改哪儿。呃,首先首先啊首先我们先从这个最开始的com开始吧,com里边大家是不是定义了很多跟这个非非控相关的呀。你像LED遥控状态,飞行状态电机结构体,这些是不是都不需要删除,只留一个这个commonstatus就行了啊。那当然这个GPL引入,咱也就不需要删除啊,就这个搞定这个搞定之后,接下来我们看哪看这个接口层啊,INT接口口层边边,我们看看需要改,哪power应该不用改吧。
同学power不用改,但是谁得改?二点四g这个得改一下。二点四g这个谁得改一下呢?
同学往下翻往下翻,只有一逆的方法需要改一下吧,对不对?刚才咱们那边是设置为什么方式了,接收这个咱点设置为发送模式,所以这个改成TSmode就行,没没没问题吧。同学,这我我改一下啊,应是设置为发发送模式行了,那这个是不是也就改完了,对不对?行,那完了之后,就只剩下这个task这边了,对吧?task这边咱们开始改啊,但是这边改的话东西也不少,好多东西都得改啊。呃,首先这几个全局变量还用吗?不用了,这个清楚多了LED也不需要电机,是不是咱也不需要,对吧?删除电源任务,咱是不是得留着灯控任务不要了,删除。哎,好,非控任务是不是也不需要了删除通信任务,是不是得留着?
对不对?好,接着往下走,那再往下看这个star的方法啊。那首先第一个初始化电机是不是不需要了删除?
那初始化FL二四二幺,这个得留着吧,哎,这个得留着啊,电源任务留着灯控任务删除,哎,删多了呃,上了一个多了一个空格啊。好,非控任务是不是也得删除,那通讯任务是不是得留着启动,要去留着好了,这个就完事了。接下来我们开始改下边啊,这个powertask是不是也是定期的去进行唤醒就行。这个不用动LEDtask直接删除delay,哎,fllighttask是不是直接删除,对吧?哎,搞定。哎,好,现在只剩下最后这个COOMtask,是不是那个通讯任务啊,对吧?这个得改啊,刚才那边是收,那咱这边就得怎么着了,就得发了啊,就得发了发。所以这边呢我们就也是循环的发送数据吧,咱们就循环发那边循环收。嗯,然后呢我们看看能不能通信上就行了啊,好,发送接收啊。好,然后这边呢我去处理一下这个事儿,看看怎着着啊。
那我这边呢咱就这样,呃,你要发送的话,调谁就行。同学是不是调用呃,INTSI二四二幺给咱们提供的那个API就行了,对吧?应该是INT后边跟上一个SI二三幺。应该叫做呃TX,是不是拍k的呀,对吧?这里边它需要我们给它放上一个啥,是不是放上一个八份啊,对吧?
哎,好了,那这个八份份一个r边对吧,是不是之前有一个RS啊,对吧?好,这再重新声明,一个TX八份,但是我这个TI八份里边,我给啥呢?来,我这就先随便给点数,是不是就可以啊,对吧?呃,我这儿就给个字符串吧,来我这直接来一个TX比如说八份后边我来一个啥呢?来一个零零,我等于啥呢?注意,哎,我这么写写个哎,写个h这个这这个没问题吧,同学学然我解析那边我就当成IC格码解析嘛,对吧?哎,好了,那我们就不用把这三十码解写啊,咱们就随便填几个就行吧,再来一个呀,来个hello,对吧?哎,对,没问题,好,接着往下走,接着写,哎,我不写了。呃,HE走,然后再来再来一个o哎,这是不是就hello就完事儿了呀,对吧?那它后边是不是还有这个二十多个这个空位啊,空位我不写了,不写它就当零了,能理解这个事吧。
同学哎,好了,那接下来我们往下进行下边,咱直接把它扔进来,放在这儿,是不是就OK了?各位同学,哎,这样一来,那咱们这个就算是处理完了。哎,接下来咱们编译一下,看能不能过啊,同学稍等啊,过不了,过不了的话,应该是有点问题啊,这个是不是因为我们这个task点h里边引的一些这个头文件啊,对吧?
不用的删除啊,这个没了,这个不要了。那你像这个mountain是不是也没了呀,对吧?删除这个team是不是也没有删除?哎,好了,那这样一来应该就干净了啊,我们再重新编一下,稍等稍等,哎,编译完成了。好了,同学。那至此呢,咱现在的这个呃发送方和接收方是不是就都完事了呀,对吧?然后接下来咱们就开始测试了啊。然后在测试之前,大家一定要注意一下啊。呃,大家那我我测的时候大家尽量先别测啊,为啥呢?因为是不是咱们这个可互互之间会有干扰扰,对吧?呃,然后我这儿看一下,我这儿目前的地址,还有我的这个信道啊。呃,这个得去哪看来着是不是咱们得进到INT二点四g进到这里边来啊,对吧?来注意观察,哎,这是我的地址。我刚才直接复制了俩地址是不肯定是一样的,对不对?完了之后呢,我这个信到我这儿用的是四十了,是吧?哎,好了,那所以接来呢我就开始了,大家尽量别跟我一样啊,要不然会影响咱这个测试啊。行,那现在我先把这个程序稍录一下。呃,我现在呢先把这个遥控的程序给它稍录进去,大家稍等一下啊呃遥控的这个程序呢,这边我们需要去先呃,我这儿我这已经编译了,对吧?那编译之后,我们我给他捎一下啊,走,哎,这个没没连上是吗?呃,对,就是咱这个遥控啊,在烧程序的时候,有时候它会出现就是识别。嗯啊ok出现这个问题,大家怎怎么处理一下这个事儿呢?呃,大家可以这样,就是你先给它开机,先开能力AR这个事吧。同学开了之后呢,完了之后呢,你你你再怎么着呢?你再给它插上,你再给它插上。ok好,这种情况下,我发正我测的话啊,就是这个基本上就能够识别到。如果还是不行的话,那就拔下来,然后呢然后给它关掉。呃,然后呢再开这个时候再给它插上这个大概率它就好了。这个确实有点问题啊,这个板子啊来我们我们我们再重新试一下再烧,哎,还是没行,是吗?
呃,那就有点儿那个有点打脸哈,来,我再重新烧一下。哎,我是不是没插了呀?我看啊线断了,这儿没插上,这个头没插上。我说这个怎么一直识别不到啊,呃再重新插一下啊。同学就是就是呃不过我这个现象确实这样。但是有的同学不知道你们测的时候有没有有没有遇到啊?就是他有可能会识别不到啊,识别不到的话,你就按照我刚才说那个操作就是拔了拔了之后呢,给它重启一下,然后再插电再开,在在通电的情况下,再插入这个这个烧录器,它它它它就行了啊,来吧,我再烧一下。然后你看还是这样,对吧?那我拔下来完之后呢,关了,然后再开,然后呢我再给它插上,然后呢我们再烧一下啊啊,就就就就可以了,对吧?哎,行,就是大家如果遇到这个问题也是这样啊,呃烧不进去,你就先拔下来,然后呢给它先关了,再打开呃开着电呃通电,然后再给它插插上,大概率就能够就能够烧进去了。行,我这个是不是只要一捎录进去,它现在应该就会就会开始实时的去发放数据了呀,对吧?你看我这个逻辑是不是我们这个任务只要一起来。呃,咱们看哪儿呢?看这个freetask点c看这是不是就一直循环不断的去发数据啊,对吧?哎OK好了,然后呢,是每四毫秒发一次,对吧?哎,行,那接下来呢我们再去烧一下那个无人机这端的这个程序啊,烧无人机这端呃来拿过来。呃,拿过来之后呢,接下来呢我们进入到另一个项目,这边这个没问题吧。各位同学来好,那接下来呢我们也是给它先编译一下。好,编译大家稍等。好,编译完成,编译完成之后,这儿有点问题啊,我们把这个问题先处理一下,这是咋的了?
这是啊没演那个STDIO点h,对吧?那引一下啊,当然其实这个不演好像也也能执行,对吧?但是最好咱们演一下。STDIO点h啊。好,重新编译,重新给它插录,呃,大家稍等一下啊,哎这个是不是已经完事儿了呀,对吧?哎,好了,这个完了之后呢,我们接下来往下进行走拟。好,那现在呢理论上,如果我这个遥控再给它发送出去,他是不应应该是能够收到的呀,对吧?好,那接下来我们打开串口看它打印的什么东西啊,打开呃,没有反应,对吧?
没反应,说明什么呢?是不是说明呃,也不是说不一定是没发,就反正是我没收到,对吧?你看我这写的这个逻辑啊,同学呃,看一下这儿啊,我这儿写的这个逻辑是什么呢?是如果收到了,我是不是才打印呀,没收到我是不是啥也不干呀?对吧哎,反正现在可是没收到,为啥没收到呢?哎,我这个哎,我这个遥控好像有点问题,你看我这个灭了,对不对?这说明什么?说不是没电了,说明说明休眠了,对吧?说明我刚才是不是咱那个电源任务没没起作用啊,对吧?应该是这个意思吧?同学哎,你你看现在是不是收到了,现现在我我receivehello吗?能看到吗?同学你看啊,我我我这个我再给他关了,关了,是不是就没了,对吧?我再打开打开,是不是就收到了呀?说明现在这个通讯是不是已经成了同学?呃,但是为什么我那个电源任务它不好使呢?通信现在是没问题的啊,我那个电源任务看看咋回事,咱们去咱们去瞅一眼,我们找一下那个remoteremote,这是remote吧。我这个电源任务为啥会有问题呢?createpowertask,然后往下走,这边儿是我的眼角射错了吗?PB这应该是呃GPLB对吧?然后十五我们去看一下,是不是?那为什么这个会PB十五,我们找一下啊,十五应该是呃,这边哎,这是谁?
这是一个二点四g通信,对吧?我们稍微调小一点,往往往下应该是这吧。powerk这个是PB十五没问题吧,各位同学没问题啊,那我这个为什么会断呢?我们来分析分下同学,大家一起来分析分析是咋回事儿?我这个任务起没起同学起了吧,创建电源任务是不是都写的挺好的呀,对吧?然后看上边哎呀,我怕一百二十八,然后这个三然后呢,这个是十秒一次,哎,这个不应该有问题吧。有没有大家说有没有可能是我这个任务一直没轮到执行呢,应该不应该不应该不应该呀。我们来分析分析啊呃我先把视频停一下吧,就是通信,现在咱是不是已经通了同学通信通了,我先把视频停一下啊。

16-无人机-遥控项目-电源任务-问题说明
16-无人机-遥控项目-电源任务-问题说明
呃,来吧,那现在呢我们先引一个呃STDIOincludeSTIO点h,对不对?可以拿过来啊,拿过来之后呢,我们往下进,请各位呃呃,因为就是我这个方法正常情况下,哎,这是不是会呃十秒钟调用一次啊,对吧?哎,好,那我就让他每次调用的时候呢,我都怎么着?哎,我都让他去,是不是给咱们打印一句话呀,对吧?哎,这边呢比如说就是powertask。嗯,好,那完了之后,为了让这个效果明显一点,咱们就不等它十秒了,我现在先给它调小一点,我先给它调成一个一秒钟,是不是一秒打一次啊,对吧?呃,看他打不打啊,同学来走。你当然这个烧的话,我得烧到这个呃遥控这边了啊,同学然后无人机这个应该就没啥问题了啊,就剩这个遥控的电源了,咱们看它到底执没执行,没执行,咱们再找没执行的问题,执行的话,再找执行的问题啊,这个得一点来来,你稍录一下,没烧进去,没上去,又得重新启动一下啊,好启动,然后呢再给它插上,然后呢再再稍录一下,好,烧滤进去了,对吧?哎,好,那接下来咱们观察一下,就是它它这个partask可执行哎,执行没执行执行了,但是好像是只执行了一次,是不是啊?
按照我目前的逻辑,他是不应该是一秒钟执行一次啊,对吧?这个有可能是怎么回事儿呢?
但是有没有可能是因为这个热,因为它的优先级是比较高的,对不对?
同学,我们现在给他邮件是不是四啊,对吧?他是不是三呀?有没有可能就是说而且咱们这个执行的周期其实很长呃,很很呃周周期很短,频率很高,对不对?你说有没有可能是他把这个上面的任务的时间给抢占完了呢?有没有这种可能性呃,也不能完全排除,要不咱们试一下啊。
比如说我现在呢把这个通讯任务,它的这个period的我稍微的给它怎么着,我稍微的给它调是不是调高一点啊,对吧?啊,比如说举个例子,咱们极限一点,我直接给它乘个十。哎,那这样一来的话,是不是它释放的这个CPU的时间就多一点,它就应该有机会执行了呀,对吧?来如果可以的话,那就是这么回事了。那我们来试一下啊,来看一下。那你看是不是这回这个powerpass就能够正确的打印了,那就是这么回事了。也就是说咱这儿这个是不是通讯任务让他执行的这个这个这个什么呀?这个周期是不是有点太太短了呀,能能理解一下呗,也就是他发送数据的时间,可能需要的比较长啊,也就是说他有可能甚至出现了一个什么样的情况呢?就是说我这一波数据我还没发完呢,你这个延迟是不是就已经到了呀,是不是有可能有这种情况出现,对吧?出现了之后,是不是它这儿压儿就不会进入阻塞状态,它就压根儿就不会释放CPU。所以我上面这个任务就压根儿就没机会得到这个CPU执行啊,对吧?应该就是这么个逻辑啊,所这这边呢咱得得稍微的调一一下这策略略啊,呃咱这这怎么做可以呢?两种思路啊,同学一种就是你把这个频率呢你给它稍微的调高点。呃,比如说调成嗯确实太高也不太好。因为咱们这个数遥控的数据,你要是呃太慢的话,是不是我这相当于是我这个遥控我都我都推了。但是我那边是不是还没到数据呢呀,对吧?是不有这种可能性,所以这个也不太好。还有一种情况是怎么着呢?咱这样同学,我直接把这个玩意儿流算级,我给它调高了,我这个还是四。但我这个优先机给它整高点,你这个整高点的话,同学你想一想他是不是无论如何都会怎么着,都会进行时间片的轮选,大家想是不是这么回事儿,哎,应该是这个意思啊?
好了,那所以接下来咱们这儿试一下啊,呃我这样看看它行不行,看能不能打印啊。走,你大家稍等来看一下,这个效果依然是能够是不是打印的呀,对吧?哎,是啊,所以说说就是大家还是得就意意识到,就是他这个优先级之间的这样的一些关系啊,所以咱这样吧,我这个四我暂时就还留着这个四,然后这个任务的优先级,我给它调高点,大家能想明白这个事儿吧。哎,好,那这个呢我给个十啊。好,这这这个十秒这个还是回到原来的这个设置嘛,这个还是原来的设置。只不过这次就是咱们把电源任务的优先级是不给调高高一点啊,对吧?确保他你能有时间执行啊,确保他有时间执行,要不然的话,这个就这个就就就出大问题了,他们老老关机的可不行啊?对吧?来我们再重新的给它捎录一下啊,走你烧进去。好了,这个就过了啊。同学大家自己在测的时候呢,就是遇到类似奇怪的问题,也往这个方面想想,也想想,就是他是不是可能没没有得到执行的机会,对吧?哎,怎么测试呢?你就打印一句话,你看他打印不打印,这个一下就看出来了,对吧?很简单行,那接下来咱这样,我再去最后测一下咱们这个通讯,通讯应该是没问题,刚才已经测通了,对吧?
呃,来这边呢,我们看一看,我现在又连到哪儿了,我现在又连到了,咱们这个呃又连到了咱那边了啊,这边咱们重新重新重新测试一下啊,我现在又连到了咱那个无人机了,来看看这边,他这个能不能正常的接受数据啊,来这边进到flat这边,呃,我们再重新编译,重新捎录一下,让它自己重新重新。
那啥啊?重新开始执行。因为咱这个没有复位按键啊,所以只能是每次你要想重新的话,你要重新稍录一下。好,我现在呢把这个呃遥控开启开启之后,是不是就收到数据了呀?对,但这个收到数据好像有点乱了,我们先我们先关一下啊,关一下之后再重新开啊,这这回正常了,这回正常了。好,那可以看到啊,就是我这边现在是不是这个遥控是开着的呀,对吧?哎,好,我只要一关,哎,看这是不是接收数据就停了呀,对吧?哎,再开,哎,他就收到了。哎,再关再开,这个反应还是很灵敏的,对不对?哎,行,那说明我这个呃收发就已经是打通了啊,然后大家自己在测试的时候呢,也要实现这样的一个效果,实现这个效果就行了啊,来我停一下视频。
