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

发布于:2025-08-29 ⋅ 阅读:(11) ⋅ 点赞:(0)
这篇文章是将 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 灯闪烁,蜂鸣器间断鸣叫,说明系统能正常运行。

网站公告

今日签到

点亮在社区的每一天
去签到