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

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

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

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

      也可参考此文档   http://blog.chinaunix.net/uid-22072065-id-5196763.html
      

3.2 添加 FreeRTOSConfig.h
文件来源:CubMX软件生成的 FreeRTOSConfig.h,对应你自己的平台跟芯片型号。

注意: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.csdn.net/m0_38064214/article/details/84205237 

 http://blog.chinaunix.net/uid-22072065-id-5196763.html

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值