基于STM32的FreeRTOS移植

简介

通过STM32CubeMX建立MDK工程,手动进行FreeRTOS移植,以及任务创建。

开发平台

硬件平台:STM32F746 Discovery Kit
软件源码:FreeRTSO V9.0.0
开发环境:MDK V5.28

移植准备

  1. 源码获取
    通过访问FreeRTOS官网可以直接下载源码,解压后文件夹的FreeRTOS目录包含了移植所需的文件和一些Demo。
  2. 工程准备
    打开STM32CubeMX,选择芯片STM32F746NGHx创建工程,在System Core栏目下的RCC项配置LSE为Crystal/Ceramic Resonator,HSE为BYPASS Clock Source

    根据官方的原理图,选择控制LD1的闪烁作为一个任务,所以配置该引脚为输出模式

    配置系统时钟

    在工程管理导航栏设置工程名称、保存路径和IDE类别,然后点击右上角GENERATE CODE按钮生成工程

源码移植

  1. 在工程根目录建立FreeRTOS文件夹,并建立Source、Include、Portable三个子目录,存放有关于FreeRTOS的源码

  2. 源码文件夹FreeRTOS/Source路径下的所有.c文件复制到刚才建立的Source文件夹

  3. 源码文件夹FreeRTOS/Source/include路径下的所有.h文件复制到刚才建立的Include文件夹

  4. 源码文件夹FreeRTOS/Source/portable/MemMang路径的所有.c文件和FreeRTOS/Source/portable/RVDS/ARM_CM7/r0p1路径下的所有文件复制到刚才建立的Portable文件夹

  5. 源码文件夹FreeRTOS/Demo/CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil路径下的FreeRTOSConfig.h文件复制到刚才建立的FreeRTOS目录下,该文件是对FreeRTOS内核功能的配置文件,需要好好了解每个宏定义配置的功能。

MDK配置及文件修改

  1. 使用MDK打开工程,把建立的FreeRTOS目录下文件添加到工程中,并且添加包含路径

  2. 修改stm32f7xx_it.c文件,屏蔽掉SVC_HandlerPendSV_HandlerSysTick_Handler三个函数。工程中把HAL库与FreeRTOS共用Systic,所以在FreeRTOS的xPortSysTickHandler函数中添加HAL_IncTick函数的执行。

  3. 修改FreeRTOSConfig.h文件,否则暂时状态下编译会报错。把configUSE_IDLE_HOOKconfigUSE_TICK_HOOKconfigCHECK_FOR_STACK_OVERFLOWconfigUSE_MALLOC_FAILED_HOOK这几个宏定义设为0;重定义configASSERT( x ),或者实现vAssertCalled函数。

创建任务

  1. 在main.c中包含有关于FreeRTOS的.h文件

  2. 创建任务句柄和入口函数

  3. 创建并启动调度器

总结

编译后下载程序,观察到板子上LD1开始闪烁,任务创建并成功运行。

posted @ 2020-03-15 16:19  怦然心动如往昔  阅读(2065)  评论(0编辑  收藏  举报