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

2024-05-27 11:08

本文主要是介绍轻松几步实现在STM32上运行FreeRTOS任务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

之前文章做过一次调查,尽然有大部分人都没有接触过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

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

3STM32CubeMX创建工程

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

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

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

2.选中MCU

3.LED引脚配置

4.UART输出配置

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

5.使能FreeRTOS

6.配置FreeRTOS任务

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

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

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

7.配置时钟

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

8.工程管理配置

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

9.生成并打开工程

4源码分析

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

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

4.2 说明

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

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

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

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

4.3 编译下载运行

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

这篇关于轻松几步实现在STM32上运行FreeRTOS任务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配

通过React实现页面的无限滚动效果

《通过React实现页面的无限滚动效果》今天我们来聊聊无限滚动这个现代Web开发中不可或缺的技术,无论你是刷微博、逛知乎还是看脚本,无限滚动都已经渗透到我们日常的浏览体验中,那么,如何优雅地实现它呢?... 目录1. 早期的解决方案2. 交叉观察者:IntersectionObserver2.1 Inter

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S