【FreeRTOS 快速入门】-- 1、STM32工程移植FreeRTOS

news2024/11/28 20:33:58

目录

一、新建STM32工程

为了示范完整的移植过程,我们从0开始,新建一个标准的STM32点灯工程。

(本篇以CubeMX作示范,CubeIDE操作近同,可作对比参考)

1、新建工程 

选择 芯片型号 新建工程

2、搜索芯片型号

输入芯片型号进行搜索 (注意:如果输入框为粉红色,可能是因为前面有空格,要删除)双击搜索结果中的目标芯片型号,即可进入配置。

3、配置Debug调试方式

新建工程时,养成习惯:先配置Debug选项(即调试模式);如果没有使能Debug:烧录一次程序后,将关闭调试引功能,无法再烧录(得解锁芯片);

4、选择 晶振源

HSE,外部高速时钟源,选择: Crystal/Ceramic Resonator

5、配置 时钟树

下图参数,通用STM32F407xx系列 ,(更换为你所用芯片的时钟树参数即可通过)。1、3两项,要填写实物晶振值,可以查看晶振上丝印, 也可以查看原理图。目前市面的F407系列开发板,常用晶振有8MHz、25MHz两种,修改下图1、2两处即可。        

6、配置 LED灯 引脚

这里,我们增加LED的引脚配置,将用于验证STM32工程配置的正确性。

每个开发板上,都会有LED灯,在调试程序时可以配合作为各种状态指示输出。

小编所用的STM32板子,查得LED原理图如下:

红灯使用PC5、蓝灯使用PB2低电平时通路

依据此图,我们对这两个引脚进行配置:

引脚 PC5,工作模式:GPIO_Output(推出模式),修改别名:LED_RED引脚 PB2,工作模式:GPIO_Output(推出模式),修改别名:LED_BLUE如果希望程序运行后默认为:熄灯,还可以配置:上拉,这样程序运行后电路就是断路状态。

7、工程选项

进入工程管理页面,设置4项:工程名称、存放目录、开发环境、堆栈大小。

目录、名称:重点:不能使用中文!否则无法正常生成。开发环境:选MDK-ARM,  即Keil工程。堆栈大小:都修改成0x1000(或者更大),以适配FreeRTOS、LVGL等移植。

提示:

CubeMX:生成后,工程文件夹,可以复制到其它中文路径下存放,也可以修改成中文的文件夹名称,以便管理。但工程的名称,不能修改!CubeIDE:生成后,工程文件夹,可以复制到其它英文路径下存放。路径、名称都不支持中文。

8、文件选项

这一页,打勾两个选择:

标记2处:只生成需要的库文件(可以有效减少代码体积)。标记3处:为各种外设生成独立c、h文件(不打勾时,外设的初始化代码会堆在main.c中)。

至此,已完成新建工程所需全部配置。

9、生成工程

生成后,弹窗:

小编的习惯:打开文件夹,再手动打开工程。


二、验证工程

这一部分,我们通过编写代码,使LED每500ms闪烁一次,以验证工程的配置是否完整。

1、设置 仿真器 参数

选择 CMSIS DAP打勾自动复位、运行

2、添加LED闪烁代码

很多新手不重视LED,觉得太简单太无聊了,没味道。

请认真看待LED的使用,它是大杀器般的存在。

如,规律地闪烁,可以帮助我们判断:系统时钟是否正常、程序有没有卡死等等。

双击打开main.c在while中的 /* USER CODE BEGIN 3 */ 下方,编写规律闪烁LED的代码,如下:

/** 1ms延时 **/
HAL_Delay(1 - 1);                                                  // 延时函数,参数:ms; 注意:CubeMX生成的HAL_Delay(), 函数内部为避免无效操作,会对传入参数+1,因此,如果只需要几ms延时建议传入参数时-1,如果需要大几百ms的非精准延时,那参数不-1也影响不大

/** 每500ms闪烁一次蓝色LED **/
static uint16_t msLED = 0;
if (++msLED == 500)                                                // 每500ms执行一次
{
    msLED = 0;                                                     // 计数清0
    HAL_GPIO_TogglePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin);          // 规律地闪烁蓝色LED,方便外部观察系统是否正常运行
}

完成后,是这个样子的:

3、编译

新工程的第一次编译,时间会有点长,大约几十秒。

编译完成后,信息栏的输出,是这个样子:

重点:必须 0 Erros,才能生成烧录文件。

4、 烧录 

点击“烧录”,下方的烧录进度条,大约要跑10秒左右。

烧录完成后,芯片将会自动复位,运行里面的程序。

如果程序一切正常,这时,我们观察开发板:蓝色LED,将会每0.5秒反转闪烁一次。

至此,我们的STM32点灯工程,已通过验证,可以使用它,进行FreeRTOS的移植了 !


三、移植 FreeRTOS

以前,移植FreeRTOS的底层代码,是需要自己复制、增删、修改代码,很是麻烦,相当耗时。

而现在通过CubeMX、CubeIDE,只需简单地点击,就能自动生成已移植好FreeRTOS的工程。

1、回到图形化配置界面

如果已关闭了CubeMX,双击工程目录下的 ioc 文件再次打开。

2、修改HAL库的时基源

我们先理解两个时基源:FreeRTOS时基源、HAL库时基源。

首先是FreeRTOS的时基源,它将占用Systick定时器,每1ms产生1次计数,用作任务时基。

而CubeMX生成的HAL库代码,也需要一个时基源,也默认使用:SysTick。

HAL库的时基源,很多人以为只是被简单用于延时,如 HAL_Delay();

其实,它还用于HAL库代码中的超时监测等场景中,如:I2C通信的ACK等待超时。

如果上述两者都同时使用SysTick作时基源,潜在一定风险,在生成代码时,会弹窗警告!

所以,为了避免发生冲突,我们需要修改HAL库所用的时基源,使用其它闲置的TIM。

如:TIM7等。

3、使能FreeRTOS  

上图中,在选择: CMSIS_V2后,就能使能FreeRTOS,其它参数,默认即可,不作修改。

(后续可以按项目需要进行修改,再生成更新后的配置。)

来到这一步,已完成了FreeRTOS的移植。

......是不是相当的意外,只是打了一个勾,就移植好了,就这么简单!!

4、默认生成的OS任务

(这个小节,原本想示范如何新建一个任务,但为了各篇章的独立,还是把这事独立一篇吧。)

在使能FreeRTOS后,会自动生成一个默认的任务:defaultTasK。

在选项页 "Tasks and Queues" ,可以查看这个任务的参数配置。

具体如下图所示:

这里,也不作任何修改,直接使用默认参数。

5、再次生成工程

(待更新。。。)

6、为任务编写执行代码

(待更新。。。)

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

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

相关文章

Pytest自动化测试框架完美结合Allure

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快 简介 Allure Framework是一种灵活的、轻量级、多语言测试报告工…

weblogic [WeakPassword]

一、漏洞描述 开放了wblogic端口,进去发现有任意读取文件漏洞,配合解密工具读出密码,登录后台传入webshell 二、影响版本 当前版本 三、影响组件 weblogic 四、漏洞判断 hello/file.jsp?path/etc/passwd 发现有任意文件下载 五、漏洞…

C++牛客周赛题目分享(2)小红叕战小紫,小红的数组移动,小红的素数合并,小红的子序列求和

目录 ​编辑 1.前言 2.四道题目 1.小红叕战小紫 1.题目描述 2.输入描述 3.输出描述 4.示例 5.题解与思路 2.小红的数组移动 1.题目描述 2.输入描述 3.输出描述 4.示例 5.题解与思路 3.小红的素数合并 1.题目描述 2.输入描述 3.输出描述 4.示例 5.题解与思…

2024年淘宝天猫618超级红包领取口令活动时间是从什么时候开始到几月几号结束?

2024年淘宝天猫618活动,将于2024年5月19日开始,今年618淘宝天猫取消了预售环节。同时,618淘宝天猫也提供了多项优惠活动:超级红包、跨店满减、官方立减、全程价保及草柴APP领优惠券拿购物返利等多重优惠活动。 2024年淘宝天猫618…

【C语言】指针(一)

目录 一、内存 1.1 ❥ 理解内存和地址的关系 1.2 ❥ 编址 二、指针变量 2.1 ❥ 取地址操作符(&) 2.2 ❥ 指针变量和解引用操作符(*) 2.3 ❥ 指针变量的大小 三、指针类型的意义 3.1 ❥ 指针的解引用 3.2 ❥ 指针-整数 3…

智能制造装备业项目数字化管理之项目模板管理

智能制造装备,作为工业4.0的核心组成部分,正日益受到全球制造业的关注。这类装备融合了信息技术和制造技术,旨在提高生产效率、降低成本并增强产品的个性化。然而,随着智能制造装备行业的飞速发展,项目管理复杂性也在不…

AI图像生成-原理

一、图像生成流程总结 【AI绘画】深入理解Stable Diffusion!站内首个深入教程,30分钟从原理到模型训练 买不到的课程_哔哩哔哩_bilibili 二、如果只是用comfy UI生成图片 1、找到下面几个文件,把对应模型移动到对应文件夹即可使用 2、选择对…

大学c语言基础很差,能不能学51单片机?会不会很困难?

开始前我分享下我的经历,我刚入行时遇到一个好公司和师父,给了我机会,一年时间从3k薪资涨到18k的, 我师父给了一些51单片机学习方法和资料,让我不断提升自己,感谢帮助过我的人, 如大家和我一样…

Springboot项目如何创建单元测试

文章目录 目录 文章目录 前言 一、SpringBoot单元测试的使用 1.1 引入依赖 1.2 创建单元测试类 二、Spring Boot使用Mockito进行单元测试 2.1 Mockito中经常使用的注解以及注解的作用 2.2 使用Mockito测试类中的方法 2.3 使用Mockito测试Controller层的方法 2.4 mock…

5分钟学设计模式:简单工厂与美食街的不期而遇

大家好,我是知微。 写代码好几年,是不是还纠结于这些问题: 面对一堆if-else,代码越写越长,维护起来比攀登珠穆朗玛峰还难每次只敢小心翼翼改个小功能,生怕程序突然“嘭”一声,全炸了想学习大佬…

基于SPWM控制策略的二极管钳位型NPC逆变器的并网simulink仿真

本人搭建了二极管钳位型NPC并网逆变器simulink仿真模型,该模型型采用d、q轴,电压前馈解耦控制,三相逆变并网,PI控制,仿真复现,效果优异,适合新手学习使用。 模型获取链接:基于SPWM…

探秘钱塘高中,筑梦未来之旅————杭州市钱塘高级中学

晨曦微露,书生琅琅,古韵今风交织在这方学府,滔滔的钱塘江畔,杭州市钱塘高级中学屹立于此。这所学校自1958年建校伊始,走过几十年的光辉岁月,一直致力于提供优质的教育资源。 近年来,学校获得多项…

鸿蒙内核源码分析(消息封装篇) | 剖析LiteIpc(上)进程通讯内容

基本概念 LiteIPC是OpenHarmony LiteOS-A内核提供的一种新型IPC(Inter-Process Communication,即进程间通信)机制,为轻量级进程间通信组件,为面向服务的系统服务框架提供进程间通信能力,分为内核实现和用户…

电商数据接口|如何获取电商数据?

随着互联网的发展,电商的运营方式也逐渐数据化,在大数据的影响下,电商领域很大程度上改变了传统的运营模式。很多商家如今都非常重视数据,并将数据贯穿于整个店铺的运营之中。 那么,具体来说电商大数据有哪些妙用呢&a…

C++ 对象型参数和返回值

对象型参数和返回值 1.对象型类型作为函数的参数2.对象型参数作为函数的返回值 1.对象型类型作为函数的参数 使用对象类型作为函数的参数或者返回值,可能会产生一些不必要的中间对象 例子: // 使用对象类型作为函数的参数 void test1(Car car) {}完整代…

空号检测-号码批量检测API接口-关机停机风险号检测

手机空号检测分为普通空号检测和实时检测两种类型: 普通空号检测返回结果:实号、风险号、空号、沉默号 。 1.普通版的检测不会实时更新数据,因此其数据库中的信息可能不是最新的。 2.覆盖基础运营商的数据库,检测范围相对有限&…

MSMQ消息队列

MQ是一种企业服务的消息中间节技术,这种技术常常伴随着企业服务总线相互使用,构成了企业分布式开发的一部分,如果考虑到消息的发送和传送之间是可以相互不联系的并且需要分布式架构,则可以考虑使用MQ做消息的中间价技术&#xff0…

【云原生】kubernetes核心组件

引言: Kubernetes 是为运行分布式集群而建立的,分布式系统的本质使得网络成为 Kubernetes 的核心和必要组成部分,了解 Kubernetes 网络模型可以使你能够正确运行、监控和排查应用程序故障。 一、Kubernetes的核心组件 1.1、Master组件 1.1.…

C# WinForm —— 18 NumericUpDown 介绍

1. 简介 数字显示框,通过向上、向下按钮来 增加/减小 显示的数值 2. 常用属性 属性解释(Name)控件ID,在代码里引用的时候会用到,一般以 numUD 开头Hexadecimal数值 up-down 控件的值是否应以十六进制显示Increment每单击一下按钮,增加或减…

0508GoodsContent的Maven项目

0508GoodsContent的Maven项目包-CSDN博客 数据库字段 页面需求