苏州优化网站哪家好/学大教育一对一收费价格表

苏州优化网站哪家好,学大教育一对一收费价格表,wordpress提高打开速度慢,简历设计网官网入口基于FreeRTOS的STM32四轴飞行器: 六.2.4g通信 一.Si24Ri原理图二.Si24R1芯片手册解读三.驱动函数讲解五.移植2.4g通讯(飞控部分)六.移植2.4g通讯(遥控部分)七.通讯模块的完成(遥控部分) 一.Si24Ri原理图 S…

基于FreeRTOS的STM32四轴飞行器: 六.2.4g通信

  • 一.Si24Ri原理图
  • 二.Si24R1芯片手册解读
  • 三.驱动函数讲解
  • 五.移植2.4g通讯(飞控部分)
  • 六.移植2.4g通讯(遥控部分)
  • 七.通讯模块的完成(遥控部分)

一.Si24Ri原理图

Si24R1芯片原理图如下:
右侧为晶振。
在这里插入图片描述
模块芯片与主控芯片连接引脚如下:
在这里插入图片描述
SI-EN:使能引脚。
SI-IRO:可屏蔽中断信号,低电平有效。
SPI1-NSS:片选信号。
SPI1-CLK:时钟信号。
SPI1-MOSI:主设备输出从设备输入。
SPI1-MISO:主设备输入从设备输出。

二.Si24R1芯片手册解读

在这里插入图片描述
信道取值范围1到126,如果两个人同时使用一个信道会导致干扰。
状态机转换图:
在这里插入图片描述
TX工作模式:
在这里插入图片描述
RX工作模式:
在这里插入图片描述
在这里插入图片描述
当芯片数据过多处理不过来时,FIFO中可以存储三个数据包起到存储缓冲作用,当满了时接收到的数据包被自动丢掉。所以最好协调发送接收的频率相等,或者发送稍微慢一些。
数据包处理协议:
在这里插入图片描述
在实际代码编写时在负载数据中加入自己的数据校验。
在这里插入图片描述

三.驱动函数讲解

定义两个地址:
在这里插入图片描述
定义两个缓冲区:
在这里插入图片描述
在.h文件中extern两个缓冲区:
在这里插入图片描述
标记位:
在这里插入图片描述
写寄存器:
在这里插入图片描述
读寄存器:
在这里插入图片描述
写多个字节:
在这里插入图片描述
在这里插入图片描述
自检判断校验是否成功:
在这里插入图片描述
在这里插入图片描述

五.移植2.4g通讯(飞控部分)

文件夹创建.c.h文件,将代码复制粘贴进文件:
在这里插入图片描述
配置为全双工模式,不能超过18M,设置为4分频:
在这里插入图片描述
观察配置引脚是否与原理图一致:
在这里插入图片描述
配置片选信号NSS低电平有效,所以PA4引脚设置为高电平,使用时拉低电平:
在这里插入图片描述
配置使能信号,默认使能:
在这里插入图片描述
配置IRQ中断输入引脚,低电平有效默认上拉:
在这里插入图片描述
在这里插入图片描述
.h文件2.4g通道设置:
在这里插入图片描述
将该函数Driver_SPI_SwapByte定义:
在这里插入图片描述
在应用层编写Start函数,在中间自检:
在这里插入图片描述
App_Task中编写通信任务:
与飞控任务优先级保持一致,与飞控任务重要性差不多。
在这里插入图片描述
测试通讯任务:
因为通讯任务和飞控任务优先级相同,所以可能会导致硬件出问题,在该处开头延时1000ms。使用Inf_Si24R1_TxPacket函数接受数据包,将数据保存在RX_BUFF中,返回值0接收到数据,1未接收到数据。
在这里插入图片描述
在这里插入图片描述

六.移植2.4g通讯(遥控部分)

根据原理图配置SPI接口:
在这里插入图片描述
在这里插入图片描述
在keil中配置.h文件:
在这里插入图片描述
管理目录结构:
在这里插入图片描述
删除多余功能后,编写通讯任务:
将数据填入TX_BUFF并根据返回值判读发射成功与否。
在这里插入图片描述
配置为发送模式:
在这里插入图片描述
根据原理图更改为串口一:
在这里插入图片描述
飞控端串口有数据打印,通讯正常:
在这里插入图片描述

七.通讯模块的完成(遥控部分)

定义了一个长度为18的发送数组:
在这里插入图片描述
在发送数组中定义前3个字节为自定义帧头,可以进行数据验证。第4个字节放真正的数据长度,如下显示数据长度为10个字节,之后10个字节存放真正的数据。最后4个字节将数据全部加起来存成校验和,接收方和发送方进行比较看是否相等。
在这里插入图片描述
代码逻辑:
在此代码中用于按 大端序 拆分多字节数据,确保传输的字节顺序符合协议要求。

/*** @description: 通过2.4g发送摇杆数据*  前3个字节: 0x01,0x02,0x03*  1个字节:   真正的数据长度  = 10*  10个字节:  真正的数据*  4个字节 :  校验和** @return {*}*/
void App_Communication_SendJoyStickData(void)
{uint8_t index = 0;/* 定义帧头 */TX_BUFF[index++] = FRAME_0;TX_BUFF[index++] = FRAME_1;TX_BUFF[index++] = FRAME_2;/* 定义实际的数据长度  后面根据实际的数据,再修改*/TX_BUFF[index++] = 0;/* 摇杆数据 */TX_BUFF[index++] = joyStick.THR >> 8;TX_BUFF[index++] = joyStick.THR;TX_BUFF[index++] = joyStick.YAW >> 8;TX_BUFF[index++] = joyStick.YAW;TX_BUFF[index++] = joyStick.PIT >> 8;TX_BUFF[index++] = joyStick.PIT;TX_BUFF[index++] = joyStick.ROL >> 8;TX_BUFF[index++] = joyStick.ROL;TX_BUFF[index++]     = joyStick.isPowerDown;joyStick.isPowerDown = 0; /* 清零关机命令 */TX_BUFF[index++]     = joyStick.isFixHeight; /* 接收方收到1之后,对定高进行取反操作 */joyStick.isFixHeight = 0;                    /* 只发一次 */TX_BUFF[3] = index - 4;/* 计算校验和 */int32_t sum = 0;for(uint8_t i = 0; i < index; i++){sum += TX_BUFF[i];}TX_BUFF[index++] = sum >> 24;TX_BUFF[index++] = sum >> 16;TX_BUFF[index++] = sum >> 8;TX_BUFF[index++] = sum;taskENTER_CRITICAL();Inf_Si24R1_TxPacket(TX_BUFF);taskEXIT_CRITICAL();
}

任务调用:

/* 2. 通讯任务 */
void communicationTask(void *args)
{vTaskDelay(1000);debug_printfln("通讯任务开始调度");uint32_t preTime = xTaskGetTickCount();while(1){App_Communication_SendJoyStickData();vTaskDelayUntil(&preTime, COMMUNICATION_EXEC_CYCLE);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/73642.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【源码分析】Nacos实例注册流程分析-事件驱动框架

【踩坑记录】 本人下载的Nacos 服务端版本是2.3.2&#xff0c;在开始进行源码编译便遇到问题&#xff0c;下面是各个问题记录 源码大量爆红 在最开始用Idea加载Maven项目的时候&#xff0c;发现项目中大量的代码爆红&#xff0c;提示其类或者包不存在&#xff0c;后来结果查…

【白话神经网络(二)】矩阵、CNN、RNN

全连接层 回顾前面学过的知识&#xff1a; 一个最简单的神经网络&#xff0c;就是ywxb 套上一个激活函数。 如果有多个输入&#xff0c;那就是多个w和x 如果有多个输出&#xff0c;那就再来一行公式&#xff0c;多一组w和b 要是神经元多了的话&#xff0c;公式密密麻麻的&…

Unity教程(二十二)技能系统 分身技能

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现 Unity教程&…

CTF WEB题

[文件包含,少许难度] 地址:攻防世界 代码审计WRONG WAY! <?php include("flag.php"); #包含了一个“flag.php”文件 highlight_file(__FILE__); #来显示当前文件的源代码 if(isset($_GET["file1"]) && isset($_GET["file2"])) #isse…

c++图论(一)之图论的起源和图的概念

C 图论之图论的起源和图的概念 图论&#xff08;Graph Theory&#xff09;是数学和计算机科学中的一个重要分支&#xff0c;其起源可以追溯到 18 世纪 的经典问题。以下是图论的历史背景、核心起源问题及其与基本概念和用途&#xff1a; 借用一下CSDN的图片哈 一、图论的起源&…

Ollama + CherryStudio:构建本地私有知识库

前面我们介绍了Ollama的安装和使用&#xff0c;并通过Open-WebUI进行调用&#xff0c;相信大家对Ollama也有了一定的了解&#xff1b;这篇博文就结合Ollama工具和CherryStudio工具构建一个本地知识库&#xff08;RAG&#xff09;&#xff1b;在进行接下来的操作之前&#xff0c…

【实战ES】实战 Elasticsearch:快速上手与深度实践-8.2.1AWS OpenSearch无服务器方案

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 8.2.1AWS OpenSearch 无服务器方案深度解析与实践指南1. Serverless架构的核心价值与行业趋势1.1 传统Elasticsearch集群的运维挑战1.2 Serverless技术演进路线技术特性对比…

图搜索的两种写法,广度优先和深度优先

最近AI的爆发大家都疯了&#xff0c;也确实够疯&#xff0c;前几年谁能天天和AI聊天呢&#xff0c;特别它越来越智能&#xff0c;越来越理解你&#xff0c;你越来越离不开它&#xff0c;我很好奇将来它会不会有情绪&#xff0c;太可怕了&#xff0c;一旦有了这个就有了感情&…

嵌入式八股RTOS与Linux---前言篇

前言 Linux与RTOS是校招八股的时候很喜欢考察的知识,在这里并没有把两个操作系统完全的独立开去讲,放在一起对比或许可能加深印象。我们讲Linux的内核有五部分组成:进程调度、内存管理、文件系统、网络接口、进程间通信,所以我也将从这五方面出发 中断管理去对比和RTOS的不同。…

基于Vue实现Echarts的平滑曲线

在Vue2.x的项目中使用echarts实现如下效果 安装echarts npm install echarts --save组件引入echarts // 在你的Vue组件中 import * as echarts from echarts;在模板中添加一个div元素&#xff0c;用来放置图表 <divref"chart"class"chart"style"…

Java 集合框架中 `List` 接口及其子类的详细介绍,并用 UML 图表展示层次结构关系,用表格对比各个类的差异。

下面是 Java 集合框架中 List 接口及其子类的详细介绍&#xff0c;并用 UML 图表展示层次结构关系。最后&#xff0c;我会用表格对比各个类的差异。 Java 集合框架中 List 接口及其子类 UML 类图描述 以下是 List 接口及其子类的 UML 类图描述&#xff0c;不包含方法。 详细…

Java面试八股—Redis篇

一、Redis的使用场景 &#xff08;一&#xff09;缓存 1.Redis使用场景缓存 场景&#xff1a;缓存热点数据&#xff08;如用户信息、商品详情&#xff09;&#xff0c;减少数据库访问压力&#xff0c;提升响应速度。 2.缓存穿透 正常的访问是&#xff1a;根据ID查询文章&…

【GPT入门】第22课 langchain LCEL介绍

【GPT入门】第22课 langchain LCEL介绍 1. LCEL介绍与特点2. 原生API与LCEL的对比2. 简单demo 1. LCEL介绍与特点 LCEL 即 LangChain Expression Language&#xff0c;是 LangChain 推出的一种声明式语言&#xff0c;用于简化和优化在 LangChain 框架内构建复杂链和应用的过程…

数据结构——单链表list

前言&#xff1a;大家好&#x1f60d;&#xff0c;本文主要介绍数据结构——单链表 目录 一、单链表 二、使用步骤 1.结构体定义 2.初始化 3.插入 3.1 头插 3.2 尾插 3.3 按位置插 四.删除 4.1头删 4.2 尾删 4.3 按位置删 4.4按值删 五 统计有效值个数 六 销毁…

堆排序:力扣215.数组中的第K个大元素

一、问题描述 在一个整数数组 nums 中&#xff0c;需要找出第 k 个最大的元素。这里要注意&#xff0c;我们要找的是数组排序后的第 k 个最大元素&#xff0c;而不是第 k 个不同的元素。例如&#xff0c;对于数组 [3,2,1,5,6,4]&#xff0c;当 k 2 时&#xff0c;第 2 个最大…

C语言(25)

一.数据在内存中的存储 1.整数在内存中的存储 整数在内存中以二进制的形式储存&#xff0c;分别为原码&#xff0c;补码&#xff0c;反码 有符号的整数&#xff0c;在上述三种形式都有符号位和数值位两个部分&#xff0c;符号位为0是正数&#xff0c;1是负数&#xff0c;最高…

鸿蒙开发-一多开发之媒体查询功能

在HarmonyOS中&#xff0c;使用ArkTS语法实现响应式布局的媒体查询是一个强大的功能&#xff0c;它允许开发者根据不同的设备特征&#xff08;如屏幕尺寸、屏幕方向等&#xff09;动态地调整UI布局和样式。以下是一个使用媒体查询实现响应式布局的实例&#xff1a; 1. 导入必要…

Docker运行hello-world镜像失败或超时:Unable to find image ‘hello-world:latest‘ locally Trying to pull reposi

Docker运行hello-world镜像失败或超时&#xff0c;报错&#xff1a;Unable to find image ‘hello-world:latest’ locally Trying to pull repository docker.io/library/hello-world … /usr/bin/docker-current: missing signature key. See ‘/usr/bin/docker-current run …

MySQL连接较慢原因分析及解决措施

文章目录 整体说明一、问题现象二、问题分析2.1、DNS反向解析问题2.2、网络问题2.3、SSL/TLS协商问题2.4、自动补全的延迟 三、问题解决 摘要&#xff1a; MySQL连接较慢原因分析及解决措施 关键词&#xff1a; MySQL、连接缓慢、客户端、参数设置 整体说明 在使用MySQL的时候…

C++之文字修仙小游戏

1 效果 1.1 截图 游戏运行&#xff1a; 存档&#xff1a; 1.2 游玩警告 注意&#xff01;不要修改装备概率&#xff0c;装备的概率都是凑好的数字。如果想要速升&#xff0c;修改灵石数量 2 代码 2.1 代码大纲 1. 游戏框架与初始化 控制台操作&#xff1a;通过 gotoxy() …