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

目录

一、新建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;                                                     // 计数清0HAL_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.mzph.cn/web/11346.shtml

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

相关文章

24年做抖音小店,你还停留在数据?别人都已经开始注重利润了

大家好,我是电商笨笨熊 一件事情持续做,一个项目持续深耕,意义到底是什么? 这句话我常常说,但很多人似乎走偏了实际意义; 尤其对于新手来说,做抖音小店总是向往某某老玩家多么牛的数据&#…

程序员健康指南:运动,让代码更流畅

程序员健康指南:运动,让代码更流畅 程序员,一个与电脑相伴的群体,长时间的久坐和高强度的脑力劳动是他们的日常。然而,久坐不仅影响体态,更对心脏健康构成威胁。根据《欧洲心脏杂志》的研究,中…

【PPT技巧】ppt文件打开就是只读模式,如何改为可编辑模式?

PPT文档打开是只读模式,如何改成可编辑文档呢?这需要分几种情况来说,所以今天将介绍几种方法帮助PPT只读文档改为可编辑文档。 方法一: 我们可以先查看一下文件属性,属性中有只读属性,当我们打开文档之后带…

C++入门——引用(2)

前言 上一节我们开始学习了C,并且对C有了初步的了解,这一节我们继续学习C的基础,那么废话不多说,我们正式进入今天的学习 C中的引用 1.1引用的概念 引用不是新定义一个变量,而是给已存在变量取了一个别名&#xff0…

uniapp小程序:大盒子包裹小盒子但是都有点击事件该如何区分?

在开发过程中我们会遇到这种情况,一个大盒子中包裹这一个小盒子,两个盒子都有点击事件,例如: 这个时候如果点击评价有可能会点击到它所在的大盒子,如果使用css中的z-index设置层级的话如果页面的盒子多的话会混乱&…

Spring解决泛型擦除的思路不错,现在它是我的了。

你好呀,我是浮生。 Spring 的事件监听机制,不知道你有没有用过,实际开发过程中用来进行代码解耦简直不要太爽。 但是我最近碰到了一个涉及到泛型的场景,常规套路下,在这个场景中使用该机制看起来会很傻,但…

15、FreeRTOS 软件定时器

文章目录 一、什么是定时器?1.1 定时器的理解1.2 软件定时器的特性 二、 软件定时器的上下文2.1 守护任务2.2 守护任务的调度2.3 回调函数 三、软件定时器的函数3.1 创建3.2 删除3.3 启动/停止3.5 修改周期3.6 定时器ID 四、案例4.1 一般使用4.2 消除抖动 一、什么是定时器? …

Midjourney Imagine API 申请及使用

Midjourney Imagine API 申请及使用 申请流程 要使用 Midjourney Imagine API,首先可以到 Midjourney Imagine API 页面点击「Acquire」按钮,获取请求所需要的凭证: 如果你尚未登录或注册,会自动跳转到登录页面邀请您来注册和登…

语音转文字服务的调用接口

语音转文字(Speech-to-Text,STT)技术允许将口语化的语音转换成书面文字。以下是一些提供语音转文字服务的调用接口及其特点。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.讯飞开放平台语音转写…

[猫头虎分享21天微信小程序基础入门教程]第1天:微信小程序概述与开发环境搭建教程

第1天:微信小程序概述与开发环境搭建 😺 文章目录 第1天:微信小程序概述与开发环境搭建 😺自我介绍微信小程序概述特点 开发环境搭建步骤1: 注册微信小程序账号步骤2: 安装开发者工具步骤3: 熟悉开发者工具界面 今日学习总结小测试…

炒股开户佣金最低万1和万0.854,融资融券现在利率最低4.0%~5%

​​炒股开户佣金一般是万1和万0.854,万0.854有一定的资金量要求,高于万1的是可以申请降低的。 开户万1佣金和万0.854佣金只需要联系证券公司客户经理协商就行。 开户流程: 1、向客户经理索要开户链接或者扫描二维码、进入申请页面&#x…

本地搭建各大直播平台录屏服务结合内网穿透工具实现远程管理录屏任务

文章目录 1. Bililive-go与套件下载1.1 获取ffmpeg1.2 获取Bililive-go1.3 配置套件 2. 本地运行测试3. 录屏设置演示4. 内网穿透工具下载安装5. 配置Bililive-go公网地址6. 配置固定公网地址 本文主要介绍如何在Windows系统电脑本地部署直播录屏利器Bililive-go,并…

Nachi那智不二越机器人维修技术合集

一、Nachi机械手维护基础知识 1. 定期检查:定期检查机器人的各个部件,如机械手伺服电机、机器人减速器、机械臂传感器等,确保其运行正常。 2. 清洁与润滑:定期清洁Nachi工业机器人表面和内部,并使用合适的润滑油进行润…

VRRP协议-负载分担配置【分别在路由器与交换机上配置】

VRRP在路由器与交换机上的不同配置 一、使用路由器实现负载分担二、使用交换机实现负载分担一、使用路由器实现负载分担 使用R1与R2两台设备分别进行VRRP备份组 VRRP备份组1,虚拟pc1的网关地址10.1.1.254 VRRP备份组2,虚拟pc2的网关地址10.1.1.253 ①备份组1的vrid=1,vrip=…

vue3中使用cherry-markdown

附cherry-markdown官网及api使用示例 官网:https://github.com/Tencent/cherry-markdown/blob/main/README.CN.md api:Cherry Markdown API 考虑到复用性,我在插件的基础上做了二次封装,步骤如下: 1.下载 (一定要指定版本0.8.22,否则会报错: [vitel Internal server e…

初识指针(5)<C语言>

前言 在前几篇文章中,已经介绍了指针一些基本概念、用途和一些不同类型的指针,下文将介绍某些指针类型的运用。本文主要介绍函数指针数组、转移表(函数指针的用途)、回调函数、qsort使用举例等。 函数指针数组 函数指针数组即每个…

深度学习知识点全面总结

ChatGPT 深度学习是一种使用神经网络来模拟人脑处理数据和创建模式的机器学习方法。下面是深度学习的一些主要知识点的总结: 1. 神经网络基础: - 神经元:基本的计算单元,模拟人脑神经元。 - 激活函数:用于增加神…

【CSP CCF记录】数组推导

题目 过程 思路 每次输入一个Bi即可确定一个Ai值,用temp记录1~B[i-1],的最大值分为两种情况: 当temp不等于Bi时,则说明Bi值之前未出现过,Ai必须等于Bi才能满足Bi是Ai前缀最大的定义。当temp等于Bi时,则说…

SpringAMQP-消息转换器

这边发送消息接收消息默认是jdk的序列化方式,发送到服务器是以字节码的形式,我们看不懂也很占内存,所以我们要手动设置一下 我这边设置成json的序列化方式,注意发送方和接收方的序列化方式要保持一致 不然回报错。 引入依赖&#…

重磅推出:135届广交会采购商名录,囊括28个行业数据!

5.5日,第135届中国进出口商品交易会(简称广交会)在广州圆满闭幕,这一全球贸易盛典再次展现了中国制造的卓越实力和文化魅力,成就斐然,吸引了全球目光。 本届广交会线下出口成交额达247亿美元,对…