OpenMCU(一):STM32F407 FreeRTOS移植

news/2025/3/6 23:38:53/

概述

        本文主要描述了STM32F407移植FreeRTOS的简要步骤。移植描述过程中,忽略了Keil软件的部分使用技巧。默认读者熟练使用Keil软件。本文的描述是基于OpenMCU_FreeRTOS这个工程,该工程已经下载放好了移植stm32f407 FreeRTOS的所有文件

        OpenMCU_FreeRTOS工程的愿景主要有:

        1.、能移植支持主流mcu的freeRTOS;

        2、深入分析FreeRTOS代码和第三方库代码,让嵌入式学习变得非常容易;

        3、集成一些嵌入式产品中常用的第三方库文件,并且该工程会开发做一些产品原型,所有的技术方案,就像它的名字一样,全部开源。

移植步骤

1、keil创建stm32F407的工程

2、工程创建完毕后,在keil中建立分组管理,如下所示:

创建完成后的效果:

3、下载FreeRTOS代码

从 GitHub - FreeRTOS/FreeRTOS: 'Classic' FreeRTOS distribution. Started as Git clone of FreeRTOS SourceForge SVN repo. Submodules the kernel.下载最新的内核代码

4、解压下载的源码,并找到CORTEX_M4F_STM32F407ZG-SK的demo工程模板

5、在刚才新创建的keil STM32F407ZGT6工程目录下创建Appication文件夹,

6、将demo工程中的如下文件拷贝到Application文件夹下面.

拷贝后的效果:

7、Application分组添加c文件

8、CMSIS添加system_stm32f4xx.cC文件,文件存放的路径为:

9、添加STM32F4 BSP驱动文件,文件路径为:

10、添加启动文件startup_stm32f407xx.s

11、添加freeRTOS内核C文件,文件路径为:

12、添加内核移植中的与STM32F4相关的代码

代码路径在kernel/portable部分

13、所有分组添加完后如下图所示:

14、添加编译时的头文件路径

15、编译器选项设置

a. target选项

b. c/c++选项

加入STM32F407xx定义

17、修改stm32f4xx_it.c文件中的如下函数定义

__weak void SVC_Handler(void) 
{ vPortSVCHandler(); 
} __weak void PendSV_Handler(void) 
{xPortPendSVHandler();
}__weak void SysTick_Handler(void) 
{ if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) { xPortSysTickHandler(); } 
} 删除: __weak void EXTI9_5_IRQHandler(void)和 __weak void EXTI15_10_IRQHandler(void)

17、编译输出

工程连接

yanl1229/OpenMCU_FreeRTOS


http://www.ppmy.cn/news/1577208.html

相关文章

vue3中Element-plus table 反选 禁用实战

在 Vue 3 中使用 Element Plus 的 el-table 组件实现反选和禁用某些行的功能,可以通过以下步骤实现: 1. 安装 Element Plus 首先,确保你已经安装了 Element Plus: npm install element-plus2. 引入 Element Plus 组件 在你的 …

MySQL创建外键失败

问题描述 我有两张表,它们的结构分别是: contens表: content_version表: 其中,content_version表字段content_id想要创建content表的外键 但是: 明明两个字段的类型、长度、是否为空都设置的一模一样&am…

H20半精度推理报错:Floating point exception (core dumped)

Nvidia H20 显卡在执行bf16,f16推理时程序异常中断 时间是 2025年3月4日 课题组新到的8卡H20服务器在使用过程中,torch加载模型进行bf16的推理时,出现Floating point exception (core dumped)错误 当时一头雾水,后来苦苦寻找&…

DApp开发从入门到精通:以太坊/Solana公链生态实战解析

在区块链技术的推动下,去中心化应用(DApp)逐渐摆脱传统中心化后台的依赖,转向以智能合约为核心的全合约化开发模式。这种模式通过区块链网络的分布式特性,实现了数据存储、业务逻辑与用户交互的完全去中心化。 一、全合…

力扣-动态规划-516 最长回文子序列

思路 dp数组定义:[i, j]的字符串的最长回文子序列长度为dp[i][j]递推公式:相等时,子序列2 || ij时赋值1; 不相等时,两个去掉首、去掉尾取最长dp数组初始化:都为0遍历顺序:从下往上,…

【第16节】C++设计模式(行为模式)-Observer(观察者)模式

一、问题背景 观察者模式(Observer Pattern)是应用最广泛的设计模式之一,尤其是在实现 **Model/View/Controller (MVC)** 架构时,观察者模式起到了核心作用。MVC 架构通过将业务逻辑(Model)、用户界面&…

VBA信息获取与处理第五节:如何在单个工作表中查找某个给定值

《VBA信息获取与处理》教程(版权10178984)是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互…

第三节:基于Winform框架的串口助手小项目---串口操作《C#编程》

知识是无尽的宝藏,学习的过程虽有挑战,但每一次突破都是对自我的升华,向着更优秀的自己全力进发。 -----------WHAPPY 本节将重点介绍,如何修改控件的属性、SerialPort类的使用及实现串口初始化的操作 1.修改控件属性 修改属性…