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

news2024/11/16 10:41:12

目录

一、前言

二、详细步骤

三、总结


一、前言

        从本文开始,将会逐步介绍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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1950411.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

昇思25天学习打卡营第22天|munger85

LSTMCRF序列标注 我们希望得到这个模型来对词进行标注,B是开始,I是实体词的非开始,O是非实体词。 我们首先需要lstm对序列里token的记忆,和计算每个token发到crf的分数,发完了再退出来,最后形成1模型。那么…

k8s v1.30 完整安装过程及CNI安装过程总结

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G技术研究。 博客内容主要围绕…

自动灭火绳品牌怎么选?欢迎进入自动灭火时代

伴随着科技的快速发展和自动灭火技术的广泛应用,各种各样的自动灭火装置及自动灭火系统已经成为了保障人们生命及财产安全的重要防线。面对不断涌现的自动灭火绳品牌,我们该怎么选择呢? 第一,首先看自动灭火绳的材料成分。 传统的…

计算机网络知识-面试点1

1. 三握四挥 定义: 在计算机网络中,特别是TCP/IP协议中,“三握”指的是三次握手(Three-way Handshake),而“四挥”则指的是四次挥手(Four-way Handshake)。这两个过程分别用于TCP连接…

C# dataGridView 去掉左边多出来空列

1.问题 在使用winform做界面程序时,dataGridView控件创建好后,左侧会多出一列为空,如何删除呢 2.解决方法 你可以在属性窗口中进行设置 如图: 将RowHeadersVisible 属性设置为False 或者代码设置 this.dataGridView1.RowHea…

MFC列表框示例

本文仅供学习交流,严禁用于商业用途,如本文涉及侵权请及时联系本人将于及时删除 目录 1.示例内容 2.程序步骤 3.运行结果 4.代码全文 1.示例内容 编写一个对话框应用程序CMFC_Li6_4_学生信息Dlg,对话框中有一个列表框,当用户…

使用vscode连接开发机进行python debug

什么是debug? 当你刚开始学习Python编程时,可能会遇到代码不按预期运行的情况。这时,你就需要用到“debug”了。简单来说,“debug”就是能再程序中设置中断点并支持一行一行地运行代码,观测程序中变量的变化&#xff…

【MySQL进阶之路 | 高级篇】锁的概述以及读写并发问题

事务的隔离性是由锁来实现的。 1. 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在程序开发中会存在很多线程同步的问题,当多个线程并发访问某个数据的时候,尤其是针对一些敏感的数据(如订单,金额等)&…

面试前端实习常问的关于【ES6新特性】的问题

ES6新特性 日常前端代码开发中,有哪些值得用 ES6 去改进的编程优化或者规范? 常用箭头函数来取代有this指向的函数常用 let 取代 var 命令常用数组/对象的结构赋值来命名变量(结构更清晰,语义更明确,可读性更好)在长字…

基于Delaunay三角网的平面点云面积计算(python)

1、背景介绍 三维点云密度比较高,可以根据点云数据精确计算物体表面面积,如建筑物水平占地面积、室内房间墙面面积等,如下图,这在实际应用中具有非常重要的作用。其实归根到底,计算上述面积,可以认为计算平…

【Linux】基本指令1

文章目录 1. find2. which3. alias4.whereis5.grep6. sort 、uniq7. linux怎么编辑文件中的内容 1. find 1.1 find: 查找文件所在的位置。(当我们进行find搜索的时候,可能需要访问磁盘进而导致效率低下。) 1.2 find / file.txt 在Linux系统是…

掏耳神器哪种最好用?力荐四款优质高口碑产品

要说到掏耳神器,市面上有不少声称能掏掏干净耳垢的挖耳勺。例如棉签、螺旋掏耳勺、可视掏耳勺等。那么那种掏耳神器最好用呢?有着多年采耳经验的我,当然把这三种神器都买来尝试过,很明确地告诉大家,只有可视掏耳勺最好…

Oracle集群RAC磁盘管理命令asmcmd的使用

文章目录 ASM磁盘共享简介ASM磁盘共享的优势ASM磁盘组成ASM磁盘共享的应用场景Asmcmd简介Asmcmd的功能Asmcmd的命令Asmcmd的使用注意事项Asmcmd运行模式交互模式运行非交互模式运行ASMCMD命令分类实例管理命令:文件管理命令:磁盘组管理命令:模板管理命令:文件访问管理命令:…

云计算实训室建设可行性报告

一、建设云计算实训室的目的和意义 随着信息技术的飞速发展,云计算作为一种新型的信息服务模式,已经成为推动信息技术创新和促进信息产业发展的重要力量。中高职院校作为培养高素质技能人才的重要基地,应当紧跟时代步伐,加强云计…

com.mysql.cj.jdbc.Driver 爆红

出现这样的问题就是pom.xml文件中没有添加数据库依赖坐标 添加上这个依赖即可,添加完后重新加载一下Maven即可。 如果感觉对你有用就点个赞!!!

第三十二天 Emmet语法生成HTML标签

前身是zen coding 用缩写提高写代码效率 vscode已经集成该语法 写div直接按tab自动生成<div></div>标签 div*3 再按tab 就可以一下生成四个该标签 父子级的标签 例如ul>li div>span 兄弟关系 divp 生成带类名或者id 输入.as 产生 输入#id 产生 默认是div…

如何用 Python 处理和操作 CSV 文件?

CSV&#xff08;Comma-Separated Values&#xff09;文件是一种常见的数据存储格式&#xff0c;广泛用于数据交换和轻量级数据存储。CSV文件以纯文本格式存储表格数据&#xff0c;每一行代表一条记录&#xff0c;字段之间用逗号&#xff08;或其他分隔符&#xff09;分隔。Pyth…

数据结构(5):树和二叉树

1 树的定义 1.1 树的基本概念 分支可以称为边&#xff0c;结点可以用于存放数据结构。 除了根节点&#xff0c;其他节点只有一个前驱&#xff01;&#xff01;&#xff01;&#xff01; 互不相交也就是 只有一个前驱结点&#xff01; 树应用的很广的 1.2 结点之间的关系 直接…

微服务实践和总结

H5原生组件web Component Web Component 是一种用于构建可复用用户界面组件的技术&#xff0c;开发者可以创建自定义的 HTML 标签&#xff0c;并将其封装为包含逻辑和样式的独立组件&#xff0c;从而在任何 Web 应用中重复使用。 <!DOCTYPE html> <html><head…

Python | Leetcode Python题解之第283题移动零

题目&#xff1a; 题解&#xff1a; class Solution:def moveZeroes(self, nums: List[int]) -> None:n len(nums)left right 0while right < n:if nums[right] ! 0:nums[left], nums[right] nums[right], nums[left]left 1right 1