【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 灯闪烁,蜂鸣器间断鸣叫,说明系统能正常运行。
相关推荐
嵌入式阿蔡9 小时前
传感器_03:电机驱动——让 GPIO 当指挥官,别让 GPIO 当电源
网络·stm32·单片机·嵌入式硬件·嵌入式实时数据库
QXWZ_IA10 小时前
千寻位置支持哪些卫星系统?北斗GPS多星座解析
人工智能·科技·智能硬件·rtk
国科安芯12 小时前
ASL706S:让 MCU 不再“失忆跑飞“的守护芯片
分布式·单片机·嵌入式硬件·安全·fpga开发·架构
树的枝14 小时前
【STM32】03.中断和EXTI外设
笔记·stm32·单片机·嵌入式硬件
单片机杂货铺16 小时前
【单片机毕业设计选题】基于stm32单片机儿童公路车速度检测报警
stm32·单片机·嵌入式硬件·51单片机·硬件工程·课程设计
振南的单片机世界17 小时前
看门狗硬核拆解:1.6秒不喂狗,硬件强制“掀桌子”
arm开发·stm32·单片机·嵌入式硬件
嵌入式阿蔡17 小时前
Linux_01:交叉编译与开发环境实战——从单片机跨到 Linux 的第一道坎
linux·运维·网络·单片机·嵌入式硬件·嵌入式实时数据库
NYFEA18 小时前
徕飞 FCA系列全面上新,一站式I/O扩展国产替代方案
单片机·嵌入式硬件
国科安芯19 小时前
ASL622S:把“信号失真“挡在门外的航天级运放
网络·单片机·嵌入式硬件·架构·状态模式·低轨卫星星座
XiHongShi201619 小时前
STM32H7 FLASH和SRAM标准例程
stm32·单片机·嵌入式硬件