利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(0) —— 创建工程

news2025/4/8 14:03:41

前言

(1)FreeRTOS是我一天过完的,由此回忆并且记录一下。个人认为,如果只是入门,利用STM32CubeMX是一个非常好的选择。学习完本系列课程之后,再去学习网上的一些其他课程也许会简单很多。
(2)本系列课程是使用的keil软件仿真平台,所以对于没有开发板的同学也可也进行学习。
(3)叠甲,再次强调,本系列课程仅仅用于入门。学习完之后建议还要再去寻找其他课程加深理解。

STM32CubeMX操作

创建工程

(1)创建一个一个STM32F103标准工程。

在这里插入图片描述
在这里插入图片描述

配置RCC

(1)一般的STM32F103开发板都是有一个8MHZ的高速外部晶振,所以我们需要使能Crystal/Ceramic Resonator,让STM32F103性能达到最佳状态。

在这里插入图片描述
在这里插入图片描述

配置SYS

(1)Debug这个一定要记得配置,不然你的芯片只能烧录一次程序,之后就变砖头了(哭笑)。
<1>Debug一般我们都是选则的Serial Wire,因为这样只需要占用SWDIOSWCLK引脚。其他几种Debug模式占用引脚太多,就不选择了。
<2>如果实在是忘记配置Debug了,就让开发板上的boot0和boot1都接高电平,进入内置SRAM启动模式,重新烧录程序。然后再让开发板上的boot0和boot1都接低电平,进入主闪存存储器模式。
(2)Timebase SourceHAL时基配置,如果是裸机就默认SysTick ,但是FreeRTOS会占用 SysTick,所以这里随便选一个定时器TIM4。如下为详细解释:
<1>裸机运行时只需要维护一个时基就可以了,也就是HAL时基。在加上操作系统时我们需要提供第二个时基来保证操作系统同时运行,也就是OS时基
<2>在裸机中SYS一般默认使用 SysTick滴答定时器作为HAL时基。但是开启 FreeRTOS 后,FreeRTOS会占用 SysTick (用来生成1ms
定时,用于任务调度),所以需要其他总线提供另外的时钟源。
<3>听完上面的,你是不是懵逼了。哈哈哈哈,这堆术语一下来,大部分都得懵逼,最多是一知半解不懂装懂。首先,我们我们来讲讲HAL时基是什么。
<4>在裸机开发中,我们延时函数有两种写法,第一种是软件延时,让CPU执行无效语句进行空转。第二种就是利用硬件定时器延时。软件延时效果并不精准,所以大多数时候,我们都是使用硬件定时器延时。因为M3内核的芯片自带了一个SysTick滴答定时器,所以很多时候我们都用SysTick作为硬件定时器延时,也就是HAL时基。讲完这些,一定还有同学依旧懵逼,能不能来点实例呢?
<5>实例来了,当我们使用HAL_Delay()函数的时候,他底层就是调用的HAL时基单元。如果是裸机程序,那么就是默认的 SysTick
<6>现在我们知道了HAL时基本质就是给一些时间有关的函数提供时间的功能,那么OS时基又是什么呢?这个时候我就推荐你看一下嵌入式裸机设计思想——时间片轮裸机开发架构+状态机+定时器调度机制这篇博客的时间片轮裸机开发架构部分。这个就是一个操作系统的雏形,这篇博客的OS时基就是 SysTick 。如果看不懂就记住吧,代码都摆出来的,还不理解,就是基础问题了。我不想过多赘述。

在这里插入图片描述

(3)STM32F103的最佳工作频率是72MHZ,所以我们选择72MHZ。

在这里插入图片描述

在这里插入图片描述

配置FreeRTOS

(1)FreeRTOS 版本问题:STM32CubeMX 已经将 FreeRTOS 集成到工具中,并且将 RTOS 的接口进行了封装 CMSISRTOS V1/V2V2 的内核版本更高,功能更多,在大多数情况下 V1 版本的内核完全够用。但是 V2 版本的 API 的兼容性更高,为了将来的开发和移植,建议开发者使用 V2 版本的 API

在这里插入图片描述

配置GPIO

(1)为了方便验证我们的程序是否好了,所以我们让一个PC13做输出口用于检测程序。

在这里插入图片描述

生成工程

(1)按照下图步骤,生成工程,并且打开工程即可。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

keil中进行的配置

编写程序

(1)在freertos.c中的StartDefaultTask函数加入如下代码。

void StartDefaultTask(void *argument)
{
  /* USER CODE BEGIN StartDefaultTask */
  /* Infinite loop */
  for(;;)
  {
    // osDelay(1);
		HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
		HAL_Delay(100);
  }
  /* USER CODE END StartDefaultTask */
}

在这里插入图片描述

配置keil仿真器

(1)配置部分建议直接复制粘贴我的,一旦写错了,会有问题。
DARMSTM.DLL
pSTM32F103C8

在这里插入图片描述

测试结果

(1)打开调试界面

在这里插入图片描述

(2)选择逻辑分析仪,检测PC13引脚。为什么下面输入的是PORTC.13,原因很简单,格式为PORTx.y,x表示端口,y表示具有引脚数值,注意’.'必须是英文的!

在这里插入图片描述
在这里插入图片描述

(3)开始仿真,发现逻辑分析仪上有方波。

在这里插入图片描述

参考

(1)STM32CubeMX环境安装(保姆级);
(2)STM32CubeMX新建工程并点亮一个LED;
(3)STM32滴答定时器SysTick精准延时,兼容HAL库和标准库;
(4)嵌入式裸机设计思想——时间片轮裸机开发架构+状态机+定时器调度机制;

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

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

相关文章

spring-代理模式

代理模式 一、概念1.静态代理2.动态代理 一、概念 ①介绍 二十三种设计模式中的一种&#xff0c;属于结构型模式。它的作用就是通过提供一个代理类&#xff0c;让我们在调用目标 方法的时候&#xff0c;不再是直接对目标方法进行调用&#xff0c;而是通过代理类间接调用。让不…

Centos虚拟机安装配置与MobaXterm工具及Linux常用命令

目录 一、Centos操作系统 1.1 Centos介绍 1.2 Centos虚拟机安装 1.3 配置centos的镜像 1.4 虚拟机开机初始设置 1.4.1 查看网络配置 1.4.2 编辑网络配置 二、MobaXterm工具 2.1 MobaXterm介绍 2.2 MobaXterm安装 2.3 切换国内源 三、Linux常用命令和模式 3.1 …

leetCode 260.只出现一次的数字 ||| + 位运算

260. 只出现一次的数字 III - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 nums&#xff0c;其中恰好有两个元素只出现一次&#xff0c;其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。你必须设计并实现线性时间复杂度的算法且…

微信小程序 人工智能志愿者服务活动报名系统uniAPP+vue

基于java语言设计并实现了人工智能志愿者服务APP。该APP基于B/S即所谓浏览器/服务器模式&#xff0c;应用SpringBoot框架与HBuilder X技术&#xff0c;选择MySQL作为后台数据库。系统主要包括用户、志愿活动、活动报名、活动签到、服务职责、服务排行等功能模块。 本文首先介绍…

C++之回调函数使用和不使用using、typedef、function定义总结(二百五十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

prometheus服务发现

Consul简介 ◼ 一款基于golang开发的开源工具&#xff0c;主要面向分布式&#xff0c;服务化的系统提供服务注册、服务发现和配置管理 的功能 ◼ 提供服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等功能 部署 curl -LO https://releases.hashicorp…

单片机与进制数

目录 一:数字系统的由来 A:二进制 1: 基础概念 2: 二进制运算 3:二进制的计算 B:八进制 1:基础概念 C:16进制表 四:单片机中的进制数 一:数字系统的由来 1:远古时代:结绳计数 2:非位置化数字系统: 罗马数字 非位置化数字系统: 一个符号在不同的位置只会表达同样的意思…

Gitee 发行版

Gitee 发行版 1、Gitee 发行版管理2、项目仓库中创建发行版本3、项目中导入3.1 gradle配置3.2 dependencies执行正常&#xff0c;包没有下载 1、Gitee 发行版管理 Gitee 发行版&#xff08;Release&#xff09;管理 2、项目仓库中创建发行版本 按照Gitee官网操作就行 3、项目…

N-130基于springboot,vue校园社团管理系统

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 系统分前后台&#xff0c;项目采用前后端分离 前端技术&#xff1a;vueelementUI 服务端技术&#xff1a;springbootmybatis-plus 本系…

Linux 下 12 个最佳 Notepad++ 替代品

Notepadd 是一款完全免费的源代码编辑器&#xff0c;旨在替代 Windows 上的记事本 – 基于 Scintilla 用 C 编写&#xff0c;并实现 Win32 API 和 STL&#xff0c;以确保程序尺寸小且执行速度快 – 这些特性使其成为一个家族开发者中的名字。遗憾的是&#xff0c;没有适用于 Li…

Jetpack:021-Jetpack中的滑动列表

文章目录 1. 概念介绍2. 使用方法2.1 函数参数2.2 列表成员 3. 示例代码4. 内容扩展5. 内容总结 我们在上一章回中介绍了Jetpack中底部导航栏相关的内容&#xff0c;本章回中主要介绍 滑动列表。闲话休提&#xff0c;让我们一起Talk Android Jetpack吧&#xff01; 1. 概念介绍…

【Git】HEAD detached from xxx 问题及解决方案

问题背景 最近用git的时候遇到了一个问题&#xff0c;场景是这样的。 我有一个分支main&#xff0c;其中有两个commit A和B&#xff0c;A是最新commit&#xff0c;B是历史commit。我先切到B看了看之前的代码&#xff0c;然后切到A&#xff0c;并进行了一些代码修改&#xff0…

H5游戏源码分享-跑酷游戏熊出没

H5游戏源码分享-跑酷游戏熊出没 <!DOCTYPE html> <html manifest"manifest.mf"><head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8"><meta http-equiv"Content-Type" content"…

一、灵动mm32单片机_开发环境的搭建(Keil)

1、安装Keil MDK。 略。 2、安装芯片对应的Pack包。 (1)这里以MM32F0130单片机为例。 (2)进入灵动微电子官网。上海灵动微电子股份有限公司 (3)点击“支持”→“KEILPacl”。 (3)点击下载Pack包。 (4)下载后&#xff0c;解压下载的压缩包&#xff0c;找到对应的Pack包&…

PostgreSQL InvalidMessage Cache 同步机制

文章目录 背景InvalidMessages 基本类型InvalidMessages 数据结构概览共享内存 的 "ring-buffer" 结构Backend 本地的 InvalidMessages管理SharedInvalCatalogMsgSharedInvalCatcacheMsgSharedInvalRelcacheMsgSharedInvalSnapshotMsgSharedInvalSmgrMsgSharedInvalR…

【C++深入浅出】模版初识

目录 一. 前言 二. 泛型编程 三. 函数模版 3.1 函数模版的概念 3.2 函数模版的格式 3.3 函数模版的原理 3.4 函数模板的实例化 3.5 模板参数的匹配原则 四. 类模版 4.1 类模版的定义 4.2 类模版的实例化 一. 前言 本期我们要介绍的是C的又一大重要功能----模版。通…

DIY相机(一)libcamera库

相机选型 DIY相机首先是要确定使用的相机型号。兼容树莓派&#xff0c;画质好一些的&#xff0c;目前主要有两款&#xff1a;一是Raspberry Pi Camera Module 3&#xff0c;二是Raspberry Pi HQ Camera。 下图是Raspberry Pi Camera Module 3的相关特性。支持自动对焦和HDR等…

opencv dnn模块 示例(20) 目标检测 object_detection 之 yolor

文章目录 1、论文介绍1.1、YOLOR思想动机1.2、隐式知识学习1.2.1、隐式知识如何工作1.2.2、隐式知识统一网络建模 1.3、实验1.4、总结 2、测试2.1、opencv dnn2.1.1、代码2.1.2、结果 2.2、测试效率 YOLOR出自论文You Only Learn One Representation: Unified Network for Mult…

【mfc/VS2022】计图实验:绘图工具设计知识笔记3

实现类对串行化的支持 如果要用CArchive类保存对象的话&#xff0c;那么这个对象的类必须支持串行化。一个可串行化的类通常有一个Serialize成员函数。要想使一个类可串行化&#xff0c;要经历以下5个步骤&#xff1a; 1、从CObject派生类 2、重写Serialize成员函数 3、使用DE…

【计算机网络 】传输层——UDP

目录 传输层传输层概念再谈端口号协议号和端口号端口号区域常见端口号pidof UDPUDP协议格式UDP协议的特点UDP的缓冲区UDP传输数据注意事项 传输层 传输层概念 在学习HTTP等应用层协议时&#xff0c;为了便于理解&#xff0c;可以简单的认为HTTP协议是将请求和响应直接发送到了…