当前位置: 首页 > news >正文

【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.dtcms.com/a/353486.html

相关文章:

  • 【开发配置】GitLab CR(Code Review)规则配置清单
  • 论文翻译:BRILLM: BRAIN-INSPIRED LARGE LANGUAGE MODEL
  • 在Excel和WPS表格中通过查找替换对单元格批量强制换行
  • 【C++】map 容器的使用
  • 论文阅读:Gorilla: Large Language Model Connected with Massive APIs
  • Python基础:PyMySQL
  • 音视频开发学习路线梳理(附 GitHub 仓库)
  • 达梦数据库-控制文件 (二)
  • FPGA开发流程
  • 一键搭建开发环境:制作bash shell脚本
  • Apple Silicon Mac 上解决 Docker 平台不匹配和 QEMU 段错误问题
  • 腾讯云服务器重启卡住:原因分析与底层原理详解
  • AI-调查研究-62-机器人 机械臂五大应用场景详解:从焊接到手术,从农田到太空
  • Knife4j 文档展示异常的小坑
  • GBDT(Gradient Boosting Decision Tree,梯度提升决策树)总结梳理
  • 如何设置 Lustre 文件系统并在其上运行 PostgreSQL
  • 设计模式9-责任链模式
  • UDC否定响应码学习
  • 未成功:使用 Nginx 搭建代理服务器(正向代理 HTTPS 网站)
  • 《StarRocks、Doris、ClickHouse 深度对比:三大 OLAP 引擎的优劣与应用场景》
  • go的实现arp客户端
  • 《方法论》--笛卡尔
  • 【学习笔记】非异步安全函数(禁止在信号处理中调用)
  • 雷卯针对香橙派Orange Pi 4开发板防雷防静电方案
  • 【Golang】 项目启动方法
  • Android12 user版本默认开启adb调试
  • centos7安装java mysql redis nginx
  • docker 所有常用命令,配上思维导图,加图表显示
  • 713 乘积小于k的子数组
  • Mysql数据挂载