基于FreeRTOS系统的STM32简易遥控器设计

项目说明

该项目是一个基于FreeRTOS系统的Stm32遥控器设计。使用该项目主要是自己学习FreeRTOS的使用,以及模块化编程的思想。这个项目应该长期会有更新。

项目开源

github:https://github.com/snqx-lqh/Stm32RemoteControl

gitee:https://gitee.com/snqx-lqh/Stm32RemoteControl

github的更新应该相对比较新一点,gitee是拉取的,有时候可能会忘

开源文件夹中

CodeRx是用正点原子mini板连接的一个NRF24L01模块做的接收测试,自己测试的话换一下引脚就可以了。

CodeTxFreeRtos是遥控器使用的代码。

Hardware是硬件设计的原理图,使用的嘉立创

img保存的一些图片

硬件设计

原理图设计

具体设计图去开源链接查看,这里说大概这个项目包含哪些模块。

主控:stm32f103cbt6,但是原理图画的C8T6不影响,只是存储大小的问题

陀螺仪:mpu6050

无线传输:NRF24L01

遥杆:16x16/10K回中

显示:0.96OLED iic接口

实物展示

请添加图片描述
请添加图片描述

软件设计

FreeRTOS结构

整体的结构是一个开始任务,然后创建几个任务,中间还有任务是需要挂起和唤醒的

start_task:这个任务主要拿来创建任务,创建完成后就删除任务
user_task:这个任务拿来做一些测试,比如检查每个任务的栈剩余空间
rc_data_task:这个任务拿来做获取遥控器的数据
nrf_task:这个任务拿来做无线数据的发送
gui_task:这个任务拿来做显示器的界面显示
shell_task:这个任务拿来做串口的shell输出,移植的是开源项目letter-shell
ano_task:这个任务拿来做上位机显示数据,移植的是开源项目匿名上位机
game_task:这个任务拿来做游戏测试,常规是未初始化的,在gui_task里面会对他进行删除和创建。

start_task

开始任务,在这个任务里面,定义了各个任务所需要的栈空间大小,优先级,任务句柄,将任务创建完成后就删除这个开始任务。在开始任务中还定义了一个互斥量,这个互斥量拿来防止获取遥控器数据时的冲突。

user_task

这个任务自己做测试使用,我在这个里面使用了读取剩余栈空间大小的函数,输入任务句柄就能查看。

UBaseType_t uxHighWaterMark;
uxHighWaterMark = uxTaskGetStackHighWaterMark( USERTask_Handler );

rc_data_task

这个任务主要拿来获取遥控器的数据,包括遥杆数据,电源数据,按键数据,陀螺仪数据。

遥感数据、电源数据其实就是读adc的值

按键数据既读取了原始按键值,也通过KeyScan按键扫描获得按键按下的状态,获得按下的状态在界面控制里面会使用

陀螺仪数据就是普通的读取6050的数据。

这里介绍一下陀螺仪部分的驱动分离的思想。

陀螺仪使用的是软件IIC读取的,软件IIC也使用了驱动分离,先说陀螺仪。

在mpu6050_driver文件中,定义了mpu6050的操作函数mpu6050_operations。然后在写相关功能的时候,使用的是结构体指针,这样的话。我后面只需定义一个mpu6050操作函数的结构体,然后重写里面的操作函数,就可以实现调用6050里面的函数,如果有两个6050,定义两个操作函数结构体就行,然后在获取数据的时候,传入不同的结构体变量就可以实现不同的设备获取数据,而不用修改这个driver文件。

至于里面的实现,参考的就是正点原子的代码,做了一些删减,和定义。

至于软件IIC,思想和陀螺仪一样,包括软件的spi和ssd1306都是这样,定义一个操作函数的结构体,然后使用函数指针的方式来写应用,实际使用的时候,只需要初始化一个结构体,然后重写结构体里面的函数就可以了。

nrf_task

这个任务里面初始化nrf24L01的使用,至于设备的实现,和6050很像,移植的代码还是正点原子的,只不过我改成了指针实现的方式。为了实现方便移植。

gui_task

这个里面的相关函数实现看我之前的博客链接

在这里,加了一些的东西就是,在game那里,使用了创建任务的方式,然后传入参数,创建后挂起GUI任务,在game_task中,实现完成后,又恢复gui_task。

shell_task

这个移植的开源项目letter-shell,我移植的是3.0版本,https://github.com/NevermindZZT/letter-shell/tree/shell3.0,但是这个任务我一般没有打开使用,他的串口接收,是放在的bsp_usart里面

ano_task

这个移植的是匿名助手,https://gitee.com/anotc/AnoAssistant,他的接收部分也是放在的bsp_usart里面。

game_task

这个任务的创建是在gui_task里面实现的,然后里面目前实现了一个弹球的游戏。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

conda 创建 python3.10.12 环境

conda 创建 python3.10.12 环境 介绍使用前置条件:安装 conda配置环境变量验证 Conda 安装结果创建环境:python激活 Anaconda 环境 验证 Python 版本。 介绍 Conda是一个开源的包管理和环境管理系统,由Continuum Analytics公司开发。它可以安…

【InternLM 实战营第二期笔记】InternLM1.8B浦语大模型趣味 Demo

体验环境 平台:InternStudio GPU:10% 配置基础环境 studio-conda -o internlm-base -t demo 与 studio-conda 等效的配置方案 conda create -n demo python3.10 -y conda activate demo conda install pytorch2.0.1 torchvision0.15.2 torchaudio2…

使用MySQL和PHP创建一个公告板

目录 一、创建表 二、制作首页(创建主题以及显示列表) 三、制作各个主题的页面(输入回帖和显示列表) 四、制作消息的查询界面 五、制作读取数据库信息的原始文件 六、制作数据重置页面 七、效果图 八、问题 1、目前无法处…

轻量应用服务器16核32G28M腾讯云租用优惠价格4224元15个月

腾讯云16核32G服务器租用价格4224元15个月,买一年送3个月,配置为:轻量16核32G28M、380GB SSD盘、6000GB月流量、28M带宽,腾讯云优惠活动 yunfuwuqiba.com/go/txy 活动链接打开如下图: 腾讯云16核32G服务器租用价格 腾讯…

三栏布局——面试/笔试题

目录 三栏布局(两端指定宽度&#xff0c;中间自适应)三栏布局(平均分布) 三栏布局(两端指定宽度&#xff0c;中间自适应) 只介绍简单的写法&#xff0c;圣杯布局之类的比较复杂&#xff0c;实际上越简单越好&#xff0c;所以复杂的就不介绍了 flex布局 <!DOCTYPE html>…

vultr ubuntu 服务器远程桌面安装及连接

一. 概述 vultr 上开启一个linux服务器&#xff0c;都是以终端形式给出的&#xff0c;默认不带 ui 桌面的&#xff0c;那其实对于想使用服务器上浏览器时的情形不是很好。那有没有方法在远程服务器安装桌面&#xff0c;然后原程使用呢&#xff1f;至少ubuntu的服务器是有的&am…

HTTP/1.1、HTTP/2、HTTP/3 演变(计算机网络)

HTTP/1.1 相比 HTTP/1.0 提高了什么性能&#xff1f; HTTP/1.1 相比 HTTP/1.0 性能上的改进&#xff1a; 使用长连接改善了短连接造成的性能开销。支持管道网络传输&#xff0c;只要第一个请求发出去了&#xff0c;不必等其回来&#xff0c;就可以发第二个请求出去&#xff0c…

数据库----数据类型正确选择

mysql支持的数据类型&#xff1a; 数值型&#xff0c;如INT&#xff0c;BIGINT&#xff0c;FLOAT和decimal 日期和时间类型&#xff0c;如DATE,TIME和TIMESTAMP等 字符串类型&#xff0c;如VARCHAR,CHAR和BLOB 空间数据类型&#xff0c;如GEOMETRY&#xff0c;POINT和POLYGON J…

解决创建springboot项目时,无法选中java8的问题

主要原因是springboot3.0.0以上版本需要jdk17. 问题描述&#xff1a; 解决办法&#xff1a; 在Server url上点击齿轮&#xff0c;把http://start.springboot.io/更改为https://start.aliyun.com/ 效果如下

速通汇编(三)寄存器及汇编mul、div指令

一&#xff0c;寄存器及标志 AH&ALAX(accumulator)&#xff1a;累加寄存器BH&BLBX(base)&#xff1a;基址寄存器CH&CLCX(count)&#xff1a;计数寄存器DH&DLDX(data)&#xff1a;数据寄存器SP(Stack Pointer)&#xff1a;堆栈指针寄存器BP(Base Pointer)&#…

C#调用FreeSpire.Office读取word数据的基本用法

FreeSpire.Office是Spire.Office的免费版本&#xff0c;后者支持全面、复杂的office文件操作功能&#xff0c;包括文件格式转换、文档操作、文档打印等&#xff0c;详细介绍见下图及参考文献1。本文学习FreeSpire.Office的基本用法并用其获取word文档的基本信息。   新建Win…

python统计分析——双样本均值比较

参考资料&#xff1a;python统计分析【托马斯】 1、配对样本t检验 在进行两组数据之间的比较时&#xff0c;有两种情况必须区分开。在第一种情况中&#xff0c;同一对象在不同时候的两个记录值进行相互比较。例如&#xff0c;用学生们进入初中时的身高和他们一年后的身高&…

学习transformer模型-Positional Encoding位置编码的简明介绍

今天介绍transformer模型的positional encoding 位置编码 背景 位置编码用于为序列中的每个标记或单词提供一个相对位置。在阅读句子时&#xff0c;每个单词都依赖于其周围的单词。例如&#xff0c;有些单词在不同的上下文中具有不同的含义&#xff0c;因此模型应该能够理解这…

鸿蒙OS开发实例:【ArkTS 实现MQTT协议】

介绍 MQTT是物联网中的一种协议&#xff0c;在HarmonyOS API9平台&#xff0c;解决方案以C库移植为实现方案。 遥遥领先的平台&#xff0c;使用MQTT怎能不遥遥领先呢&#xff01; 新年快乐&#xff0c;本篇将带领你手把手实现HarmonyOS ArkTS语言的MQTT协议。 准备 阅读…

LLM--提示词Propmt的概念、作用及如何设计提示词

文章目录 1. 什么是提示词&#xff1f;2. 提示词的作用3. 如何设计提示词&#xff1f;3.1. 提供详细的信息3.2. 指定角色3.3. 使用分隔符和特殊符号3.4. 提供示例3.5. 少量示例的思维链&#xff08;COT&#xff09;模型3.6. 思维树&#xff08;TOT&#xff09;模型3.7. 自洽性 …

【4】单链表(有虚拟头节点)

【4】单链表&#xff08;有虚拟头节点&#xff09; 1、虚拟头节点2、构造方法3、node(int index) 返回索引位置的节点4、添加5、删除6、ArrayList 复杂度分析(1) 复杂度分析(2) 数组的随机访问(3) 动态数组 add(E element) 复杂度分析(4) 动态数组的缩容(5) 复杂度震荡 7、单链…

【Linux 10】环境变量

文章目录 &#x1f308; Ⅰ 命令行参数⭐ 1. main 函数的参数⭐ 2. main 函数参数的意义⭐ 3. 查看 argv 数组的内容⭐ 4. 命令行参数结论⭐ 5. 为什么要有命令行参数⭐ 6. 命令行参数传递由谁执行 &#x1f308; Ⅱ 环境变量基本概念⭐ 1. 常见环境变量 &#x1f308; Ⅲ 查看…

LeetCode_876(链表的中间结点)

//双指针//时间复杂度O(n) 空间复杂度O(1)public ListNode middleNode(ListNode head) {ListNode slowhead,fast head;while (fast!null && fast.next!null){slow slow.next;fast fast.next.next;}return slow;} 1->2->3->4->5->null 快指针移动两个…

9款免费云服务器,最长永久免费使用

随着云计算技术的快速发展&#xff0c;越来越多的企业和个人开始选择使用云服务器。云服务器提供了灵活、可扩展且易于管理的资源&#xff0c;使得用户可以根据需求随时调整计算能力。本文将分享9款免费云服务器&#xff0c;其中最长可永久免费使用&#xff0c;为用户提供了更多…

flutter官方案例context_menus

1&#xff1a;根据项目中的案例进行部署 2&#xff1a;运行查看有什么用&#xff0c;可不可以直接复制粘贴 案例地址 https://github.com/flutter/samples/tree/main/context_menus案例展示方法 直接把这个文件夹中的文件复制到lib文件夹中 3&#xff0c;19&#xff0c;4的fl…