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

2024-04-01 10:20

本文主要是介绍基于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里面实现的,然后里面目前实现了一个弹球的游戏。

这篇关于基于FreeRTOS系统的STM32简易遥控器设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/866906

相关文章

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

Linux系统中的firewall-offline-cmd详解(收藏版)

《Linux系统中的firewall-offline-cmd详解(收藏版)》firewall-offline-cmd是firewalld的一个命令行工具,专门设计用于在没有运行firewalld服务的... 目录主要用途基本语法选项1. 状态管理2. 区域管理3. 服务管理4. 端口管理5. ICMP 阻断

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

Windows 系统下 Nginx 的配置步骤详解

《Windows系统下Nginx的配置步骤详解》Nginx是一款功能强大的软件,在互联网领域有广泛应用,简单来说,它就像一个聪明的交通指挥员,能让网站运行得更高效、更稳定,:本文主要介绍W... 目录一、为什么要用 Nginx二、Windows 系统下 Nginx 的配置步骤1. 下载 Nginx2. 解压

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹

windows系统上如何进行maven安装和配置方式

《windows系统上如何进行maven安装和配置方式》:本文主要介绍windows系统上如何进行maven安装和配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. Maven 简介2. maven的下载与安装2.1 下载 Maven2.2 Maven安装2.

使用Python实现Windows系统垃圾清理

《使用Python实现Windows系统垃圾清理》Windows自带的磁盘清理工具功能有限,无法深度清理各类垃圾文件,所以本文为大家介绍了如何使用Python+PyQt5开发一个Windows系统垃圾... 目录一、开发背景与工具概述1.1 为什么需要专业清理工具1.2 工具设计理念二、工具核心功能解析2.

Linux系统之stress-ng测压工具的使用

《Linux系统之stress-ng测压工具的使用》:本文主要介绍Linux系统之stress-ng测压工具的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、理论1.stress工具简介与安装2.语法及参数3.具体安装二、实验1.运行8 cpu, 4 fo