STM32-初学FreeRTOS操作系统
首页 > STM32学习   作者:皮皮华  2019年4月22日 14:18 星期一  热度:2392°  字号:   评论:0 条
时间:2019-4-22 14:18   热度:2392°  评论:0 条 

今天的实验内容是使用cubeMX配置freeRTOS,创建3个任务使三个LED实现不同频率的闪烁。在时间敏感的应用中,单线程的程序必须等待整个程序运行完或者中断发生才能再次运行,实时性较弱。今天采用的freeRTOS是实时操作系统之一,特点是多线程,采用“轮换”的方式实现“并行”的效果,操作系统内可以建立任务,每个任务都可以认为自己完全占有着cpu,这样整个系统的灵活性就会非常强。今天使用cubeMX简单配置MCU实现多线程的效果。
来跟我一起开搞:

使用cubeMX创建一个新的工程,本文选择STM32L476VETx主控

如图,配置LED所接引脚为输出模式,并右键点击Enter User Label标注好名称例如我的引脚控制情况如下:
PB2引脚控制红色的LD4    PB8引脚控制黄色的LD5

PC11引脚控制黄色的LD6    PC10引脚控制红色的LD7

1424.png

1422.png

配置系统HCLK为72M,这里告诉我们最高可以设置为80Mhz(振荡器HSI 16Mhz)

 1474.png

勾选FreeRTOS

1489.png 

击配置界面的FreeRTOS出现具体配置界面,只配置Tasks & Queues

1535.png 

双击初始的task进行配置

1553.png 

修改任务名称Task Name、任务函数Entry Function并配置优先级为osPriorityBelowllormal

1621.png 

点击add增加个新的任务分别控制LD5、LD6,注意他们的优先级分别设置为osPriorityNormalosPriorityAbovellormal,优先级是可以自定义的,我这里仅仅是将个任务的优先级区分开来

1735.png1737.png 

配置已经完成了,整个流程十分简洁,尝试生成模板,如下图设置,将所有外设分.c/.h存储

1786.png1788.png 

弹出错误,提示不建议使用systick作为timebase source,原因是 FreeRTSO 使用了 Systick 作为时钟节拍,而 HAL 库也使用了 Systick 作为 HAL_Delay()和各种 timeout 的时钟基准。因此需要将 HAL 的时钟基准改为其他 TIMER。一般使用一个基本定时器。可以在SYS内设置Timebase Source为定时器

1837.png

1915.png

生成成功,点击Open Project打开工程文件,可以看到系统自动创建了三个任务名称(我们之前设置的名称),建立并开启了三个任务。

1987.png

1989.png

1992.png

main.c中,此处提示理论上用户不要在下面的循环里写程序了,因为调度器已经开始了。

11041.png 

我们直接打开freertos.c文件,找到三个任务的函数,可以看到每个任务都是一个死循环,并且内部有一个延时。死循环是代表每个任务都可以认为自己是独占cpu的,延时是为了给其他任务一个执行的机会。如果不加延时就会导致调度器无法为其他任务分配资源,也就无法执行到了。

11179.png 

我们加一句设置引脚输出电平的语句,会提示没有定义,这是因为freertos没有引用gpio相关的头文件。解决办法:在USER CODE BEGIN和USER CODE END中间插入这行代码 #include "gpio.h" 即可。这里提示一下为什么要放在这个BEGIN和END中间呢,就是为了你后面去修改引脚配置重新生成代码的时候会保留你之前写的代码,这点一定要注意。

11371.png11373.png 

分别在三个循环内写入不同频率的闪烁语句

11399.png 

设置下载方式,以及勾选Reset and Run下载后自动运行程序。

11439.png 

编译无误后下载程序

11453.png 

可以观察到LD5很快速的闪烁,,其他两个灯分别以20hz和2hz的频率闪烁,如果有示波器应该能清楚的验证开发板同时输出三种频率的方波。

11459.gif

后记:每个任务都可以有自己的“初始化”即在任务内循环之上进行变量定义和初始化操作,不建议在程序内使用全局变量,因为在没有保护的情况下,全局变量有被意外改变的风险,程序之间可以通过邮箱和信号量来进行交互

建议大家看看这篇中文版的,先了解一下基础《FreeRTOS实时内核实用指南.pdf

再跟着下面的文档边看边调试。

STM32CubeMX+FreeRTOS学习[1] 任务的创建(Lu).pdf

STM32CubeMX+FreeRTOS学习[2] 二值信号量(Lu).pdf

STM32CubeMX+FreeRTOS学习[3] 计数信号量(Lu).pdf

STM32CubeMX+FreeRTOS学习[4] 消息队列(Lu).pdf

STM32CubeMX+FreeRTOS学习[5] 邮箱队列(Lu).pdf

STM32CubeMX+FreeRTOS学习[6] 互斥量(Lu).pdf

STM32CubeMX+FreeRTOS学习[7] 软定时器(Lu).pdf

 您阅读这篇文章共花了: 
捐赠支持:如果觉得这篇文章对您有帮助,请“扫一扫”鼓励作者!
 本文无需标签!
二维码加载中...
本文作者:皮皮华      文章标题: STM32-初学FreeRTOS操作系统
本文地址:http://huazai.eleuu.com/?post=11
版权声明:若无注明,本文皆为“皮皮华博客”原创,转载请保留文章出处。

发表吐槽

你肿么看?

你还可以输入 250 / 250 个字

嘻嘻 大笑 可怜 吃惊 害羞 调皮 鄙视 示爱 大哭 开心 偷笑 嘘 奸笑 委屈 抱抱 愤怒 思考 日了狗

评论信息框


既然没有吐槽,那就赶紧抢沙发吧!