STM32CubeMX+FreeRTOS学习笔记(一)

2023-10-30

嵌入式实时操作系统FreeRTOS

基本概述

在嵌入式领域当中,实时操作系统的应用越来越广泛了,目前嵌入式操作系统种类很多,例如:μClinux、μC/OS-II、μC/OS-III、FreeRTOS、RT-Thread等等。这篇文章所记录的就是我在学习FreeRTOS的过程中所记录的心得体会。
FreeRTOS是RTOS系统的一种,FreeRTOS十分的小巧,可以在资源有限的微控制器中运 行,当然了,FreeRTOS 不仅局限于在微控制器中使用。但从文件数量上来看FreeRTOS要比μC/OS-II和 μC/OS-III 小的多。
作为一个轻量级的操作系统,FreeRTOS提供的功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能等,可基本满足较小系统的需要。FreeRTOS内核支持优先级调度算法,每个任务可根据重要程度的不同被赋予一定的优先级,CPU总是让处于就绪态的、优先级最高的任务先运行。FreeRTOS内核同时支持轮换调度算法,系统允许不同的任务使用相同的优先级,在没有更高优先级任务就绪的情况下,同一优先级的任务共享CPU的使用时间。

为什么学习FreeRTOS?

  1. FreeRTOS开源且免费,这是比较重要的一点,μC/OS是需要收费的,如果想把自己的作品变为产品的话,节约成本也是一件重要的事情,显而易见,FreeRTOS是一个不错的选择。当然也可以选择其他的免费嵌入式实时操作系统。
  2. 学习时可以参考的文档较为丰富,不过文档多为英文版且下载收费,但是可以在网页上免费观看和学习。顺便可以提高英语文献和文档的阅读能力。
  3. FreeRTOS文件数量少,且相对于μC/OS来说移植更加简单。
  4. 社会占有量很高,FreeRTOS可以很容易地移植到多个平台,例如:MSP430、STM32、PIC等等。许多软件厂商也使用FreeRTOS做本公司软件的操作系统,比如著名的 TouchGFX,其 所有的例程都是基于FreeRTOS操作系统的。ST 公司的所有要使用到 RTOS 系统的例程也均采 用了FreeRTOS。

FreeRTOS的特点

FreeRTOS是一个可裁剪的小型 RTOS 系统,其特点包括:

  • 其内核支持抢占式、合作式和时间片调度。
  • 提供了用于低功耗的Tickless模式。
  • 在创建任务、信号量、消息队列等系统组件时,内存分配方式可采用动态或静态分配。
  • FreeRTOS-MPU支持Cortex-M系列的内存保护单元(MPU)。
  • 强大的执行跟踪功能。
  • 堆栈溢出检测。
  • 没有限制的任务数量。
  • 没有限制的任务优先级。
  • 具有优先级继承特性的互斥信号量。
  • 任务与任务、任务与中断之间可以使用任务通知、消息队列、二值信号量、数值型信
    号量、递归互斥信号量和互斥信号量进行通信和同步。
  • 多个任务可以分配相同的优先权。

试着来创建一个基本的工程文件

选择自己所用的单片机型号,这里我使用的是STM32F103ZET6。
在这里插入图片描述
Timebase Source要选TIM1,因为FreeRTOS需要占用Systick来作为系统的时钟源。
在这里插入图片描述
选择板载的LED。
在这里插入图片描述
创建一个LED任务。
在这里插入图片描述
配置时钟
在这里插入图片描述
最后配置完成,点击GENERATE CODE直接生成工程文件。
在这里插入图片描述
我们打开工程,找到并打开freertos.c文件,找到void led_task(void const * argument)这个函数,如图所示。并在for(;;)中加入自己的代码来实现功能。
在这里插入图片描述

// 例如
void led_task(void const * argument)
{
  /* USER CODE BEGIN led_task */
  /* Infinite loop */
  for(;;)
  {
		HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
		vTaskDelay(500);
  }
  /* USER CODE END led_task */
}

编译完成后,把程序下载到板子上就可以看到LED灯闪烁的的效果了,闪烁的间隔是0.5s。

结尾

由于学习过程中的FreeRTOS工程文件是通过STM32CubeMX软件配置好后直接创建出来的,所以本学习笔记的内容不包括FreeRTOS的移植过程。如果想自己动手移植,请参考正点原子的FreeRTOS开发手册。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32CubeMX+FreeRTOS学习笔记(一) 的相关文章

  • 关于vue播放flv,m3u8视频流(监控)的方法

    前文 随着前端大屏页面的逐渐壮大 客户的需求也越来越多 大屏上面展示的事物也越来越丰 富 其中实时播放监控的需求逐步增加 视频流格式也是有很多种 用到最多的 flv m3u8 一 JessibucaPlayer插件用来播放flv流 1 首先

随机推荐

  • 有没有工业软件发展历史方面的书籍?讲公司、技术的发展历程?

    好像没有吧 况且工业软件的发展在智能制造的时代已经发生根本性的转变 传统的工业软件逐渐退出历史舞台 由新兴的工业软件所取代 即工业APPs 我们现在讲的工业软件通常意义就是说的工业APP 是工业互联网的重要组成部分 在实现人 机 物全面互联
  • 【CSS3高级应用】

    CSS3高级应用 一 页面中的多媒体嵌入 二 CSS3中过渡效果 transition 三 CSS3中变形效果 transform 四 CSS3的动画效果 animation 五 CSS3的滤镜效果 Filters 六 CSS3精灵技术 s
  • Field injection is not recommended 依赖注入方式

    参考文章 http vojtechruzicka com field dependency injection considered harmful 首先对于还不熟悉 Autowired的同学当然也包括我先去看看它到底有什么作用 自动装配
  • VLCDotNet在C#中的使用说明

    摸索了半天终于搞定了 记录一下 首先到开源网站下载压缩包 https github com ZeBobo5 Vlc DotNet releases 下载解压有四个类库工程和两个实例项目 Vlc DotNet Core Interops Vl
  • 66.加一[Leetcode 力扣 Java&C完整解答]

    为什么我要给出完整解答 因为要搜索个题目的解答 很多都偷懒只给个方法的实现 结果跑都跑不起来 于是我就决定 每一题 都给出Java C两种完整的解答 直接就可以运行 Debug Leetcode题目来源 66 加一 给定一个由整数组成的非空
  • idea中的项目没有蓝色小方块

    将idea右侧的加号 加上该项目的pom xml 刷新即可 浪费了哥十几分钟时间
  • 如何提交代码到github仓库(2022最新最详细)

    一 github注册及创建仓库 首先得先注册一个github账号 如何注册在这就不多陈述 如果注册过程中有任何疑问可以去网上查阅资料 也可以私聊我 2 注册好github账号后 来到如图画面 点击new建立一个github仓库 设置好后点击
  • 关于错误 The type or namespace name `Vuforia' could not be found. Are you missing an assembly reference?

    今天想用unity打包一个AR的demo到手机里试试截屏功能 在客户端运行都好好的 一打包就出现了标题里面的问题 不仅如此 还有一连带的 意思就是找不到你using的这些命名空间 我百度都找遍了 还是未果 我就开始在工程里寻找哪里有这些命名
  • 小程序顶部返回按钮

    一 小程序顶部返回按 直接只用uni navigateTo 相当于再压一次栈 同时在onBackPress中不能直接调用uni navigateBack 否则会无限循环 导致返回无法生效 onBackPress options if opt
  • Windows下批处理文件(.bat)的使用

    批处理 Batch 就是进行批量的处理 英文译文BATCH 批处理文件后缀BAT就取的前三个字母 通常被认为是一种简化的脚本语言 它应用于DOS和Windows系统中 批处理文件是扩展名为 bat或 cmd的文本文件 包含一条或多条命令 由
  • idea快捷键设置(Idea常用快捷键大全)

    目录 友情提醒 第一章 IDEA常用快捷键 1 1 快捷键 查找 提示类 1 2 快捷键 修改代码类 1 3 快捷键 光标移动类 第二章 Idea如何修改快捷键 2 1 已知快捷键 通过搜索快捷键查找 2 2 已知快捷键含义 通过输入快捷键
  • SpringBoot 如何实现多文件的上传和下载

    在前面的文章中 我们介绍了如何在Spring Boot中实现单个文件的上传和下载 但是 有时候我们需要实现多个文件的上传和批量下载 本文将介绍如何在Spring Boot中实现多文件上传和批量下载的功能 多文件上传 在Spring Boot
  • 通过transpose和flip实现图像旋转90/180/270度

    在fbc cv库中 提供了对图像进行任意角度旋转的函数rotate 其实内部也是调用了仿射变换函数warpAffine 如果图像仅是进行90度倍数的旋转 是没有必要用warpAffine函数的 这里通过transpose和flip函数实现对
  • 上网流量不够用,办无限流量卡吗?python程序员教你暴力破解wifi

    流量不够用怎么办 随着时代的发展 流量也是越来越不够用了 办无限网卡吗 月租太贵不划算 还是用Wi Fi舒服 不用担心流量用没了 今天用python教大家写一个暴力破解Wi Fi的程序 Wi Fi在手 天下我有 上网流量不够用 办无限流量卡
  • STM32中断优先级彻底讲解

    一 综述 STM32 目前支持的中断共为 84 个 16 个内核 68 个外部 16 级可编程中断优先级的设置 仅使用中断优先级设置 8bit 中的高 4 位 和16个抢占优先级 因为抢占优先级最多可以有四位数 二 优先级判断 STM32
  • STM32:寄存器概念

    目录 1 STM32长什么样 2 STM32内部有什么 2 1 STM32芯片架构简图 3 存储器映射 3 1 什么叫存储器映射 3 2 让GPIOB端口的16个引脚输出高电平 要怎么实现 4 什么是寄存器 4 1 总线基地址 4 2 寄存
  • 63万张!旷视发布最大物体检测数据集Objects365,物体检测竞赛登陆CVPR

    郭一璞 发自 北京会议中心 量子位 报道 公众号 QbitAI 比ImageNet大的图像数据集来了 在4月16日的智源学者计划启动暨联合实验室发布会上 旷视科技发布了通用物体检测数据集Objects365 包含63万张图像 远超Image
  • python 基础之注释变量常量

    一 注释 注释 就是对代码的解释 方便大家阅读代码 1 注释的分类 1 单行注释 在python中在行首添加一个 号就将这一行进行注释 单行注释 用 开头 后面跟上任意字符串 python2 版本print 这个函数 语法如下 print
  • java中File类

    转自http shameant iteye com blog 163007 Java文件操作我个人认为重要的问题有 a 如何跨平台问题 b 文件编码问题 尤其是多语言平台情况下如何正常工作 c 文件读写效率 操作效率 d 文件加密和文件安全
  • STM32CubeMX+FreeRTOS学习笔记(一)

    嵌入式实时操作系统FreeRTOS 基本概述 在嵌入式领域当中 实时操作系统的应用越来越广泛了 目前嵌入式操作系统种类很多 例如 Clinux C OS II C OS III FreeRTOS RT Thread等等 这篇文章所记录的就是