【FreeRTOS】FreeRTOS移植stm32详细步骤介绍

这篇具有很好参考价值的文章主要介绍了【FreeRTOS】FreeRTOS移植stm32详细步骤介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我在查找FreeRTOS移植的相关教程特别少,所以想非常详细的介绍FreeRTOS移植stm32详细步骤,包括源码的下载,源码介绍,系统移植,代码验证等,每一步都有对应的介绍和解释,希望可以帮助到你们。
【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划



前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能




1. FreeRTOS源码的下载

官网下载,仓库下载,镜像下载,百度网盘下载,私信我


1.1 可以直到FreeRTOS官网去下载,【FreeRTOS官网传送门】,但是下载速度很慢,不翻墙的话不建议使用这个方法下载。

1.1.1 官网页面如下,点击右上角或下方的下载入口

【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划


1.1.2 进入下载页面有两个下载选项,

  • 第一个选项是FreeRTOS 202212.01,下载的数据包包含最新 FreeRTOS 内核、 FreeRTOS-Plus 库 和 AWS IoT 库,以及示例项目
  • 第二个选项是FreeRTOS 202210.01 LTS,数据包包含 FreeRTOS LTS 库,其中包括 FreeRTOS 内核和 IoT 库,但没有示例项目

一般我们下载第一个就行

【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划


1.2 直接通过仓库下载,【仓库地址传送门】,同样很慢,甚至打不开网页,也不建议使用这种方法。


1.3 通过国内镜像下载,这种方式下载不受域名影响,是最直接的方式
【国内镜像传送门】,建议使用


1.3.1 打开链接页面

【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划


1.3.2 点击下载/克隆,下载成功

【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划


1.4 使用我上传到百度网盘的源码,是在官方网站直接下载的数据包,建议使用,起码比官网和仓库快

链接:【百度网盘传送门】
提取码:sqml


1.5 以上方式都不行的可以直接私信我

下载好的压缩包解压好的文件呀包含下面的内容:
【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划

压缩包88.3MB,解压文件夹506MB


2. FreeRTOS源码介绍

前面的文章已经很详细介绍过了,可以直达前面的文章去了解源码结构,可以更好的帮助你理解移植的原理和FreeRTOS的实现原理。

博客传送门:【FreeRTOS】详细目录结构和作用

基本上可以概括为下面一张图:
【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划


3. FreeRTOS系统移植

3.1 准备好FreeRTOS源码和一个配置好的STM32项目工程,我使用的是之前一个已经成功实现的LED闪烁的工程

【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划

【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划


3.2 在项目工程中创建一个FreeRTOS文件夹,里面存放所有的移植文件

【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划


3.3 在刚才创建的FreeRTOS文件夹中,分别新建src、inc、port文件夹:

  • src文件夹用来存放源码
  • inc文件夹用来存放头文件
  • port文件夹用来存放移植平台的相关文件

【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划


3.4 接下来我们将FreeRTOS源码的移植到我们新建的文件夹中

3.4.1首先我们打开源码中的Soure文件夹中的protable文件夹,找到MemMang文件夹,这个文件夹中都是内存管理文件,我们只用到heap_4.c文件,将其复制到port文件夹中

【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划


3.4.2 接着我们在刚才的portable文件夹中,找到RVDS文件夹,选择里面的ARM_M3中的port.c和portmacro.h两个文件,也复制到我们的工程文件port文件夹中

【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划


3.4.3 回到source文件夹中,将这个文件夹中的.c文件全部复制到工程新建的src文件夹中


【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划


3.4.4 在source文件夹中的include文件夹里全部都是FreeRTOS的头文件,将其添加到工程新建的inc文件夹中

【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划


3.4.5 添加一个配置文件,在FreeRTOS文件夹中的demo文件夹中找到CORTEX_STM32F103_Keil文件夹,复制里面的FreerRTOSConfig.h文件到新建的FreeRTOS文件夹中

【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划


3.5 接着我们添加文件路径,打开keil软件点击魔术棒,进入C/C++,在Include Paths中添加文件路径,将FreeRTO、src、inc、port的路径全部添加进来

【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划


3.6 新建组将文件全部添加到工程中,点击魔术棒旁边的三个格子的图标,选择新建组,我们分别新建FreeRTOS_src、FreeRTOS_inc、FreeRTOS_port三个组,将工程文件夹src中的所有.c文件添加到FreeRTOS_src中,将工程文件夹inc中的所有.h文件添加到FreeRTOS_inc中(不包括.readme),将工程文件夹port中的文件(heap_4.c、port.c添加到FreeRTOS_port中,还有配置文件FreeRTOSConfig.h添加到FreeRTOS_inc组中

【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划

【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划

【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划


3.7 完成中断函数的宏定义,在FreeRTOSConfig.h中,在条件编译中加入

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

【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划


3.8 注释掉STM库函数中的三个中断空函数

分别为:

void SVC_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);

【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划

至此,系统移植已经全部完成


4. 系统代码验证

4.1 首先在main文件中添加头文件FreeRTOS.h和task.h

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "FreeRTOS.H"
#include "task.h"

4.2 我们直接使用LED灯闪烁的代码进行验证,先创建一个任务函数

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

4.3 在主函数中创建一个任务并开启任务调度器

	xTaskCreate(task1,"task1",512,NULL,2,&task1Handler);
	vTaskStartScheduler();

4.4 当然要使用LED肯定要初始化串口,我们以GPIOC中的GPIO_Pin_13为例

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_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC, &GPIO_InitStructure);

4.5 main文件中的全部代码为

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "FreeRTOS.H"
#include "task.h"

TaskHandle_t task1Handler;

static void task1(void *arg)
{
	while(1)
	{
		GPIO_ResetBits(GPIOC, GPIO_Pin_13);
		vTaskDelay(500);
		GPIO_SetBits(GPIOC, GPIO_Pin_13);
		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_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC, &GPIO_InitStructure);
	
	xTaskCreate(task1,"task1",512,NULL,2,&task1Handler);
	vTaskStartScheduler();
	
}

FreeRTOS常用函数传送口:【FreeRTOS】常用函数总结


4.6 完成编译后可以烧录到开发板上进行验证


4.7 或者使用keil自带的调试器进行调试
4.7.1 首先在魔术棒中找到debug选项,选择use simulate,下面也要配置成相应的单片机型号

【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划


4.7.2 点击调试按钮,在上方添加逻辑分析仪

【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划


4.7.3 点击逻辑分析仪的setup,添加信号,我们使用的是stm32f103c8t6,所以信号为PORTC.13,不同的开发板可以查看配置的串口和单片机对应的寄存器,注意需要将信号类型选择为bit

【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划


4.7.4 全速运行可以得到串口准确的波形

【FreeRTOS】FreeRTOS移植stm32详细步骤介绍,从FreeRTOS到Linux,stm32,嵌入式硬件,单片机,原力计划

你也可以创建多个任务,查看波形分析任务的执行情况


项目工程完整代码传送口:
链接:FreeRTOS示例工程
提取码:k8uk文章来源地址https://www.toymoban.com/news/detail-713206.html

到了这里,关于【FreeRTOS】FreeRTOS移植stm32详细步骤介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于STM32的实时操作系统FreeRTOS移植教程(手动移植)_stm32移植freertos(1)

    直接意识代码: 这是我们大脑最希望的添加代码方式,很显然他是 错的 , 两个任务之间产生了相互的影响 ,使得两个任务都执行错误,这种思想在 裸机开发 中肯定是 错的 ,但是在我们的 RTOS 中他就可以是 对的 。 任务型代码: 这是 独立的两个任务内容 ,我们只需要把

    2024年04月10日
    浏览(88)
  • 【GD32/STM32】FreeRtos移植

    ​ (1)下载FreeRtos源码包 ​ FreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensions ​ (2)将源文件添加至工程 ​ (3)将GD32中的三个中断交由FreeRtos接管 ​ (4)配置管理FreeRTOS.h文件 ​ (5)FreeRtos基本使用方法 源码包结构 1.Demo中存放的

    2024年01月20日
    浏览(29)
  • 手动移植FreeRTOS到STM32

            前言:这只是一篇FreeRTOS入门的文章,用于自己忘记的时候回看复习。本文是采用CubeMX生成的STM32F407的基础工程后来进行移植的。 一、FreeRTOS简介 1.什么是实时操作系统         实时操作系统(Real-time operating system, RTOS),又称即时操作系统,它会按照排序运行、

    2024年02月21日
    浏览(26)
  • stm32移植freertos报错keil

    *** Using Compiler \\\'V5.06 update 7 (build 960)\\\', folder: \\\'d:Keil_v5ARMARMCCBin\\\' compiling main.c... .USERFreeRTOSConfig.h(79): error:  #130: expected a \\\"{\\\"       extern uint32_t SystemCoreClock; .FreeRTOSportableportmacro.h(210): warning:  #12-D: parsing restarts here after previous syntax error   { .FreeRTOSportableportmacro.h(215): error:

    2024年02月10日
    浏览(30)
  • KEIL环境stm32移植FreeRTOS

    准备工作:keil软件,一份点灯代码,FreeRTOS源码。 1.FreeRTOS源码下载 直接在官网下载    FreeRTOS - Free RTOS Source Code Downloads, the official FreeRTOS zip file release download 2.解压资源 打开FreeRTOS文件夹 会用到的是Demo文件夹和Source文件夹。 Demo文件夹里面就是 FreeRTOS的相关例程,里面有各

    2024年02月03日
    浏览(27)
  • STM32FreeRTOS操作系统移植

    移植好的FreeRTOS模板: 链接:https://pan.baidu.com/s/1_87VQAWXUl4jTqSCZ0MFjw?pwd=dw52  提取码:dw52 1.在工程中新建FreeRTOS文件夹 2.把源码source里面的文件全部粘贴进FreeRTOS文件夹中  3.在portable文件中只保留一下文件,其余删除  4.新建如下两个文件夹  5.在FreeRTOS_CODE目录下添加以下文件

    2024年02月08日
    浏览(32)
  • STM32移植FreeRTOS操作系统

    一、FreeRTOS源码下载 (1)移植钱得准备前菜对吧,我们先来去官网瞄一瞄 网址:FreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensions 第一步:点击下载FreeRTOS 第二步:选择版本下载(我选择稳定版本) 注:我们下载的稳定版本不包含DEMO例

    2024年01月17日
    浏览(28)
  • STM32 CubeMX LwIP + freertOS 移植

    开发板: 官方 STM32F746  MCU型号:STM32F746NGH 网卡型号:LAN8742A  原理图如下 先用裸机测试LAN8742A的网卡驱动 使用CubeMX创建工程 系统时钟和时基定时器如下 无系统LWIP协议栈设置,静态IP地址,关闭DHCP 生产代码,下载进开发板。开发板网口与电脑网口通过网线直连,设置电脑本

    2024年01月16日
    浏览(72)
  • STM32F407 移植 FreeRTOS

    本实验是基于正点原子 STM32F407ZG 探索者开发板完成的,所以需要一个STM32F407ZG 探索者开发板 用于移植的基础工程(下面会讲) FreeRTOS源码(下面会讲) 本实验所有用到的代码:基于正点原子STM32F407的FreeRTOS移植工程.zip 1.1 移植前准备 1.1.1 基础工程 由于后续需要用到 LED、

    2024年02月08日
    浏览(55)
  • 【学习日记】【FreeRTOS】FreeRTOS 移植到 STM32F103C8

    本文基于野火 FreeRTOS 教程,内容是关于 FreeRTOS 官方代码的移植的注意事项,并将野火例程中 STM32F103RC 代码移植到 STM32F103C8。 两个下载链接: 官 网 代码托管 Source:内核源码,我们需要的主要内容 根目录:这里的 C 文件都是由 C 语言编写的,所以在各种单片机上是通用的

    2024年02月11日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包