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

发布者:SereneWanderer最新更新时间:2023-10-14 来源: elecfans关键字: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

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

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

关键字:STM32  运行  FreeRTOS任务 引用地址:如何轻松几步实现在STM32上运行FreeRTOS任务

上一篇:担心STM32时钟PLL各参数配错吗?
下一篇:STM32F1_ FSMC读写外部SRAM

推荐阅读最新更新时间:2024-11-24 15:26

第四节:定时器中断及定时器产生PWM(用CubeMX学习STM32)
前言: STM32定时器概述 我演示用的STM32F407ZGt6的核心板有多达14个定时器;  其中包含两个高级定时器(TIM1和TIM8); 十个通用定时器(TIM2~TIM5, TIM9~TIM14); 两个基础定时器(TIM6、TIM7)。 Tips: 在十个通用定时器里面包含两个看门狗定时器(two watchdog timers) 下面是datasheet里面官方给出的介绍 Couter resolution— 计数器位数, 位数越高精度越高; Counter type — 计数类型 即向上计数还是向下计数 Prescaler factor — 分频因子, 对时钟的分频, 比如单片机的时钟为84MHz, 预
[单片机]
第四节:定时器中断及定时器产生PWM(用CubeMX学习<font color='red'>STM32</font>)
STM32初学笔记---延时函数及u16、u32、u8
在编写流水灯程序时发现,和对之前用的51单片机所用的普通软件延时函数有所不同,51的普通软件延时函数我们一般是这样编写的: #include reg52.h #include intrins.h #define uint unsigned int #define uchar unsigned char void delayms(uint xms) { uint i,j; for(i=xms;i 0;i--) for(j=110;j 0;j--); } 然而我们在对STM32利用库函数进行编程时采用此延时函数则完全行不通,而是采用下面的延时函数 #include stm32f10x.h void delay(u16 x)
[单片机]
STM32开发笔记6: Nucleo-64开发板简介
单片机型号:Nucleo-64开发板 本文介绍Nucleo-64开发板。 1、特性 a、板载STM32 QFP64封装微处理器 b、2种类型的扩展资源:Arduino Uno V3 connectivity和ST morpho extension pin headers for full access to all STM32 I/Os c、ARM mbed支持 d、板载 ST-LINK/V2-1 e、USB、VBUS或扩展电源供电 f、3个LED:USB通讯、用户LED和电源LED g、2个按键:用户按键和复位键 h、USB可重新枚举,提供3个不同的
[单片机]
<font color='red'>STM32</font>开发笔记6: Nucleo-64开发板简介
STM32 IO口模拟串口通讯
前阵子,调项目时需要用到低波特率串口通讯(300的波特率),才发下发现在正常情况下(PCLK1时钟频率为72M,PCLK2时钟频率为36M):STM32的USART0的最低波特率只能设置到1200,;而USART1最低波特率只能设置到600。怎么设置STM32的600或以下的波特率呢?有两种方法:一种是改变外设时钟频率,而另一种方法就是使用IO口模拟串口通讯。今天就来讲讲,用IO口模拟串口通信! 1、串口传输协议 首先,必须要知道串口通讯时数据是怎样传输的?这里以异步传输字符为例子,如下图所示: 一般字符传输都采用:1位起始位,8位数据位,1位停止位,没有校验位 的形式传输,其他形式的这里不讲。串口异步传输在空闲状态时都必须是
[单片机]
<font color='red'>STM32</font> IO口模拟串口通讯
STM32 外部 SRAM
STM32F103ZET6 自带了 64K 字节的 SRAM,对一般应用来说,已经足够了,不过在一些对内存要求高的场合,STM32 自带的这些内存就不够用了。比如跑算法或者跑 GUI 等,就可能不太够用 IS62WV51216 简介 IS62WV51216 是 ISSI(Integrated Silicon Solution, Inc)公司生产的一颗 16 位宽 512K(512*16,即 1M 字节)容量的 CMOS 静态内存芯片。该芯片具有如下几个特点: l 高速。具有 45ns/55ns 访问速度。 l 低功耗。 l TTL 电平兼容。 l 全静态操作。不需要刷新和时钟电路。 l 三态输出。 l 字节控制功能。支
[单片机]
STM32固件库的小结
储存器地址 由51引入   实际上,单片机对任何端口的控制都是通过操作内存实现的,说出这句话很抽象,我们可以以从51单片机类比来说明这是什么意思。 如下的电路图: 如果我们想点亮LED_G,在51中我们可能会如此编程 #include reg51.h #define PB = 0xfe 或者 #include reg51.h sbit LED_G = PB^5; void main() { LED_G = 0; } 其中第一种叫宏定义,第二种叫位定义。那么为什么我们使用这些操作后PB0就输出低电平了呢。我们可以从 reg51.h 这个文件中看出原因。 可以看见,在头文件中对类似P0的IO口进行
[单片机]
<font color='red'>STM32</font>固件库的小结
STM32菜鸟成长记录---GPIO的使用
#include stm32f10x_lib.h #include stm32f10x.h GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO宏操作结构体 void Delay(__IO uint32_t nCount)//__IO的宏定义volatile { for(; nCount != 0; nCount--); } /*初始化嵌入式Flash接口,初始化PLL使其达到系统可用频率*/ void RCC_Configuration(void) { /* Setup the microcontroller system. Initialize the Embedd
[单片机]
借并购Hardi之机,FPGA巨擘“坐享其成”巧分ASIC验证市场一杯羹
尽管FPGA合成供应商Synplicity并购ASIC原型设计供应商Hardi Electronics AB并不是一个大型的EDA收购行动,但是这一动作却引人注目:Synplicity由此进入ASIC验证市场,却无需与其他大型EDA供应商直接竞争。 Synplicity在6月1日宣布以2400万美元收购Hardi,Hardi的14名员工成为Synplicity公司的雇员。Hardi销售能够咬合起来形成快速原型解决方案的母板和子板,运行速度可达125MHz。其所在的快速原型市场尚处于成长期,供应商也不多。Synplicity公司最近推出支持合成和调试基于FPGA的ASIC原型的软件,进入ASIC验证市场。 Synplicity公
[焦点新闻]

推荐帖子

射频开关TC4-1T+的国产替代器件规格书
CH-BTC41TA1:4核心和线变压器,0.5-300MHz,50频率范围:该型号支持的频率范围较广,通常适用于从直流到6GHz的应用场景。控制方式:它是一个单刀四掷(SP4T)开关,通过TTL电平控制信号来选择不同的通道。低插入损耗:在工作频段内,它提供较低的插入损耗,保证了信号传输的效率。高隔离度:各端口之间有良好的隔离性能,可以有效减少不同通道之间的干扰。小型化设计:采用了紧凑型封装,适合于空间受限的设计。可靠性高:采用高质量材料制造,确保了产品的稳定性和长寿命。
辰海芯 RF/无线
自动摇篮
本帖最后由paulhyde于2014-9-1509:11编辑自动摇篮自动摇篮本帖最后由paulhyde于2014-9-1509:11编辑顶!!!!!!!!!
呱呱 电子竞赛
MOS管驱动,这样的波形怎么样?
下降沿还是有些长,约50nSMOS管驱动,这样的波形怎么样?楼主这个波形是Vgs?好高开关的频率啊,1.5MHz?最高2.5v是推那個nmos?旁路電容能減少點?这么高的频率是不是软开关呢,有没有太多能量辐射出来变成电磁波啊??貌似这个波形不很好吧?电压范围不满足、振铃很厉害,下降速度也有一些不太好。不过你干嘛用这么高的开关频率?波形很不好,看看驱动能力是不是满足条件,驱动信号不能离你的MOS管太远。
dontium 模拟与混合信号
使用、评测STM32 Nucleo&X-NUCLEO-IDB04A1
还有两天就放假了,整理代码,准备发帖(是不是有点晚)。使用、评测STM32Nucleo&X-NUCLEO-IDB04A1不晚没有看见东西啊、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、SPI外设接口voidSTM_EVAL_SPIInit(void){GPIO_InitTypeDefGPIO_InitStructure;SPI_InitTypeDefSPI_InitStructure;/*EnabletheSPIperi
gxliu08 stm32/stm8
北京轨道交通展图片报道
北京轨道交通展图片报道008007014021022北京轨道交通展图片报道
jameswangsynnex 汽车电子
7281 急
我用的是S3C2410的板子,用GPIO控制DATA,CLK和KEY,写入数据时,BC7281B时钟信号正常,就是data脚总是高电平,握手无法建立,查看以前的帖子有人问过但没有解决,不知到有没有人遇到同样的问题,怎么解决?很郁闷,多谢了!!!!7281急没用过,拿示波器量,如果给出去的时序以及信号是对的,就从硬件考虑吧.恩,多谢,我也在怀疑
xiaoyake1 嵌入式系统
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved