STM32-FreeRTOS的详细配置

配置FreeRTOS

原文链接:https://ydamooc.github.io/posts/c9defcd/

1.1 下载FreeRTOS

  1. 打开FreeRTOS官网:https://www.freertos.org/

    请添加图片描述

  2. 点击下载,并且选择"FreeRTOS 202212.01"版本,再点击Download按钮下载官方的资源包。

    请添加图片描述

  3. 下载好资源包后,解压到任意目录,例如我解压到了“G:\FreeRTOS”目录下,由于资源包里面包含的文件较多,解压相对会慢一点,大家需要耐心等待。

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

  4. 解压完成后,我们打开FreeRTOS文件夹中的FreeRTOSv202212.01文件夹,打开后可以看到里面有很多文件和文件夹,其中我们要使用的是FreeRTOS文件夹中的东西。

请添加图片描述

1.2 配置相关的文件

  1. 随后打开FreeRTOS文件夹,我们在这里面需要关注的是Source文件夹中的内容,以及Demo文件夹中的内容(后续会使用到其中的文件)。我们打开Source文件夹,在当前目录下,我们需要保留这一部分的文件,其他用不到可以删除掉。

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

  2. 接着再打开portable文件夹,在当前目录下,我们需要保留这一部分的文件,其他用不到可以删除掉。其中MemMang文件夹中存放的是内存管理的相关文件,RVDS文件夹中存放的各个内核相关的文件,我们这里使用的是STM32F103C8T6单片机,所以我们需要的是ARM_CM3文件夹中的内容,其他用不到可以删除掉。

请添加图片描述
在这里插入图片描述

在这里插入图片描述

  1. 因为我们使用的是STM32F103C8T6单片机,在Source文件夹中还缺少FreeRTOS相关的配置文件,我们回到"FreeRTOSv202212.01\FreeRTOS"目录下,然后打开Demo文件夹,在里面找到CORTEX_STM32F103_Keil项目打开,将里面的FreeRTOSConfig.h文件复制到前面的Source文件夹中。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 接下来我们需要打开一个空白的STM32工程文件,本文使用的空白工程文件来自于立创开发板的地阔星STM32F103C8T6资料中的空白工程模板,大家可以自行点击下载地阔星资料。当然使用别的空白工程模板也是可以的,只要能正常编译即可。

    在这里插入图片描述

  2. 下载解压后,打开第03章【立创·STM32F103C8T6开发板】软件资料中的空白工程模板文件夹,然后将里面的STM32F103C8T6_ProjectTemplate.zip解压到任意目录下,解压完成后,将名字修改成FreeRTOS_ProjectTemplate,方便后续操作。

    在这里插入图片描述

  3. 接着在FreeRTOS_ProjectTemplate中创建一个名为FreeRTOS的文件夹,然后回到"FreeRTOSv202212.01\FreeRTOS\Source"目录下,将前面我们保留的Source文件夹中的内容复制到FreeRTOS_ProjectTemplate中的FreeRTOS文件夹中。

    在这里插入图片描述

    在这里插入图片描述

1.3 配置Keil中的STM32代码

  1. FreeRTOS_ProjectTemplate中,根据下面路径,打开项目。打开后,我们先编译一次项目。

    在这里插入图片描述

    在这里插入图片描述

  2. 接着我们为项目创建文件夹,分别为FreeRTOS_COREFreeRTOS_PORT,然后根据下图,将相关的文件添加进这两个文件夹中。

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

  3. 添加完文件之后,打开魔术棒,然后点击C/C++选项卡,将FreeRTOS文件夹中的.h路径添加进去。

    在这里插入图片描述

  4. 由于需要对stm32f10x_it.c文件进行修改,而在项目中是没有添加进去的,我们需要手动添加一下,该文件所在路径是FreeRTOS_ProjectTemplate\module,所以我们在左侧右键MODULE文件夹,然后选择Add Files to Group ‘MODULE’,然后选择stm32f10x_it.c文件添加进去。添加完之后需要编译一下,确保没有问题。

    在这里插入图片描述

    在这里插入图片描述

  5. 接着在左侧打开FreeRTOS_CORE文件夹,打开FreeRTOSConfig.h文件,在第49行处,将原来的171024修改成101024。

    在这里插入图片描述

  6. FreeRTOSConfig.h文件中的最一行前添加上必要的中断声明。

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

    在这里插入图片描述

  7. stm32f10x_it.c文件中,找到SVC_Handler函数、PendSV_Handler函数和SysTick_Handler函数,将原来的代码注释掉,并且在main.c中添加上头文件,然后编译。

    请添加图片描述

    请添加图片描述

1.4 对配置好的工程进行测试

  1. main.c文件开头创建一个任务句柄,并且创建一个任务函数,任务函数的形参必须为void*类型。创建完成后在函数里面写上以下代码。

    请添加图片描述

    void myTask(void* pv)
    {GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStructure);GPIO_ResetBits(GPIOC,GPIO_Pin_13);while(1){GPIO_SetBits(GPIOC, GPIO_Pin_13);vTaskDelay(1000);GPIO_ResetBits(GPIOC, GPIO_Pin_13);vTaskDelay(1000);}
    }
    
  2. main函数中,创建任务,并且启动调度器,代码修改如下。

    int main(void)
    {board_init();xTaskCreate(myTask, "myTask", 1024, NULL, 2, &myTaskHandler);vTaskStartScheduler();while(1){}
    }
    
  3. 编译通过后,将程序下载到开发板中,可以看到LED灯每隔1秒闪烁一次,至此说明FreeRTOS相关的配置已经配置完成。

请添加图片描述

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

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

相关文章

Linux笔记---动静态库(原理篇)

1. ELF文件格式 动静态库文件的构成是什么样的呢?或者说二者的内容是什么? 实际上,可执行文件,目标文件,静态库文件,动态库文件都是使用ELF文件格式进行组织的。 ELF(Executable and Linkable…

HVV-某田相关经历

一、背景 本次项目为期两周,由集团主导招募攻击队员对集团下属及其子公司进行的攻防演练。本次项目主导研判分析应急排查内部Nday发掘。 二、研判分析 2.1、帆软V10 漏洞概述 帆软 V10 及 V11 版本报表软件存在反序列化漏洞,攻击者可利用该漏洞使用…

AI与物联网的深度融合:开启智能生活新时代

在当今数字化时代,人工智能(AI)和物联网(IoT)作为两大前沿技术,正在加速融合,为我们的生活和工作带来前所未有的变革。这种融合不仅提升了设备的智能化水平,还为各行各业带来了新的机…

Linux `init` 相关命令的完整使用指南

Linux init 相关命令的完整使用指南—目录 一、init 系统简介二、运行级别(Runlevel)详解三、常用 init 命令及使用方法1. 切换运行级别2. 查看当前运行级别3. 服务管理4. 紧急模式(Rescue Mode) 四、不同 Init 系统的兼容性1. Sy…

UNet 改进(12):UNet with ECA (Efficient Channel Attention) 网络

详解 下面将详细解析这个实现了ECA注意力机制的UNet网络代码。 1. 代码概述 代码实现了一个带有Efficient Channel Attention (ECA)模块的UNet网络架构。 UNet是一种常用于图像分割任务的编码器-解码器结构网络,而ECA模块则是一种轻量级的通道注意力机制,可以增强网络对重…

视频监控EasyCVR视频汇聚平台接入海康监控摄像头如何配置http监听功能?

一、方案概述 本方案主要通过EasyCVR视频管理平台,实现报警信息的高效传输与实时监控。海康监控设备能通过HTTP协议将报警信息发送至指定的目的IP或域名,而EasyCVR平台则可以接收并处理这些报警信息,同时提供丰富的监控与管理功能&#xff0…

人工智能与网络安全:AI如何预防、检测和应对网络攻击?

引言:网络安全新战场,AI成关键角色 在数字化浪潮不断推进的今天,网络安全问题已经成为每一家企业、每一个组织无法回避的“隐形战场”。无论是电商平台、金融机构,还是政府机关、制造企业,都可能面临数据泄露、勒索病毒…

3D人脸扫描技术如何让真人“进入“虚拟,虚拟数字人反向“激活“现实?

随着虚拟人技术的飞速发展,超写实数字人已经成为数字娱乐、广告营销和虚拟互动领域的核心趋势。无论是企业家、知名主持人还是明星,数字分身正在以高度还原的形象替代真人参与各类活动,甚至成为品牌代言、直播互动的新宠。 3D人脸扫描&#…

递归函数详解

定义 递归是指一个函数在其定义中直接或间接地调用自身的方法。通过这种方式,函数可以将一个复杂的问题分解为规模更小的、与原问题相似的子问题,然后通过不断地解决这些子问题来最终解决整个问题。 组成部分 递归主体 这是函数中递归调用自身的部分…

ASP.NET Core Web API 配置系统集成

文章目录 前言一、配置源与默认设置二、使用步骤1)创建项目并添加配置2)配置文件3)强类型配置类4)配置Program.cs5)控制器中使用配置6)配置优先级测试7)动态重载配置测试8)运行结果示…

在生信分析中,从生物学数据库中下载的序列存放在哪里?要不要建立一个小型数据库,或者存放在Gitee上?

李升伟 整理 在Galaxy平台中使用时,从NCBI等生物学数据库下载的DNA序列的存储位置和管理方式需要根据具体的工作流程和需求进行调整。以下是详细的分步说明和建议: 一、Galaxy中DNA序列的默认存储位置 在Galaxy的“历史记录”(History&…

SDK游戏盾如何接入?复杂吗?

接入SDK游戏盾(通常指游戏安全防护类SDK,如防DDoS攻击、防作弊、防外挂等功能)的流程和复杂度取决于具体的服务商(如腾讯云、上海云盾等)以及游戏类型和技术架构。以下是一般性的接入步骤、复杂度评估及注意事项&#…

通过类似数据蒸馏或主动学习采样的方法,更加高效地学习良品数据分布

好的,我们先聚焦第一个突破点: 通过类似数据蒸馏或主动学习采样的方法,更加高效地学习良品数据分布。 这里我提供一个完整的代码示例: ✅ Masked图像重建 残差热力图 这属于自监督蒸馏方法的一个变体: 使用一个 预…

【课题推荐】多速率自适应卡尔曼滤波(MRAKF)用于目标跟踪

多速率自适应卡尔曼滤波(Multi-Rate Adaptive Kalman Filter, MRAKF)是一种针对多传感器异步数据融合的滤波算法,适用于传感器采样率不同、噪声特性时变的目标跟踪场景。本文给出一个多速率自适应卡尔曼滤波框架,以无人机跟踪场景为例,融合IMU和GPS数据 文章目录 背景多速…

软考 系统架构设计师系列知识点之杂项集萃(49)

接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(48) 第76题 某文件管理系统在磁盘上建立了位视图(bitmap),记录磁盘的使用情况。若磁盘上物理块的编号依次为:0、1、2、……&#xff1b…

HTTP:七.HTTP缓存

HTTP缓存介绍 HTTP缓存是一种通过存储网络资源的副本,以减少对原始服务器请求的技术。当客户端再次请求相同资源时,如果该资源未过期,服务器可以直接从本地缓存中提供响应,而无需再次从原始服务器获取。这大大减少了网络延迟,提高了加载速度,并减轻了服务器的负载。HTTP…

WPF 图标原地旋转

如何使元素原地旋转 - WPF .NET Framework | Microsoft Learn <ButtonRenderTransformOrigin"0.5,0.5"HorizontalAlignment"Left">Hello,World<Button.RenderTransform><RotateTransform x:Name"MyAnimatedTransform" Angle"…

NO.91十六届蓝桥杯备战|图论基础-图的存储和遍历|邻接矩阵|vector|链式前向星(C++)

图的基本概念 图的定义 图G是由顶点集V和边集E组成&#xff0c;记为G (V, E)&#xff0c;其中V(G)表⽰图G中顶点的有限⾮空集&#xff1b;E(G)表⽰图G中顶点之间的关系&#xff08;边&#xff09;集合。若 V { v 1 , v 2 , … , v n } V \left\{ v_{1},v_{2},\dots,v_{n} …

【项目日记(一)】-仿mudou库one thread oneloop式并发服务器实现

1、模型框架 客户端处理思想&#xff1a;事件驱动模式 事件驱动处理模式&#xff1a;谁触发了我就去处理谁。 &#xff08; 如何知道触发了&#xff09;技术支撑点&#xff1a;I/O的多路复用 &#xff08;多路转接技术&#xff09; 1、单Reactor单线程&#xff1a;在单个线程…

Go语言实现OAuth 2.0认证服务器

文章目录 1. 项目概述1.1 OAuth2 流程 2. OAuth 2.0 Storage接口解析2.1 基础方法2.2 客户端管理相关方法2.3 授权码相关方法2.4 访问令牌相关方法2.5 刷新令牌相关方法 2.6 方法调用时序2.7 关键注意点3. MySQL存储实现原理3.1 数据库设计3.2 核心实现 4. OAuth 2.0授权码流程…