基于STM32 HAL库 的FreeRTOS移植步骤(结合Stm32CubMX)

结合Stm32 CubMX软件生成的带FreeRTOS的工程,移植到自己的项目中来。

一、硬件准备 STM32L15系列 一个ST-Link下载器及其连接线等。 二、软件准备 FreeRTOS源码; 一个基于STM32 HAL库的基础例程(跑马灯例程)。

HAL库的移植可以自行百度。 三、移植FreeRTOS 3.1 添加FreeRTOS源码至工程 添加源代码至工程目录,添加至工程分组中,添加相关头文件路径,参考CubMX软件生成的FreeRTOS文件夹。

也可参考此文档

注意:FreeRTOSConfig.h中这两行很重要

编译结果为:2个error。SVC_Handler() 和 PendSV_Handler() 这两个函数在 stm32f4xx_it.c 文件和 port.c 文件中重复定义了

3.3 删除2个中断服务函数 将 stm32f4xx_it.c 文件和 stm32f4xx_it.h 文件中关于 SVC_Handler() 和 PendSV_Handler() 这两个函数的定义和声明都删掉,重新编译。 编译结果为:0 error, 0 warning。

3.4 重写1个中断服务函数 在 stm32f4xx_it.c 文件合适的位置添加如下两段代码:

#include "FreeRTOS.h" #include "task.h"

extern void xPortSysTickHandler(void); 分别意为增加一个函数声明,以及包含支持该函数的两个头文件。 然后将 SysTick_Handler() 函数重写为如下:

void SysTick_Handler(void) { //HAL_IncTick(); if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED) { xPortSysTickHandler(); } HAL_IncTick(); HAL_SYSTICK_IRQHandler(); } 参考的是自动生成工程下的 stm32l1xx_it.c 和 cmsis_os.c 文件中的代码

所做更改为:在 SysTick_Handler() 函数中增加 FreeRTOS 的滴答处理函数。

3.5修改main.c 文件

四,参考/感谢

https://blog..net/m0_38064214/article/details/84205237

经验分享 程序员 微信小程序 职场和发展