STM32CUBEMX部署生成FreeRTOS创建LED闪烁任务

目录

一、前言

二、详细步骤

三、总结


一、前言

        从本文开始,将会逐步介绍FreeRTOS的一些功能,由浅入深。本文将上手通过STM32CUBEMX快速实现FreeRTOS的移植。随后创建点灯任务。

        芯片选型:STM32F103C8T6

二、FreeRTOS

        如果你想要在单片机程序中同时实现LED闪烁和检测按键,只用最简单的扫描检测,不使用中断等,你会怎么实现呢?

        常见的方法是:

if(按键 == 按下)
{
    ...   
}
延时(1000ms)
LED翻转()

        这样的话,我们按下按键往往要等待1s才被响应。

        还有的小伙伴选择这样写:

if(按键 == 按下)
{
    ...   
}
延时(10ms)
延时计数++
if(延时计数 >= 100)
{
    延时计数 = 0
    LED翻转()
}

        这样可以做到10ms内就能响应按键操作,但是如果我们面对更快的场景呢?比如必须捕捉到时间很短的按键事件,又该如何做?

        我们做不到一心二用,CPU也是这样,他们需要执行完一条语句随后转身去执行另外一条。但这样并不符合实时响应的要求,如果能够多线程处理就好了。那么,FreeRTOS可以帮助你。

        CPU同样不能一心二用,CPU的多线程不过是快速在多个线程间切换执行。执行任务A的一条指令然后再去执行任务B的一条指令,切换的事件之快,对于任务来说就是在一心而用。

        什么是FreeRTOS?FreeRTOS 是一个开源的、免费的、实时操作系统内核(RTOS),专为嵌入式微控制器设计。它由 Richard Barry 开发,并在全球范围内得到广泛使用,特别是在需要高实时性、低资源消耗和灵活性的应用中。FreeRTOS 提供了任务调度、时间管理、同步机制(如信号量、互斥锁和队列)等功能,使得开发者可以更容易地构建复杂的多任务应用程序。

三、详细步骤

        打开STM32CUBEMX 配置LED引脚,基本时钟树。

        将时基源改为TIM4或其他不使用的定时器

        使能FreeRTOS

        4.点击Task and Queues,点击Add,添加我们自己的任务。Entry Function是程序入口。

        在New Task中,我们可以看到如下选项

        点击Generate Code,生成代码。

        打开Keil之后,先编译一遍,确保没有错误。

        找到freertos.c文件,找到之前程序入口的函数。

        将里边的程序改为LED闪烁。

for(;;)
{
  osDelay(1000);
  HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
}

四、总结

        显而易见,相较于我们使用常规途径移植STM32的FreeRTOS系统,STM32CUBEMX为我们提供了便利快捷的途径,让我们能够有更多时间在开发上,而非环境移植和部署。日后我也会陆续出几篇关于FreeRTOS的文章,深入学习交流。

        本文工程源码:FreeRTOS

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西西菜鸟

打赏支持获得问题解答机会

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值