STM32标准库移植FreeRTOS并测试

STM32标准库移植FreeRTOS并测试

    • 最终现象
    • 一、移植
      • ①下载FreeRTOS源码
      • ②移植步骤
    • 二、测试
    • 三、工程项目

最终现象

主函数中创建三个任务,优先级都相同,意味着每个任务执行固定事件之后就会轮到下一个任务运行,由于这个时间是很短的,近似可以看成多任务同时运行。不同任务操控不同的led灯亮灭,最终视觉上的效果就是三个灯同时亮灭。

一、移植

①下载FreeRTOS源码

方法一:直接上官网下载
方法二:夸克网盘

②移植步骤

1、在自己的项目下新建FreeRTOS文件夹(项目直接使用江协科技的流水灯程序)
在这里插入图片描述
2、在新建的FreeRTOS文件夹中新建以下三个文件夹
在这里插入图片描述
3、将下面两图中的所有文件复制进前面新建好的port文件夹中
在这里插入图片描述
在这里插入图片描述
4将下图中所有头文件复制进前面新建好的inc文件夹中(README文件就不用了)
在这里插入图片描述
5、将下图中所有c文件复制进前面新建好的src文件夹中
在这里插入图片描述
6、将一个重要头文件复制到FreeRTOS目录下
在这里插入图片描述
完成后如下:
在这里插入图片描述
7、打开工程项目添加前面复制进来的文件到工程里
①添加文件路径
点击魔术棒--------点击C/C++----------
在这里插入图片描述
在这里插入图片描述
②新建组存放这些文件
在这里插入图片描述
③将文件添加进来
在这里插入图片描述
按照上述上图方式把三个文件夹的文件全部添加进来。注意port文件夹只需要添加两个文件即可,如下:
在这里插入图片描述
还有一个注意就是需要将FreeRTOSConfig.h也添加到inc组中,操作是一样的,只要找到点击添加就可以。

8、打开工程项目,修改代码
①修改FreeRTOSConfig.h文件:
在endif前加上以下三行代码:

#define xPortPendSVHandler  PendSV_Handler
#define vPortSVCHandler     SVC_Handler
#define xPortSysTickHandler SysTick_Handler

②修改stm32f10x_it.c文件:
将下图中圈起来的三个中断函数删除
在这里插入图片描述

二、测试

直接在main.c编写代码即可因为只是简单的点灯:

#include "stm32f10x.h"          
#include "Delay.h" 
#include "FreeRTOS.h"      //使用之前至少要包含FreeRTOS.h和task.h
#include "task.h"

TaskHandle_t mytask1;      //任务句柄
TaskHandle_t mytask2;
TaskHandle_t mytask3;

void myTask( void *arg )
{
	while(1)
	{
		GPIO_ResetBits(GPIOC, GPIO_Pin_13);
		vTaskDelay(500);
		GPIO_SetBits(GPIOC, GPIO_Pin_13);
		vTaskDelay(500);
	}
}

void myTask2( void *arg )
{
	while(1)
	{
		GPIO_ResetBits(GPIOC, GPIO_Pin_14);
		vTaskDelay(500);
		GPIO_SetBits(GPIOC, GPIO_Pin_14);
		vTaskDelay(500);
	}
}

void myTask3( void *arg )
{
	while(1)
	{
		GPIO_ResetBits(GPIOC, GPIO_Pin_15);
		vTaskDelay(500);
		GPIO_SetBits(GPIOC, GPIO_Pin_15);
		vTaskDelay(500);
	}
}

	

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC, &GPIO_InitStructure);
	GPIO_ResetBits(GPIOC, GPIO_Pin_13);
	GPIO_ResetBits(GPIOC, GPIO_Pin_14);
	GPIO_ResetBits(GPIOC, GPIO_Pin_15);
	
	xTaskCreate(myTask,"matask",512,NULL,2,&mytask1);      //创建三个优先级相同的任务
	xTaskCreate(myTask2,"matask2",512,NULL,2,&mytask2);
	xTaskCreate(myTask3,"matask3",512,NULL,2,&mytask3);
	vTaskStartScheduler();      //开启任务调度,这句代码之后的程序不会执行,比如下面的while死循环
	
	while (1)
	{
	}
}

三、工程项目

我用夸克网盘分享了「STM32标准库移植FreeRTOS.rar」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。
链接:https://pan.quark.cn/s/7ff1f2cb2f0d

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

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

相关文章

免费文字转语音工具,一款优秀且永久免费的文字转语音工具,同时拥有多种类型男声女声,支持多国语言转换,支持语速调节和下载!

一、软件简介 该工具只有一个功能,就是将输入框内的纯文本内容转换为指定语言的音频,并且可以自由调节语速及音色(男声/女声),其内置了多种语音包,包含男声、女声、普通话、粤语以及方言,并且支…

Sodinokibi(REvil)勒索病毒最新变种,攻击Linux平台

前言 国外安全研究人员爆光了一个Linux平台上疑似Sodinokibi勒索病毒家族最新样本,如下所示: Sodinokibi(REvil)勒索病毒的详细分析以及资料可以参考笔者之前的一些文章,这款勒索病毒黑客组织此前一直以Windows平台为主要的攻击目标&#xf…

学习通考试怎么搜题找答案? #学习方法#微信#其他

大学生必备的做题、搜题神器,收录上万本教材辅助书籍,像什么高数、物理、计算机、外语等都有,资源十分丰富。 1.菜鸟教程 菜鸟教程是一个完全免费的编程学习软件。 它免费提供了HTML / CSS 、JavaScript 、服务端、移动端、XML 教程、http…

OpenEuler20.03LTS SP2 上安装 OpenGauss3.0.0 单机部署过程(二)

开始安装 OpenGauss 数据库 3.1.7 安装依赖包 (说明:如果可以联网,可以通过网络 yum 安装所需依赖包,既可以跳过本步骤。如果网络无法连通,请把本文档所在目录下的依赖包上传到服务器上,手工安装后,即无需通过网络进行 Yum 安装了): 上传:libaio-0.3.111-5.oe1.x8…

前后端通讯:前端调用后端接口的五种方式,优劣势和场景

Hi,我是贝格前端工场,专注前端开发8年了,前端始终绕不开的一个话题就是如何和后端交换数据(通讯),本文先从最基础的通讯方式讲起。 一、什么是前后端通讯 前后端通讯(Frontend-Backend Commun…

C语言----内存函数

内存函数主要用于动态分配和管理内存,它直接从指针的方位上进行操作,可以实现字节单位的操作。 其包含的头文件都是:string.h memcpy copy block of memory的缩写----拷贝内存块 格式: void *memcpy(void *dest, const void …

【RT-DETR进阶实战】利用RT-DETR进行过线统计(可用于人 、车过线统计)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 Hello,各位读者,最近会给大家发一些进阶实战的讲解,如何利用RT-DETR现有的一些功能进行一些实战, 让我们不仅会改进RT-DETR,也能够利用RT-DETR去做一些简单的小工作,后面我也会将这些功能利用PyQt或者是p…

windows安装sqlite

windows安装sqlite比linux麻烦很多 1.下载 下载链接:链接 下载dll的zip文件 2.解压并放到文件夹 将压缩包内的文件解压,放到C://sqlite下 3.编辑环境变量 添加到系统变量的path中 4.验证 打开命令提示符,输入 sqlite3有结果就行

【八大排序】归并排序 | 计数排序 + 图文详解!!

📷 江池俊: 个人主页 🔥个人专栏: ✅数据结构冒险记 ✅C语言进阶之路 🌅 有航道的人,再渺小也不会迷途。 文章目录 一、归并排序1.1 基本思想 动图演示2.2 递归版本代码实现 算法步骤2.3 非递归版本代…

rediss集群 三主三从集群模式

三主三从集群模式 1)、新建redis集群目录:7001~7006工作目录【/app/soft/redis-cluster/目下】 2)、在7001~7006 目录下创建bin和conf 目录,然后将/app/soft/redis/bin目录下的文件分别拷贝到7001~7006 目录,然后在7001~7006 目…

Blazor SSR/WASM IDS/OIDC 单点登录授权实例2-登录信息组件wasm

目录: OpenID 与 OAuth2 基础知识Blazor wasm Google 登录Blazor wasm Gitee 码云登录Blazor SSR/WASM IDS/OIDC 单点登录授权实例1-建立和配置IDS身份验证服务Blazor SSR/WASM IDS/OIDC 单点登录授权实例2-登录信息组件wasmBlazor SSR/WASM IDS/OIDC 单点登录授权实例3-服务端…

【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏16(附项目源码)

本节最终效果演示 【独游开发记录】一个人开发的,类森林,七日杀生存游戏 文章目录 本节最终效果演示系列目录前言泛型单例添加声音脚步声鸭子动物音效人物各种操作音效砍树音效 效果源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列&#x…

106. 从中序与后序遍历序列构造二叉树 - 力扣(LeetCode)

题目描述 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 题目示例 输入:inorder [9,3,15,20,7], postorder [9,15,7,20,3] 输出&a…

Android13多媒体框架概览

Android13多媒体框架概览 Android 多媒体框架 Android 多媒体框架旨在为 Java 服务提供可靠的接口。它是一个系统,包括多媒体应用程序、框架、OpenCore 引擎、音频/视频/输入的硬件设备,输出设备以及一些核心动态库,比如 libmedia、libmedi…

1-3 mininet中使用python API直接拓扑定义以及启动方式对比

作为SDN网络中搭建拓扑非常重要的仿真平台,我们可以使用mininet默认的库内拓扑文件,也可以使用python语言进行自定义拓扑。使用python进行拓扑定义时,不同的定义方式将导致其启动的方式由所不同。 一、采用最原始的命令启动方式: …

MATLAB知识点:使用逻辑值修改或删除矩阵元素

​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 节选自第3章 3.4.4 逻辑运算 3.4.4.3 使用逻辑值修改或删…

【java】简单的Java语言控制台程序

一、用于文本文件处理的Java语言控制台程序示例 以下是一份简单的Java语言控制台程序示例,用于文本文件的处理。本例中我们将会创建一个程序,它会读取一个文本文件,显示其内容,并且对内容进行计数,然后将结果输出到控…

Github 2024-02-09 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-02-09统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4Go项目2Scala项目1PLpgSQL项目1Ruby项目1HTML项目1Solidity项目1Lua项目1 开源个人理财应用 Mayb…

【小沐学GIS】基于Python绘制三维数字地球Earth(OpenGL)

🍺三维数字地球系列相关文章如下🍺:1【小沐学GIS】基于C绘制三维数字地球Earth(OpenGL、glfw、glut)第一期2【小沐学GIS】基于C绘制三维数字地球Earth(OpenGL、glfw、glut)第二期3【小沐学GIS】…

JavaSE——数组(2/2)-数组在计算机中的执行原理、数组案例、Debug工具的使用

目录 数组在计算机中的执行原理 Java内存分配介绍 数组的执行原理 多变量指向同一数组 数组案例 求最大值 数组反转 随机排名 Debug工具的使用 数组在计算机中的执行原理 Java内存分配介绍 程序都是在内存中执行的,Java程序编译之后会产生一个class文件&…