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

2024-06-21 13:18

本文主要是介绍基于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

这篇关于基于STM32 HAL库 的FreeRTOS移植步骤(结合Stm32CubMX)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1081326

相关文章

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口

Toolbar+DrawerLayout使用详情结合网络各大神

最近也想搞下toolbar+drawerlayout的使用。结合网络上各大神的杰作,我把大部分的内容效果都完成了遍。现在记录下各个功能效果的实现以及一些细节注意点。 这图弹出两个菜单内容都是仿QQ界面的选项。左边一个是drawerlayout的弹窗。右边是toolbar的popup弹窗。 开始实现步骤详情: 1.创建toolbar布局跟drawerlayout布局 <?xml vers

移动硬盘盒:便携与交互的完美结合 PD 充电IC

在数字化时代的浪潮中,数据已成为我们生活中不可或缺的一部分。随着数据的不断增长,人们对于数据存储的需求也在不断增加。传统的存储设备如U盘、光盘等,虽然具有一定的便携性,但在容量和稳定性方面往往难以满足现代人的需求。而移动硬盘,以其大容量、高稳定性和可移动性,成为了数据存储的优选方案。然而,单纯的移动硬盘在携带和使用上仍存在诸多不便,于是,移动硬盘盒应运而生,以其独特的便携性和交互性,成为了数据存储

Tkinter和selenium结合实现登录UC后台,最后打包成exe

主要实现的功能:小号模式自动登录UC阿里汇川广告后台,屏蔽账号密码输入 主要用的技术:用Tkinter展示所有的广告账号界面,使用selenium控制谷歌浏览器,打开阿里汇川登录页,登录汇川后台。 第一次写,遇到的坑比较多,三天,搞定。给自己一个棒棒~☺️ import Tkinter as tk import osimport sysimport requestsfrom sel

STM32单片机PWR电源控制详解

文章目录 1. PWR概述 2. 电源结构框图 3. 上电复位和掉电复位 4. 可编程电压监测器 5. 低功耗模式 6. 模式选择 6.1 睡眠模式 6.2 停止模式 6.3 待机模式 7. 代码示例 1. PWR概述 PWR(Power Control)电源控制,负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能。 可编程电压监测器

spring mvc完整项目创建步骤记录

快速创建一个spring mvc项目(只有页面调用→到controller→到页面) 1、首先创建Dynamic Web Project 2、创建jsp页面index.jsp以及成功(/WEB-INF/view/success.jsp)和失败页面(/WEB-INF/view/error.jsp) index.jsp <%@ page language="java" contentType=

移植对话框MFC

VC版 MFC程序对话框资源移植 以下均拷贝自上面,仅用来记录 (部分有删除) 法1: Eg:将B工程调试好的对话框移植到A工程中 1.资源移植         1.1  在2017打开B工程,在工作区Resource标签页中选中Dialog文件夹下的资源文件,按Ctrl+C或点击Edit->Copy.         1.2. 关闭当前工程,注意不要关闭VC6,打开B工程(File

红队内网攻防渗透:内网渗透之内网对抗:横向移动篇Kerberos委派安全RBCD资源Operators组成员HTLMRelay结合

基于资源的约束委派(RBCD)是在Windows Server 2012中新加入的功能,与传统的约束委派相比,它不再需要域管理员权限去设置相关属性。RBCD把设置委派的权限赋予了机器自身,既机器自己可以决定谁可以被委派来控制我。也就是说机器自身可以直接在自己账户上配置msDS-AllowedToActOnBehalfOfOtherIdentity属性来设置RBCD。 所以核心就是谁或什么权限能修改

STM32学习之一:什么是STM32

目录 1.什么是STM32 2.STM32命名规则 3.STM32外设资源 4. STM32的系统架构 5. 从0到1搭建一个STM32工程 学习stm32已经很久了,因为种种原因,也有很久一段时间没接触过stm32了。等我捡起来的时候,发现很多都已经忘记了,重新捡起来吧。 每次谈到stm32如何如何,那么该如何解释什么是stm32呢? 1.什么是STM32 stm32

STM32学习 修改系统主频

前面时钟树的学习说明单片机的主频是可以修改的,那么怎么更改系统的主频,这里做一个简单的介绍。首先要明白,单片机的程序是如何运行,这里简单说明一下。 对应的代码在startup_stm32....文件里面,这里是复位程序的汇编代码。 复位子程序是系统上电后第一个执行的程序,调用 SystemInit 函数初始化系统时钟,然后调用 C 库函数 _mian,最终调用 main 函数去到 C