基于STM32的FreeRTOS移植
简介
通过STM32CubeMX建立MDK工程,手动进行FreeRTOS移植,以及任务创建。
开发平台
硬件平台:STM32F746 Discovery Kit
软件源码:FreeRTSO V9.0.0
开发环境:MDK V5.28
移植准备
- 源码获取
通过访问FreeRTOS官网可以直接下载源码,解压后文件夹的FreeRTOS目录包含了移植所需的文件和一些Demo。 - 工程准备
打开STM32CubeMX,选择芯片STM32F746NGHx创建工程,在System Core
栏目下的RCC
项配置LSE为Crystal/Ceramic Resonator
,HSE为BYPASS Clock Source
根据官方的原理图,选择控制LD1的闪烁作为一个任务,所以配置该引脚为输出模式
配置系统时钟
在工程管理导航栏设置工程名称、保存路径和IDE类别,然后点击右上角GENERATE CODE
按钮生成工程
源码移植
-
在工程根目录建立FreeRTOS文件夹,并建立Source、Include、Portable三个子目录,存放有关于FreeRTOS的源码
-
源码文件夹
FreeRTOS/Source
路径下的所有.c文件复制到刚才建立的Source文件夹
-
源码文件夹
FreeRTOS/Source/include
路径下的所有.h文件复制到刚才建立的Include文件夹
-
源码文件夹
FreeRTOS/Source/portable/MemMang
路径的所有.c文件和FreeRTOS/Source/portable/RVDS/ARM_CM7/r0p1
路径下的所有文件复制到刚才建立的Portable文件夹
-
源码文件夹
FreeRTOS/Demo/CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil
路径下的FreeRTOSConfig.h
文件复制到刚才建立的FreeRTOS目录下,该文件是对FreeRTOS内核功能的配置文件,需要好好了解每个宏定义配置的功能。
MDK配置及文件修改
-
使用MDK打开工程,把建立的FreeRTOS目录下文件添加到工程中,并且添加包含路径
-
修改
stm32f7xx_it.c
文件,屏蔽掉SVC_Handler
、PendSV_Handler
、SysTick_Handler
三个函数。工程中把HAL库与FreeRTOS共用Systic,所以在FreeRTOS的xPortSysTickHandler
函数中添加HAL_IncTick
函数的执行。
-
修改
FreeRTOSConfig.h
文件,否则暂时状态下编译会报错。把configUSE_IDLE_HOOK
、configUSE_TICK_HOOK
、configCHECK_FOR_STACK_OVERFLOW
、configUSE_MALLOC_FAILED_HOOK
这几个宏定义设为0;重定义configASSERT( x ),或者实现vAssertCalled函数。
创建任务
-
在main.c中包含有关于FreeRTOS的.h文件
-
创建任务句柄和入口函数
-
创建并启动调度器
总结
编译后下载程序,观察到板子上LD1开始闪烁,任务创建并成功运行。