轻松几步实现在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

相关文章

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P