STM32中的FreeRTOS-#1(入门)

写在前面:我一直觉得,如果我能把一点知识说给别人听,并且别人能听懂,大概率我自己真的学会了。记录的过程也是自己梳理的过程,本系列我把它称为“教程”,是想把它写得系统且有条理,本质上更多地是作为自己的学习心得和知识梳理。
本教程默认读者已有一定的STM32编程基础,并且已经熟悉CubeMX的使用,部分操作细节仅做文字提示或略过。


【欢迎关注我的个人公众号“早点儿毕业”,我会在公众号同步发布教程(笔记)内容】


本教程开发环境如下:

  • 软件:MDK Keil,CubeMX(V6.1.2),VSCode(仅作为代码编辑器)
  • 硬件:STM32F4VET6开发板(其他开发板也可以,原理相同)

RTOS(Real Time Operating System,实时操作系统),顾名思义,能够像操作系统(例如Windows)一样处理任务。操作系统的主要目的是“同时”处理多任务,这在传统的“main-while(1){…}”编程中是不能实现的。

本教程是一系列教程中的第一篇,主要包括以下内容:

(1)使用CubeMX配置Free RTOS;

(2)使用Free RTOS的优势;

(3)用“使用CubeMX”或“不使用CubeMX”两种方式,创建任务

(4)使用任务优先级解决一些常见问题。

现在开始配置CubeMX:

配置CubeMX

选择目标芯片型号后,CubeMX将为您打开默认页面。现在选择FREERTOS并按照下面的截图操作
在这里插入图片描述
这里我们选择CMSIS_V1,因为大多数的STM32芯片型号都支持这个版本。

接下来,转到任务和队列选项卡(tasks and queues),在这里您将看到软件已经自动创建了一个默认任务。双击默认任务,可以看到以下信息:
在这里插入图片描述
可以看到,一个任务包含很多设置项,但是不要被吓倒。这节教程,我们只关注TaskName(任务名称)、priority(优先级)和Entry Function(入口函数)。

现在,我们将在这里创建一个任务,下面是该任务的属性
在这里插入图片描述
任务名称默认即可,设置为普通优先级,入口函数也保持默认。一旦我们编写了程序,你就会对这些设置有更深刻的理解。

**注意:**一旦使用实时操作系统,我们不能使用systick作为HAL库代码的时间基(因为被操作系统占用了)。因此,转到SYS,并选择如下所示的TIM1作为时间基准
在这里插入图片描述
除此之外,我使用UART-1来传输数据,并将PA6和PA7作为推挽输出引脚(这两个引脚是教程演示开发板板载LED-0和LED-1所在引脚,请根据自己的开发板LED所在引脚设置)。代码生成后,打开main.c文件,现在是时候了解使用RTOS的重要性了。

使用RTOS的优势

一般学习单片机编程的第一个例子就是控制LED闪烁。现在假设有这样一个场景,LED-0闪烁周期是100ms,LED-1闪烁周期是300ms,这个编程可以在While循环里面做,并且比较容易,因为两个周期是整数倍关系。但是假如我们的需求更改为:LED-0闪烁周期是100ms,LED-1一般状态熄灭,当有按键按下时,LED1亮,延时5秒后LED1熄灭。在此期间,串口每隔1秒输出当前LED-1的亮/灭状态。这时候,情形就变得复杂起来。想完美完成需求,还是得花费点时间和精力安排代码。为了使CPU资源调度更简单,我们有必要学习使用实时操作系统。

在本节教程中,我们先不涉及上述“复杂”的需求。通过上面的步骤,我们已经创建了两个任务,下面我们以defaultTask为例,看一下CubeMX是如何定义一个任务的。

// 引用头文件
/* Includes ------------------------------------------------------------------*/
#include "FreeRTOS.h"
#include "task.h"
#include "main.h"
  • 16
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值