0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何轻松几步实现在STM32上运行FreeRTOS任务

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 作者:黄工的嵌入式技术 2020-03-01 12:07 次阅读

之前文章做过一次调查,尽然有大部分人都没有接触过RTOS,希望本文能带领那部分朋友入门。

1写在前面

以前想要在STM32上跑FreeRTOS操作系统,还需要自己一步一步的移植FreeRTOS代码。

现在使用STM32CubeMX工具,就不需要这么繁杂的移植工作,只需轻松几步就能让FreeRTOS跑起来。

本文以STM32L412(NUCLEO-L412KB板卡)为例,其它STM32型号类似。

同时,使用目前(2019.06)最新的MDK和STM32CubeMX工具。因此,需要提前下载安装工具和软件包。

2准备工作

主要有三类:

MDK-ARM (含软件包)

STM32CubeMX (含软件包)

FreeRTOS源码(可选)

2.1 MDK-ARM(含软件包)

这里需要下载安装MDK-ARM,以及STM32对应的软件包。

官方安装包地址:

http://www.keil.com/download/product

官方软件包地址:

http://www.keil.com/dd2/Pack

具体安装,使用方法可以参看我之前整理的专栏文章:【专栏】Keil系列教程

2.2 STM32CubeMX (含软件包)

这里也是一样,需要下载安装STM32CubeMX,以及STM32对应的软件包。

官方下载地址:

www.st.com/stm32cubemx

具体安装,使用方法可以参看我之前整理的专栏文章:【专栏】STM32CubeMX系列教程

提示:软件包里包含FreeRTOS源码,但不是最新的。

2.3 FreeRTOS源码

上面STM32Cube软件包其实包含了FreeRTOS源码,但不是最新版本。

FreeRTOS官网:

www.freertos.org

如果想使用最新版本,或指定某一版本,可以到下面地址下载:

https://sourceforge.net/projects/freertos/files/FreeRTOS

o4YBAF4WizyAHJBXAACx9_lk5dk454.jpg

上面地址包含FreeRTOS历史版本,如果使用指定版本,将源码替换即可(一本来说都兼容)。

3STM32CubeMX创建工程

有了STM32CubeMX这个工具,开发STM32变得更加快捷。

本文以STM32L412KB为例,其它STM32型号原理类似。

1.打开软件,进入选择器

2.选中MCU

3.LED引脚配置

4.UART输出配置

这里配置成异步模式之后,引脚自动配置(我的开发板RX引脚不是默认,则需要自己配置)。

5.使能FreeRTOS

pIYBAF4Wi0CACBrxAAE_dtnw9x8184.jpg

6.配置FreeRTOS任务

这里创建两个FreeRTOS任务:Task1和Task2。

o4YBAF4Wi0CAByImAAFn0mGRRPo972.jpg

提示:针对初学者,使用STM32CubeMX配置FreeRTOS时,大部分参数默认即可。

当你熟悉之后,可以进一步掌握每项参数。

7.配置时钟

这里选择MSI作为时钟源,进行倍频,是系统时钟达到80M。

pIYBAF4Wi0GAQ9DjAAE2y1l0PVs936.jpg

8.工程管理配置

这里参数是常规配置,可参看我教程:【专栏】STM32CubeMX系列教程

o4YBAF4Wi0GAfq06AAEIr5-HsRU587.jpg

9.生成并打开工程

o4YBAF4Wi0KAH_MXAAEb0eCZLzY861.jpg

4源码分析

4.1 在两个任务中添加应用程序

提示:这里使用了huart2,所以需要包含:#include "usart.h"

pIYBAF4Wi0KAI9cKAAF3qaT5IBQ430.jpg

4.2 说明

任务Task1:间隔500ms闪烁(变化)一次LED(PB3)。

任务Task2:间隔1000ms,串口UART2发送一次数据“Demo...”

osDelay函数代表系统延时,单位ms.

然后,就是LED闪烁,和UART发送函数。

4.3 编译下载运行

上面步骤完成之后,就可以编译,然后直接下载运行了,通过串口调试助手可以看见输出字符“Demo...”。

5工程及源码下载

为方便初学者,这里提供对应工程和源码,方便大家学习。

百度网盘:

https://pan.baidu.com/s/1IdsuIlqqFhuJYxMI6EC7dQ

提取码:7k5i

提示:公号不支持外部链接,请复制链接到浏览器打开。

链接后期可能会失效,关注公众号『strongerHuang』及时获取动态。


推荐阅读:

1.工信部宣布5G商用牌照即将发放!

2.IC封装原理及功能特性汇总

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2240

    文章

    10675

    浏览量

    348872
  • FreeRTOS
    +关注

    关注

    12

    文章

    473

    浏览量

    61359
收藏 人收藏

    评论

    相关推荐

    STM32F103VE运行STM32CubeMX生成的freertos工程,FreeRTOS堆栈设置导致任务不执行切换怎么解决?

    我使用的STM32F103VE运行STM32CubeMX生成的freertos工程。 一共有两个任务,TSAK1和TASK2都是翻转LED
    发表于 04-26 07:51

    为什么CubeMX设计的FreeRTOS工程只能正常运行3个任务

    用CubeMX4.20设计的FreeRTOS工程有六个任务,出一个任务优先级较低外,另外几个都是较高优先级。发现只有3个任务是正常运行的,还
    发表于 04-19 08:23

    STM32CubeIDE+FreeRtos+LWIP初始化不通过怎么解决?

    现在调试STMF407,用的环境是STM32CubeIDE。在一开始调试的时候,使能FreeRTOS和LWIP。结果就是LWIP会自动创建一个任务。一开始在配置界面,把这些内容全选上,
    发表于 04-15 07:42

    STM32L476+ST253993增加freertos,但是代码下进去系统运行时就卡住,为什么?

    我准备在官方的STM32L476+ST253993增加freertos,但是代码下进去系统运行时就卡住,单步调试,系统一直卡在prvCheckTasksWaitingTermination中
    发表于 04-15 07:27

    FreeRTOS中的任务管理

    任务FreeRTOS 中最基本的调度单元,它是一段可执行的代码,可以独立运行FreeRTOS 中的任务是基于优先级的抢占式调度,优先级
    的头像 发表于 11-27 17:03 407次阅读

    基于FreeRTOSSTM32F103系统—队列

    FreeRTOS中,队列是实现任务之间同步、互斥和通信的一种重要方法(其他的实现方法有:任务通知、事件组、信号量、互斥量)。
    的头像 发表于 11-10 11:37 689次阅读
    基于<b class='flag-5'>FreeRTOS</b>的<b class='flag-5'>STM32</b>F103系统—队列

    基于STM32F407的FreeRTOS学习笔记(5)

    在数据结构中有一种很重要的数据结构叫做队列,其特点是数据先进先出。在FreeRTOS中也有一类队列,我们利用这类队列在FreeRTOS实现任务任务间的消息传递,所以也可以称之为消息
    的头像 发表于 11-07 11:43 383次阅读
    基于<b class='flag-5'>STM32</b>F407的<b class='flag-5'>FreeRTOS</b>学习笔记(5)

    freertos中是如何实现两个任务的数据交换的?

    freertos中是如何实现两个任务的数据交换的
    发表于 10-20 06:17

    FreeRTOS任务实现和控制块

    任务实现 FreeRTOS 官方给出的任务函数模板如下: void vATaskFunction (void *pvParameters){ for ( ; ; ) { -- 任务应用
    的头像 发表于 09-28 11:28 309次阅读

    FreeRTOS任务状态与任务优先级

    任务状态 FreeRTOS 中的任务永远处于下面几个状态中的某一个: ● 运行态 当一个任务正在运行时,那么就说这个
    的头像 发表于 09-28 11:10 603次阅读
    <b class='flag-5'>FreeRTOS</b>中<b class='flag-5'>任务</b>状态与<b class='flag-5'>任务</b>优先级

    FreeRTOS任务与协程介绍

    FreeRTOS 中应用既可以使用任务,也可以使用协程(Co-Routine),或者两者混合使用。但是任务和协程使用不同的API函数,因此不能通过队列(或信号量)将数据从任务发送给协程
    的头像 发表于 09-28 11:02 565次阅读

    FreeRTOS任务通知简介

    任务通知简介 任务通知在 FreeRTOS 中是一个可选的功能,要使用任务通知的话就需要将宏configUSE_TASK_NOTIFICATIONS 定义为 1。
    的头像 发表于 07-30 11:34 497次阅读

    FreeRTOS中的空闲任务是什么

    空闲任务FreeRTOS 必不可少的一个任务,其他 RTOS 类系统也有空闲任务,比如 uC/OS。看名字就知道,空闲任务是处理器空闲的
    的头像 发表于 07-30 10:55 783次阅读

    基于STM32FreeRTOS开发(1)----FreeRTOS简介

    FreeRTOS 是一个免费和开源的实时操作系统,它主要用于嵌入式系统。它非常轻量级,可以在很小的硬件资源上运行,因此非常适合在限制硬件资源的嵌入式系统中使用。 FreeRTOS提供了一组简单的
    的头像 发表于 07-27 09:49 893次阅读
    基于<b class='flag-5'>STM32</b>的<b class='flag-5'>FreeRTOS</b>开发(1)----<b class='flag-5'>FreeRTOS</b>简介

    RA FreeRTOS任务创建

    随着嵌入式应用程序变得越来越复杂,单片机裸机开发已经无法满足工程师对于复杂程序的需求。于是具有多任务调度和实时响应特性的RTOS便越来越受工程师们青睐。瑞萨RA系列MCU兼容FreeRTOS系统
    的头像 发表于 07-12 10:00 212次阅读
    RA <b class='flag-5'>FreeRTOS</b><b class='flag-5'>任务</b>创建