STM32 proteus + STM32Cubemx仿真教程(第一课LED教程)
文章目录
- 前言
- 一、STM32点亮LED灯的原理
- 1.1GPIO是什么
- 1.2点亮LED灯的原理
- 二、STM32Cubemx创建工程
- 三、proteus仿真电路图
- 四、程序代码编写
- 1.LED灯操作函数介绍
- HAL_GPIO_WritePin
- 函数原型
- 参数说明
- 示例代码
- HAL_GPIO_TogglePin
- 函数原型
- 参数说明
- 示例代码
- 2.代码编写
- 3.烧写程序
- 总结
前言
本篇文章开始带大家学习如何使用proteus和STM32Cubemx来完成STM32的学习,第一节课我们先来学习点亮LED灯。
proteus使用8.9版本。
STM32Cubemx使用6.3版本。
一、STM32点亮LED灯的原理
1.1GPIO是什么
GPIO(General-Purpose Input/Output,即通用输入输出)是微控制器上的一种通用引脚。GPIO引脚可以配置为输入或输出模式,用来读取外部信号(如按钮按下的状态)或控制外部设备(如点亮LED灯)。GPIO是微控制器与外部世界交互的重要接口,广泛应用于嵌入式系统中。
GPIO的基本功能
输入模式:引脚可以读取外部设备的状态,例如开关、按钮等。
输出模式:引脚可以输出高电平或低电平信号,用来控制外部设备,例如LED灯、继电器等。
中断功能:某些GPIO引脚可以配置为中断模式,当引脚状态发生变化时触发中断。
复用功能:有些GPIO引脚可以复用为其他外设功能,例如UART、SPI、I2C等。
1.2点亮LED灯的原理
1.配置GPIO引脚
首先,需要将微控制器的某个GPIO引脚配置为输出模式。以STM32为例,通常需要以下步骤:
使能GPIO时钟:在配置GPIO之前,需要使能对应的GPIO端口时钟。例如,使用GPIOA端口时,需要使能GPIOA的时钟。
配置引脚模式:将对应引脚配置为输出模式。
配置引脚类型和速度:可以选择推挽输出或开漏输出,并设置输出速度(低速、中速、高速)。
2.控制GPIO引脚输出
配置好GPIO引脚后,可以通过控制引脚的电平来点亮或熄灭LED灯。LED灯通常连接在GPIO引脚与地之间(阳极接GPIO引脚,阴极接地),或者GPIO引脚与Vcc之间(阴极接GPIO引脚,阳极接Vcc)。
点亮LED:将GPIO引脚输出低电平(0V),电流从Vcc流经LED到地,LED点亮。
熄灭LED:将GPIO引脚输出高电平(3.3V或5V),LED两端电压相同,无电流流过,LED熄灭。
3.完整流程
使能时钟:启用GPIO端口的时钟。
初始化引脚:配置GPIO引脚为输出模式。
控制电平:通过设置引脚的高低电平来控制LED灯的点亮与熄灭。
二、STM32Cubemx创建工程
1.选择芯片型号:
2.配置Debug:
3.配置时钟
4.设置时钟树
输入72双击回车即可。
5.工程配置
6.选择一个引脚作为输出引脚,用于点亮LED灯
三、proteus仿真电路图
1.创建工程
2.添加对应的元器件
3.元器件放置
这里还需要注意电阻值的大小,电阻假如太大的可能会导致LED灯无法被点亮。
4.STM32时钟主频设置
这里设置成72MHZ和STM32Cubemx中设置的保持一致
5.提供配电网
四、程序代码编写
1.LED灯操作函数介绍
在STM32 HAL库中,HAL_GPIO_WritePin
和HAL_GPIO_TogglePin
是两个常用的GPIO控制函数。下面详细讲解它们的功能和使用方法。
HAL_GPIO_WritePin
HAL_GPIO_WritePin
函数用于设置指定GPIO引脚的电平状态。这个函数可以将GPIO引脚设置为高电平或低电平,以控制连接到该引脚的外部设备(如LED灯)。
函数原型
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
参数说明
GPIOx
: 指定GPIO端口基地址,具体可以是GPIOA
,GPIOB
,GPIOC
等。GPIO_Pin
: 指定GPIO引脚,使用宏定义,如GPIO_PIN_0
,GPIO_PIN_1
等。可以通过按位或运算指定多个引脚,例如GPIO_PIN_0 | GPIO_PIN_1
。PinState
: 指定引脚状态,可以是以下值之一:GPIO_PIN_RESET
(低电平)GPIO_PIN_SET
(高电平)
示例代码
// 将GPIOA的第5个引脚设置为低电平
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);// 将GPIOA的第5个引脚设置为高电平
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
HAL_GPIO_TogglePin
HAL_GPIO_TogglePin
函数用于切换指定GPIO引脚的电平状态。如果引脚当前是高电平,则切换为低电平;如果引脚当前是低电平,则切换为高电平。这个函数常用于控制需要反复切换状态的设备,例如闪烁的LED灯。
函数原型
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
参数说明
GPIOx
: 指定GPIO端口基地址,具体可以是GPIOA
,GPIOB
,GPIOC
等。GPIO_Pin
: 指定GPIO引脚,使用宏定义,如GPIO_PIN_0
,GPIO_PIN_1
等。可以通过按位或运算指定多个引脚,例如GPIO_PIN_0 | GPIO_PIN_1
。
示例代码
// 切换GPIOA的第5个引脚的电平状态
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
2.代码编写
3.烧写程序
将对应的hex文件选择进去。
运行程序
LED灯被点亮:
总结
本篇文章就讲解到这里,大家有什么疑问都可以留言。
本篇文章代码和工程将放在微信公众号中。
回复 STM32仿真LED
即可领取源码和工程。
相关文章:

STM32 proteus + STM32Cubemx仿真教程(第一课LED教程)
文章目录 前言一、STM32点亮LED灯的原理1.1GPIO是什么1.2点亮LED灯的原理 二、STM32Cubemx创建工程三、proteus仿真电路图四、程序代码编写1.LED灯操作函数介绍HAL_GPIO_WritePin函数原型参数说明示例代码 HAL_GPIO_TogglePin函数原型参数说明示例代码 2.代码编写3.烧写程序 总…...
享元模式
前言 享元模式:运用共享技术有效地支持大量细粒度的对象。 在享元对象内部并且不会随环境改变而改变的共享部分,可以称为是享元对象的内部状态,而随环境改变而改变的、不可以共享的状态就是外部状态了。事实上,享元模式可以避免大…...

R语言数据分析16-针对芬兰污染指数的分析与考察
1. 研究背景及意义 近年来,随着我国科技和经济高速发展,人们生活质量也随之显著提高。但是, 环境污染问题也日趋严重,给人们的生活质量和社会生产的各个方面都造成了许多不 利的影响。空气污染作为环境污染主要方面,更…...
Search用法Python:深入探索搜索功能的应用与技巧
Search用法Python:深入探索搜索功能的应用与技巧 在Python编程中,搜索功能是一项至关重要的技能,它能够帮助我们快速定位并处理数据。然而,对于初学者来说,如何高效地使用搜索功能可能会带来一些困惑。本文将从四个方…...

STM32的FreeRtos的学习
首先就是去官网下载一个源文件:FreeRtos官网 下载下来的是一个zip文件,解压缩了。 然后再工程文件夹中创建个文件夹: 在这个文件夹中创建3个文件夹: 然后开始把下载下来的文件夹中的文件挑选出来放到我们的工程文件夹中࿱…...

从零入手人工智能(2)——搭建开发环境
1.前言 作为一名单片机工程师,想要转型到人工智能开发领域的道路确实充满了挑战与未知。记得当我刚开始这段旅程时,心中充满了迷茫和困惑。面对全新的领域,我既不清楚如何入手,也不知道能用人工智能干什么。正是这些迷茫和困惑&a…...

Web前端指南
前言 前端开发员主要负责网站的设计、外观和感觉。他们设计引人入胜的在线用户体验,激发用户兴趣,鼓励用户重复访问。他们与设计师密切合作,使网站美观、实用、快捷。 如果您喜欢创造性思维、打造更好的体验并对视觉设计感兴趣,这将是您的理想职业道路。 探讨前端、后端以…...

AI菜鸟向前飞 — LangChain系列之十七 - 剖析AgentExecutor
AgentExecutor 顾名思义,Agent执行器,本篇先简单看看LangChain是如何实现的。 先回顾 AI菜鸟向前飞 — LangChain系列之十四 - Agent系列:从现象看机制(上篇) AI菜鸟向前飞 — LangChain系列之十五 - Agent系列&#…...
nodejs 第三方库 exiftool-vendored
exiftool-vendored 是一款可以帮助你快捷修改图片信息的第三方库。如果你想要批量修改图片信息的话,那么它是一个不错的选择。 1.导入第三方库 在控制台中执行下面代码即可。 npm install exiftool-vendored --save2.获取信息 这里给出例子。 const { exiftool …...

docker部署redis实践
1.拉取redis镜像 # 拉取镜像 sudo docker pull redis2.创建映射持久化目录 # 创建目录 sudo mkdir -p $PWD/redis/{conf,data}3. 运行redis 容器,查看当前redis 版本号 # 运行 sudo docker run --name redis -d -p 6379:6379 redis # 查看版本号 sudo docker ex…...
Web前端学习之路:深入探索学习时长与技能进阶的奥秘
Web前端学习之路:深入探索学习时长与技能进阶的奥秘 在数字化时代,Web前端技术成为了连接用户与互联网世界的桥梁。对于初学者来说,学习Web前端究竟需要多久,以及如何高效掌握相关技能,一直是困扰他们的难题。本文将从…...
如何不用命令创建用户
都有哪些操作: 1、在/etc/passwd添加一行 2、在/etc/shadow添加一行 3、在/etc/group添加一行 4、创建用户家目录 5、创建用户邮件文件 例如: 创建用户jerry 要求: uid:777 主组:hadoop(800)…...
基于Python实现可视化分析中国500强排行榜数据的设计与实现
基于Python实现可视化分析中国500强排行榜数据的设计与实现 “Design and Implementation of Visual Analysis for China’s Top 500 Companies Ranking Data using Python” 完整下载链接:基于Python实现可视化分析中国500强排行榜数据的设计与实现 文章目录 基于Python实现…...

VUE3 学习笔记(13):VUE3 下的Element-Plus基本使用
UI是页面的门面,一个好的UI自然令人赏心悦目;国人团队开发的ElementUI在众多UI中较为常见,因此通过介绍它的使用让大家更好的了解第三方UI的使用。 安装 Npm install element-plus --save 或 Cnpm install element-plus --save 配置 全局配置…...
MySql数据库安全加固
设置密码复杂度策略 查看密码策略 SHOW VARIABLES LIKE validate_password%; 设置密码策略 INSTALL PLUGIN validate_password SONAME validate_password.so; 设置登陆失败策略 安装插件(谨慎操作,可能会导致数据库卡死) install plug…...

Nginx(title小图标)修改方法
本章主要讲述Nginx如何上传网站图标。 操作系统: CentOS Stream 9 首先我们bing搜索ico网站图标在线设计,找到喜欢的设计分格并下载。 是一个压缩包 然后我们上传到nginx解压 [rootlocalhost html]# rz[rootlocalhost html]# unzip favicon_logosc.z…...

iOS 17.5中的一个漏洞
i0S 17.5中的一个漏洞 iOS 17.5中的一个漏洞会使已刚除的照片重新出现,并目此问题似乎会影响甚至已擦除并出售给他人的 iPhone 和 iPad. 在2023年9月,一位Reddit用户根据Apple的指南擦除了他的iPad,并将其卖给了一位朋友。然而,这…...

如何在 iPhone 上恢复已删除的短信
本文介绍如何检索已删除的短信和 iMessage 以及恢复丢失的消息。说明适用于 iOS 17 及更高版本。 如何在 iOS 17及更高版本中恢复文本 恢复已删除短信的最简单方法是使用 iOS 17。从删除短信到恢复它有 30 到 40 天的时间。 在“信息”的对话屏幕中,选择“过滤器”…...
矩阵练习1
73.矩阵置零 这道题相对简单。 首先我们需要标记需要置零的行和列,可以在遍历矩阵中的元素遇到0,则将其行首和列首元素置为0。在此过程中首行、首列会受影响,因此先用两个变量记录首行、首列是否需要被置0,接着遍历非首行、非首…...

【C++ | 拷贝赋值运算符函数】一文了解C++的 拷贝赋值运算符函数
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰:2024-06-09 1…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...