【STM32】将 FreeRTOS移植到STM32F103RCT6 详细流程

这篇文章是将 FreeRTOS移植到STM32F103RCT6 详细流程。
  1. 创建用于移植的根文件夹,如 FreeRTOS-F103。也可以命名为别的名称。
    在这里插入图片描述

  2. 进入 FreeRTOS-F103 文件夹,在其内创建以下几个子文件夹:appsdocdriversFreeRTOSlibsproject。用于存放项目文件。

在这里插入图片描述

  1. STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template 中复制以下四个文件到 apps 文件夹:main.cstm32f10x_conf.hstm32f10x_it.cstm32f10x_it.h

在这里插入图片描述

  1. doc 文件夹下创建新文件 readme.txt,用于项目说明。
    在这里插入图片描述

  2. drivers 文件夹下创建两个子文件夹 incsrc。用于存放项目的驱动头文件和源文件。
    在这里插入图片描述

  3. 复制 FreeRTOSv9.0.0\FreeRTOS\Source 下的全部文件和文件夹到 FreeRTOS 中。其中portable文件夹中只保留 keilMemMangRVDS 三个文件夹,其余都删除。

在这里插入图片描述
在这里插入图片描述

  1. 复制 STM32F10x_StdPeriph_Lib_V3.5.0\Libraries 下的全部两个文件夹到 libs 文件夹下。
    在这里插入图片描述

  2. 打开 Keil,新建新项目 demo,保存到 project 文件夹下。

在这里插入图片描述

  1. 选择设备为 STM32F103RC。
    在这里插入图片描述
    在这里插入图片描述

  2. 将默认目标 Target1 更改为 demo,并对 demo 目标进行分组,并为各组添加文件。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

添加 FreeRTOS-F103\FreeRTOS\portable\MemMang\heap_4.cFreeRTOS_PORT 组。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 添加全局宏:STM32F10X_HD,USE_STDPERIPH_DRIVER。添加头文件路径:
    ..\apps;..\drivers\inc;..\FreeRTOS\include;..\FreeRTOS\portable\RVDS\ARM_CM3;..\libs\CMSIS\CM3\CoreSupport;..\libs\CMSIS\CM3\DeviceSupport\ST\STM32F10x;..\libs\STM32F10x_StdPeriph_Driver\inc。

在这里插入图片描述

  1. 打开 main.c 文件,删除以下这些行:24行,27~ 37行,45~ 69行,73行,76~ 82行,100~ 159行,170~186行。这些行是项目模板中与验证板相关的代码,用不着,删除它们。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

删除后的样子:

在这里插入图片描述

  1. 编译。报错:
    ..\FreeRTOS\include\FreeRTOS.h(98): error: #5: cannot open source input file "FreeRTOSConfig.h": No such file or directory
    在这里插入图片描述
    这是缺少 FreeRTOSConfig.h 头文件。从 FreeRTOSv9.0.0\FreeRTOS\Demo\CORTEX_STM32F103_Keil 下复制 FreeRTOSConfig.h 头文件到 FreeRTOS-F103\FreeRTOS\include 下。

在这里插入图片描述
在这里插入图片描述

  1. 再次编译,通过。
    在这里插入图片描述

  2. 另外还得更改三个中断处理函数名称。port.c 中定义了三个中断处理函数,它们与默认的一一对应,为了在产生这三个中断时能执行 port.c 中定义的中断处理函数,需要对启动文件 startup_stm32f10x_hd.s 中的三个中断处理函数进行对应更改:

  • SVC_Handler 改为 vPortSVCHandler
  • PendSV_Handler 改为 xPortPendSVHandler
  • SysTick_Handler 改为 xPortSysTickHandler

在这里插入图片描述

  1. 再次编译,通过。至此,移植 FreeRTOS 到 STM32F103RC 完成
    在这里插入图片描述
  2. 测试移植的 FreeRTOS 系统。测试代码通过在启动任务中创建一个LED_R 灯闪烁任务,一个蜂鸣器间断鸣叫任务,来测试系统移植后能否正常工作。首先更改 main.c

在这里插入图片描述
在这里插入图片描述

  1. drivers/src 中添加 led.cbeep.c,在 drivers/inc 中添加 led.hbeep.h,在 apps 下添加 test_task.ctest_task.h。这些文件见附件。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  2. led.cbeep.c 添加到 drivers 组,将 test_task.c 添加到 apps 组。

在这里插入图片描述

  1. 编译,通过。烧录后能看到LED_R 灯闪烁,蜂鸣器间断鸣叫,说明系统能正常运行。

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

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

相关文章

京东招java开发

java开发(岗位信息经过jobleap.cn授权,可在CSDN发布)京东 四川职位描述1、负责企业金融资金、支付基础支撑相关系统建设; 2、负责重点项目、日常需求的承接,按期保质保量交付; 3、负责系统的日常维护及技术…

文本处理与模型对比:BERT, Prompt, Regex, TF-IDF

1. BERT (Bidirectional Encoder Representations from Transformers) BERT是一种基于Transformer架构的深度双向预训练语言模型。它通过在海量文本上进行预训练(如掩码语言模型任务),学习到丰富的语言表征,并可以通过微调&#x…

流量迷局 - 理解负载均衡(L4/L7)与CDN背后的“隐形路由

《网络迷踪:SRE的TCP/IP故障排查艺术》 系列第七篇:流量迷局 - 理解负载均衡(L4/L7)与CDN背后的“隐形路由” “案发现场”: 你在排查一个问题时,让用户提供他ping你服务域名的结果。 在北京的用户,ping app.mycompany.com,显示的IP地址是 111.222.1.100。 在广州的用户…

dagger.js 实现「CSS 机械键盘」示例解读(对比 React 版本)

0) 效果演示 (代码地址) CSS Mechanical Keyboard1) 示例与来源 dagger.js 版本:本笔围绕 CodePen 上的《CSS Mechanical Keyboard》的 dagger.js 改写版进行解读,核心思路是用 dagger 指令把纯 CSS 艺术包装成可复用的组件&…

如何检查 Linux 系统的内存使用情况

内存管理是保持 Linux 系统平稳运行的重要组成部分。无论您是系统管理员、开发者,学会检查 Linux 内存使用情况是确保系统稳定性和性能的关键步骤。本文将介绍在 Linux 环境下监控和检查内存使用的几种方法,包括命令行工具(如 top、vmstat、p…

我店生活平台是不是 “圈钱平台”?揭开消费补贴新模式的面纱

近年来,本地生活服务领域涌现出诸多创新模式,其中“WO店”生活平台凭借其独特的全民补贴机制引发行业关注。在“圈钱平台”质疑声此起彼伏的背景下,这一模式究竟是商业创新还是资本游戏?本文将从商业模式、风险控制、用户权益保障…

(LeetCode 每日一题) 1493. 删掉一个元素以后全为 1 的最长子数组 (双指针)

题目&#xff1a;1493. 删掉一个元素以后全为 1 的最长子数组 思路&#xff1a;双指针&#xff0c;时间复杂度0(n)。 C版本&#xff1a; class Solution { public:int longestSubarray(vector<int>& nums) {int ans0;int left0,cnt0;for(int i0;i<nums.size();i…

java去图片水印的方法

下面我将从简单到复杂&#xff0c;介绍几种常见的 Java 去水印方法、适用的场景以及需要注意的事项。核心思路去水印的本质是&#xff1a;​用合理的背景内容替换水印区域的像素。方法一&#xff1a;覆盖或裁剪&#xff08;适用于简单情况&#xff09;这种方法不算是真正的“去…

刷题日记0828

今天开启新篇章。面试经典150题。今日计划5道。3/588. 合并两个有序数组怎么样不用sort把 nums2里的放进 nums1呢&#xff1f;看题解。看了&#xff0c;还是新开了个数组。做的还是挺快的&#xff0c;记得有一次面试就是这个题&#xff0c;没想到居然是第一题 hhh。时间复杂度可…

网站开发用什么语言好

HTML、CSS 和 JavaScriptHTML 就像是网站的骨架&#xff0c;负责搭建网页的结构&#xff1b;CSS 则是给网站穿上漂亮的衣服&#xff0c;让它看起来赏心悦目&#xff1b;而 JavaScript 就如同赋予网站生命的灵魂&#xff0c;让网页能够与用户进行交互。据统计&#xff0c;全球超…

开源夜莺里如何引用标签和注解变量

今天遇到开源社区咨询&#xff1a;夜莺里如何引用标签和注解变量&#xff1f;这个问题如果通读文档&#xff0c;其实也能找到答案&#xff0c;不过相关知识是散落在各处的&#xff0c;这里就集中说一下&#xff0c;方便大家查阅。 哪里可以引用标签和注解变量 主要有两个地方…

大数据的五大特征(5V模型)深度解读

一、Volume&#xff08;体积&#xff09;&#xff1a;数据的“海洋” 定义&#xff1a;指数据的巨大体量。大数据的计量单位已经从传统的GB、TB级跃升至PB、EB甚至ZB级。 深度解读&#xff1a; “Volume”是大数据最显而易见的特征。我们正生活在一个数据爆炸的时代&#xff1a…

基于SpringBoot的宠物领养服务系统【2026最新】

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

AI 解决生活小事 2——用 AI 做一回新闻播客

哈喽&#xff0c;各位C站的朋友们&#xff0c;我是极客团长&#xff0c;一位专注用AI解决生活小事的科技玩家&#xff0c;上一期我们聊了聊怎么用AI给电脑做“深度体检”&#xff0c;把电脑里积攒多年的“垃圾”清理了个干净。 那篇反响还不错&#xff0c;看来大家跟我一样&am…

Vue3 图片加载失败回退为默认图:最简、健壮的两种实现(含完整代码)

先上结论&#xff1a;给 <img> 绑定 error&#xff0c;在回调里将 src 切到默认头像&#xff0c;并断开二次触发&#xff0c;配合 new URL(..., import.meta.url).href 解析静态资源路径&#xff0c;可靠、可维护。 场景与目标 登录用户有头像 URL&#xff0c;但可能 40…

VisionPro联合编程控件导入WinFrom以及VS卡死问题

在工业自动化领域&#xff0c;C#和VisionPro都是备受瞩目的工具。C#是一种功能强大的编程语言&#xff0c;广泛应用于Windows平台上的应用程序开发。而VisionPro则是一款视觉检测软件&#xff0c;广泛应用于自动化生产线上的产品质量检测。将C#与VisionPro结合使用&#xff0c;…

练习spring mvc

1. 项目结构总结 这个Spring MVC项目采用Maven管理&#xff0c;遵循标准的Web项目结构。以下是详细的文件级别结构&#xff1a; 核心目录结构 springmvc_helloword/ ├── .idea/ # IDEA项目配置目录 │ ├── artifacts/ # 项目打包配置…

postgreSql远程连接数据库总是超时断开?

问题&#xff1a;postgresql经常遇到连接中断的情况&#xff0c;程序几分钟就会断一次很难受。 pg的日志大量报错&#xff1a; 2025-08-27 11:05:43.967 CST [26462] LOG: could not receive data from client: Connection reset by peer 2025-08-27 11:05:43.967 CST [2625…

【Java基础】Java数据结构深度解析:Array、ArrayList与LinkedList的对比与实践

Java数据结构深度解析&#xff1a;Array、ArrayList与LinkedList的对比与实践 在Java编程中&#xff0c;数据存储与操作是最基础的能力要求。Array&#xff08;数组&#xff09;、ArrayList&#xff08;动态数组&#xff09;与LinkedList&#xff08;双向链表&#xff09;作为最…

Flask测试平台开发,登陆重构

概述我们在开篇的时候实现了简单的登陆功能&#xff0c;也实现了一个前后端联调的登陆功能&#xff0c;但是你有没有发现&#xff0c;那个登陆只是一个简单的登陆&#xff0c;且密码在接口返回的过程中是铭文密码&#xff0c;在生产环境中使用肯定是不行的&#xff0c;一般密码…