21.2-工程中添加FreeRTOS(掌握) 用STM32CubeMX添加FreeRTOS

这个是全网最详细的STM32项目教学视频。
第一篇在这里:
视频在这里

STM32智能小车V3-STM32入门教程-openmv与STM32循迹小车-stm32f103c8t6-电赛 嵌入式学习 PID控制算法 编码器电机 跟随


**V3:HAL库开发、手把手教学下面功能:PID速度控制、PID循迹、PID跟随、遥控、避障、PID角度控制、openmv视觉控制、电磁循迹、FreeRTOS、K210视觉智能车(更新中)、K230视觉智能车(更新中)、MSPM0G3507视觉智能车(更新中)**

21.2-工程中添加FreeRTOS(掌握)

用STM32CubeMX添加FreeRTOS

在编写加入FreeRTOS操作系统之前最好应该先测试一下,裸机对应的程序是否正常执行,比如我们更改的19-5代码的裸机程序的功能是否都正常,小车能否能供正常执行,那六个模式,能够正常执行那六个模式后,再继续编写增加FreeRTOS的程序。

让文件MyCode_V3.3.0处于一个相对简单短的路径且没有中文的路径。

我们使用19-5的工程

复制一些19-5(因为20章电磁循迹使用GPIO和经典的红外循迹使用的一样,所以我们不修改20章节代码)的文件改名为21-2_LED_FreeRTOS

双击LED.ioc,STM32CubeMX就会打开配置文件
在这里插入图片描述

更改时钟

在这里插入图片描述
System Core 中选择 SYS ,对 Timebase Source 进行设置,选择 TIM3 作为HAL库的时基(除了 SysTick和其他已经使用的定时器 外都可以)

为什么这里Timebase Source (HAL库时基源)不能再选择SysTick(滴答定时器),因为我们要使用FreeRTOS而 FreeRTOS需要一个时钟基准用于任务和时间管理,这个FreeRTOS的时钟基准默认使用了SysTick(滴答定时器), 所以我们避免冲突给Timebase Source (HAL库时基源)选择一个非SysTick定时器。

选择V1

选择FreeRTOS中的CMSIS_V1接口
在这里插入图片描述
Middleware 中选择 FREERTOS 设置,并选择 CMSIS_V1 接口版本

CMSIS是一种接口标准,目的是屏蔽软硬件差异以提高软件的兼容性。RTOS v1使得软件能够在不同的实时操作系统下运行(屏蔽不同RTOS提供的API的差别),而RTOS v2则是拓展了RTOS v1,兼容更多的CPU架构和实时操作系统。因此我们在使用时可以根据实际情况选择,如果学习过程中使用STM32F1、F4等单片机时没必要选择RTOS v2,更高的兼容性背后时更加冗余的代码,理解起来比较困难。

这里有一个中断的错误提示我们看一下

点击NVIC->查看提示

Preemption priorities have been set to 5 according to FREERTOS parameter LIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY.

根据FREERTOS参数LIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY设置抢占优先级为5。

这个LIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 是系统可管理的最高优先级如果设置为5,则优先级数值为0,1,2,3,4的中断是不受FreeRTOS管理的,不可被屏蔽,也不能调用FreeRTOS中的API接口函数,而中断优先级在5-15的中断受系统FreeRTOS管理,可以被屏蔽。

这个值默认是5
在这里插入图片描述
这是是提示我们有中断优先级高于系统可管理的最高优先级了,CubeMX 自动限制 一般中断的抢占优先级不得高于 5

所以我们先把之前设置的KEY按键相关外部中断优先级提高,设置为5

然后点击OK
在这里插入图片描述
这是提示的两个错误的中断优先级
在这里插入图片描述
把这两个都设置为5
在这里插入图片描述
这样的话需要测试一下按键里面还是否可以写HAL延时函数,因为我们后面章节会把按键写到任务中所以这里不在测试中断中的功能。

添加任务

新建一个任务,这里新增一个用于LED闪烁的任务。

系统默认会有一个默认任务-defaultTask,这个默认任务是可以更改或者删除的。这里我们先留着。

下面我们新增一个LED任务。
在这里插入图片描述

编写任务函数

这个任务的函数里面点灯。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击关闭
在这里插入图片描述
点击这个后就是keil 打开代码

在这里插入图片描述
然后我们点击编译下。

编译一下,有些错误需要我们解决一下
在这里插入图片描述
查看第一个错误,双击 发现是
在这里插入图片描述
编译后发现还有一个错误,错误说的是:HAL_TIM_PeriodElapsedCallback 函数被重复定义,在 main.c 和其他文件(例如 stm32f1xx_it.c)中都定义了
在这里插入图片描述
为了解决这个问题,我们全局搜索(ctrl+f)一下函数HAL_TIM_PeriodElapsedCallback
在这里插入图片描述
我们发现两个文件都定义了,HAL_TIM_PeriodElapsedCallback函数,其中main.c 是我们在增加FreeRTOS后,又STM32Cubemx生成的的部分。所以我们保留man.c里面的函数,将stm32f1xx_it.c中的函数移到main.c 中

在这里插入图片描述
实现如下 将代码放到BEGIN和END中
在这里插入图片描述
然后注释掉stm32f1xx_it中的函数
在这里插入图片描述
这部分注释 掉
在这里插入图片描述
增加相关定时和注释掉之前的声明如下
在这里插入图片描述

short Encode1Count = 0;//电机1编码器计数值 short的类型
short Encode2Count = 0;//电机2编码器计数值 short的类型
float Motor1Speed = 0.00;//电机1速度 转/s
float Motor2Speed = 0.00;//电机2速度 转/s
uint16_t TimerCount = 0;//中断计数变量

然后编译一下,没有错误了
在这里插入图片描述
然后我们再任务里面增加反转LED对应引脚的代码
在这里插入图片描述

	HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);//切换LED GPIO状态osDelay(300);

编译烧录到板子可以观察到核心板小灯闪烁。

如果使用DAP下载设置如下(具体的下载接线和设置见第二章内容)
在这里插入图片描述
如果芯片和连接正常会出现

在这里插入图片描述

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

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

相关文章

【越学学糊涂的Linux系统】Linux指令篇(二)

一、pwd指令: 00x0:打印该用户当前目录下所属的文件路径 看指令框可以看出我用的是一个叫sw的用户,我们的路径就是在一个home目录下的sw目录下的class113文件路径。 也可以说是指出当前所处的工作目录 补充:🎆​​​​​​​Wi…

LangGraph系列-1:用LangGraph构建简单聊天机器人

在快速发展的人工智能和大型语言模型(llm)世界中,开发人员不断寻求创建更灵活、更强大、更直观的人工智能代理的方法。 虽然LangChain已经改变了这个领域的游戏规则,允许创建复杂的链和代理,但对代理运行时的更复杂控制…

进程池的制作(linux进程间通信,匿名管道... ...)

目录 一、进程间通信的理解 1.为什么进程间要通信 2.如何进行通信 二、匿名管道 1.管道的理解 2.匿名管道的使用 3.管道的五种特性 4.管道的四种通信情况 5.管道缓冲区容量 三、进程池 1.进程池的理解 2.进程池的制作 四、源码 1.ProcessPool.hpp 2.Task.hpp 3…

Linux学习笔记——用户管理

一、用户管理命令 useradd #用户增加命令 usermod #用户修改命令 passwd #密码修改命令 userdel #用户删除命令 su #用户提权命令 1、useradd命令(加用户): 创建并设置用户信息,使用us…

怎样在PPT中启用演讲者视图功能?

怎样在PPT中启用演讲者视图功能? 如果你曾经参加过重要的会议或者演讲,你就会知道,演讲者视图(Presenter View)对PPT展示至关重要。它不仅能帮助演讲者更好地掌控演讲节奏,还能提供额外的提示和支持&#…

【Unity3D】实现2D小地图效果

目录 一、玩家脚本Player 二、Canvas组件设置 三、小地图相关 四、GameLogicMap脚本修改 基于:【Unity3D】Tilemap俯视角像素游戏案例-CSDN博客 2D玩家添加Dotween移动DOPath效果,移动完成后进行刷新小地图(小地图会顺便刷新大地图&…

四.3 Redis 五大数据类型/结构的详细说明/详细使用( hash 哈希表数据类型详解和使用)

四.3 Redis 五大数据类型/结构的详细说明/详细使用( hash 哈希表数据类型详解和使用) 文章目录 四.3 Redis 五大数据类型/结构的详细说明/详细使用( hash 哈希表数据类型详解和使用)2.hash 哈希表常用指令(详细讲解说明)2.1 hset …

C#通过3E帧SLMP/MC协议读写三菱FX5U/Q系列PLC数据案例

C#通过3E帧SLMP/MC协议读写三菱FX5U/Q系列PLC数据案例,仅做数据读写报文测试。附带自己整理的SLMP/MC通讯协议表。 SLMP以太网读写PLC数据20191206/.vs/WindowsFormsApp7/v15/.suo , 73216 SLMP以太网读写PLC数据20191206/SLMP与MC协议3E帧通讯协议表.xlsx , 10382…

【算法】经典博弈论问题——威佐夫博弈 python

目录 威佐夫博弈(Wythoff Game)【模板】 威佐夫博弈(Wythoff Game) 有两堆石子,数量任意,可以不同,游戏开始由两个人轮流取石子 游戏规定,每次有两种不同的取法 1)在任意的一堆中取走任意多的石子 2)可以在两堆中同时取走相同数量…

具身智能研究报告

参考: (1)GTC大会&Figure:“具身智能”奇点已至 (2)2024中国具身智能创投报告 (3)2024年具身智能产业发展研究报告 (4)具身智能行业深度:发展…

把本地搭建的hexo博客部署到自己的服务器上

配置远程服务器的git 安装git 安装依赖工具包 yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel安装编译工具 yum install -y gcc perl-ExtUtils-MakeMaker package下载git,也可以去官网下载了传到服务器上 wget https://www.ke…

STM32 旋转编码器

旋转编码器简介 旋转编码器:用来测量位置、速度或旋转方向的装置,当其旋转轴旋转时,其输出端可以输出与旋转速度和方向对应的方波信号,读取方波信号的频率和相位信息即可得知旋转轴的速度和方向 类型:机械触点式/霍尔传…

后盾人JS--闭包明明白白

延伸函数环境生命周期 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> <…

Python爬虫之——Cookie存储器

目录 专栏导读1、背景介绍2、库的安装3、核心代码4、完整代码总结 专栏导读 &#x1f338; 欢迎来到Python办公自动化专栏—Python处理办公问题&#xff0c;解放您的双手 &#x1f3f3;️‍&#x1f308; 博客主页&#xff1a;请点击——> 一晌小贪欢的博客主页求关注 &…

MFC开发,给对话框添加垂直滚动条并解决鼠标滚动响应的问题

无论在使用QT或者MFC进行界面开发时&#xff0c;都会出现在一个对话框里面存在好多的选项&#xff0c;导致对话框变得非常长或者非常大&#xff0c;就会显现的不美观&#xff0c;在这种情况下通常是添加一个页面的滚动条来解决这个问题&#xff0c;下面我们就来介绍给MFC的对话…

(undone) MIT6.S081 2023 学习笔记 (Day6: LAB5 COW Fork)

网页&#xff1a;https://pdos.csail.mit.edu/6.S081/2023/labs/cow.html 任务1&#xff1a;Implement copy-on-write fork(hard) (doing) 现实中的问题如下&#xff1a; xv6中的fork()系统调用会将父进程的用户空间内存全部复制到子进程中。如果父进程很大&#xff0c;复制过…

分享| RL-GPT 框架通过慢agent和快agent结合提高AI解决复杂任务的能力-Arxiv

结论 “RL-GPT: Integrating Reinforcement Learning and Code-as-policy” RL-GPT 框架为解决大语言模型在复杂任务处理中的难题提供了创新有效的途径&#xff0c; 旨在将强化学习&#xff08;RL&#xff09;和代码即策略相结合&#xff0c; 以解决大语言模型&#xff08…

【Linux权限】—— 于虚拟殿堂,轻拨密钥启华章

欢迎来到ZyyOvO的博客✨&#xff0c;一个关于探索技术的角落&#xff0c;记录学习的点滴&#x1f4d6;&#xff0c;分享实用的技巧&#x1f6e0;️&#xff0c;偶尔还有一些奇思妙想&#x1f4a1; 本文由ZyyOvO原创✍️&#xff0c;感谢支持❤️&#xff01;请尊重原创&#x1…

一个简单的自适应html5导航模板

一个简单的 HTML 导航模板示例&#xff0c;它包含基本的导航栏结构&#xff0c;同时使用了 CSS 进行样式美化&#xff0c;让导航栏看起来更美观。另外&#xff0c;还添加了一些 JavaScript 代码&#xff0c;用于在移动端实现导航菜单的展开和收起功能。 PHP <!DOCTYPE htm…

【算法应用】基于A*-蚁群算法求解无人机城市多任务点配送路径问题

目录 1.A星算法原理2.蚁群算法原理3.结果展示4.代码获取 1.A星算法原理 A*算法是一种基于图搜索的智能启发式算法&#xff0c;它具有高稳定性和高节点搜索效率。主要原理为&#xff1a;以起点作为初始节点&#xff0c;将其加入开放列表。从开放列表中选择具有最小总代价值 f (…