当前位置: 首页 > news >正文

最详细STM32,cubeMX 点亮 led

这篇文章将详细介绍 如何在 stm32103 板子上点亮一个LED.

文章目录

  • 前言
  • 一、开发环境搭建。
  • 二、LED 原理图解读
  • 三、什么是 GPIO
  • 四、cubeMX 配置工程
  • 五、解读 cubeMX 生成的代码
  • 六、延时函数
  • 七、控制引脚状态函数
      • 点亮 LED
  • 八、GPIO 的工作模式
  • 九、为什么使用推挽输出驱动 LED
  • 总结


前言

  • 实验开发板:STM32F103C8T6。
  • 所需软件:keil5 , cubeMX 。
  • 实验目的:了解 led 点亮原理,cubeMX配置 , GPIO 等相关函数 。

一、开发环境搭建。

  1. 代码编写软件 : MDK keil5 。
  2. 图形化配置软件 :STM32cubeMX。
  3. 仿真器驱动 : STLINK 。
  4. 串口驱动 :CH340 。

对于以上软件的安装可以参考 : 最详细 keil5 和 cubeMX安装教程

二、LED 原理图解读

在这里插入图片描述
芯片的原理图如上图,可以看到控制 LED1 的引脚是 PB4
在这里插入图片描述
灯 D1 的 右边接在 VCC 电源上,如果 想要点亮 led , 需要将 led 的左侧 GPIO 引脚 PB4 设置为 低电平即可。那么该图是 低电平控制 led

  • 高电平:通常表示逻辑1,可以是与电源电压相对应的电压(例如3.3V或5V)。
  • 低电平:通常表示逻辑0,可以是与地电压(0V)相对应的电压。

三、什么是 GPIO

GPIO ,全称为通用输入输出(General-Purpose Input/Output ),是 连接外部设备的通用接口。用于与外部设备进行数字信号的输入和输出。它在嵌入式系统、单片机、单板计算机等领域都有广泛的应用,使数字系统能够与外部世界互动和通信。

  1. 输入:
    GPIO 可以用于接受外部设备发送的数字信号,如 按钮的状态,传感器数据。获取外部数据或事件。

  2. 输出:
    GPIO 可以用于向外部设备发送数字信号,如控制 LED, 继电器,电机等。 操作和控制外部设备。

四、cubeMX 配置工程

  1. 首先创建工程。
    在这里插入图片描述
  2. 选择芯片,开始创建工程。
    在这里插入图片描述
  3. 设置 SYS 模块,选择串行线。
    在这里插入图片描述
  4. 选择晶体共振。
    在这里插入图片描述
  5. 将 PB4 引脚设置为 gpio 输出口。
    在这里插入图片描述
  6. 设置时钟频率。
    直接设置为 最大频率 72 ,然后双击 enter 即可。
    在这里插入图片描述
  7. 设置工程的名字,工具链选择 MDK。
    在这里插入图片描述
  8. 点击自动生成 .c / .h 文件。
    . 在这里插入图片描述
  9. 点击生成即可。
    这样就可以生成 keil 的工程文件。
    在这里插入图片描述

五、解读 cubeMX 生成的代码

cubeMX 会自动生成 GPIO 初始化的代码。
在这里插入图片描述
代码解析

  1. 首先创建一个 GPIO 变量。
GPIO_InitTypeDef GPIO_InitStruct = {0};
  1. GPIO 引脚的使能。
    可以看到这里分别使能了 GPIOA , GPIOB , GPIOD 端口。
  __HAL_RCC_GPIOD_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();
  1. 设置 GPIO 中PB4 引脚的输出电平。
    这里设置的是输出低电平 GPIO_PIN_RESET。
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_RESET);
  1. 设置 GPIO 端口的引脚号,模式,上拉电阻,速度。
  GPIO_InitStruct.Pin = GPIO_PIN_4;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;  
  1. 初始化引脚设置。
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

六、延时函数

__weak void HAL_Delay(uint32_t Delay);

uint32_t Delay :表示要延时时间,以毫秒(ms)为单位。这是一个无符号的 32 位整数。
__weak :是一个弱符号。

七、控制引脚状态函数

  1. GPIO 写函数:
    用于设置指定 GPIO 引脚输出状态。
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState
PinState);

参数解释

  • GPIOx : 这是一个指向 GPIO_TypeDef 结构体的指针,指定了要控制的GPIO端口,例如GPIOA、GPIOB等。

  • GPIO_Pin : 这是一个16位的整数,指定要设置的特定引脚。可以使用宏定义来指定要控制的引脚,例如GPIO_PIN_0,GPIO_PIN_1,GPIO_PIN_2等。

  • PinState : 这是一个枚举类型 GPIO_PinState,用于指定要写入的引脚状态。它有两个可能的值:GPIO_PIN_RESET和GPIO_PIN_SET,分别代表引脚输出低电平和高电平。

  1. GPIO 翻转函数:
    这里的函数参数 和 写函数的参数大致相同,可以参考 HAL_GPIO_WritePin 函数 。
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);

点亮 LED

在 工程的 while 函数中使用 写函数 HAL_GPIO_WritePin 点亮 LED.

tips:
可以讲代码写在 BEGIN 和 END 之间,这样当我们重新生成代码时 就不会造成代码销毁。
在这里插入图片描述

八、GPIO 的工作模式

GPIO的8种工作模式:

  1. 输入模式(Input Mode):GPIO引脚被配置为输入模式时,它可以接收外部设备发送的信号。引
    脚可以检测输入信号的高电平或低电平,并将其转换为数字值供系统使用。
  2. 输出模式(Output Mode):GPIO引脚被配置为输出模式时,它可以向外部设备发送信号。系统
    可以控制引脚输出的高电平或低电平,从而控制外部设备的行为。
  3. 推挽输出模式(Push-Pull Output Mode):在推挽输出模式下,GPIO输出引脚可以提供强驱动
    电平。引脚在高电平和低电平之间切换,可以提供较低的输出电阻,适合驱动较重的负载。
  4. 开漏输出模式(Open-Drain Output Mode):在开漏输出模式下,GPIO输出引脚变为开漏输
    出。引脚在低电平时为接地(GND)连接,而在高电平时处于高阻态。这种模式适合与其他开漏设
    备或外部上拉电阻结合使用。
  5. 复用输入模式(Alternate Function Input Mode):GPIO引脚可以配置为复用输入模式,用于
    接收外部信号并执行特定功能。在此模式下,引脚还可以用于其他功能,例如定时器输入或串行通
    信接口。
  6. 复用输出模式(Alternate Function Output Mode):GPIO引脚可以配置为复用输出模式,用
    于将特定功能的输出信号发送到外部设备。在此模式下,引脚还可以用于其他功能,例如PWM输
    出或串行通信接口。
  7. 模拟模式(Analog Mode):有些GPIO引脚支持模拟模式,可以用于连接模拟电路,例如传感器
    或音频设备。在模拟模式下,引脚可以输入或输出连续的模拟电信号。
  8. 中断模式(Interrupt Mode):GPIO引脚可以配置为中断模式,以便在引脚状态发生变化时触发中断。这允许系统在无需不断轮询GPIO状态的情况下,对引脚的变化进行响应。

九、为什么使用推挽输出驱动 LED

  1. 推挽输出可以提供稳定的高电平和低电平。
  2. 能够提供较高的输出电流能力。
  3. 可以连接到 LED,为不需要外部的电流限制电阻。
  4. 适用于数字信号的控制。

总结

下一篇文章将继续为大家介绍 STM32F103C8T6 使用 cubeMX 通过 按键 点亮 led。

相关文章:

最详细STM32,cubeMX 点亮 led

这篇文章将详细介绍 如何在 stm32103 板子上点亮一个LED. 文章目录 前言一、开发环境搭建。二、LED 原理图解读三、什么是 GPIO四、cubeMX 配置工程五、解读 cubeMX 生成的代码六、延时函数七、控制引脚状态函数点亮 LED 八、GPIO 的工作模式九、为什么使用推挽输出驱动 LED总结…...

论文阅读:Image-to-Lidar Self-Supervised Distillation for Autonomous Driving Data

目录 摘要 Motivation 整体架构流程 技术细节 雷达和图像数据的同步 小结 论文地址: [2203.16258] Image-to-Lidar Self-Supervised Distillation for Autonomous Driving Data (arxiv.org) 论文代码:GitHub - valeoai/SLidR: Official PyTorch implementati…...

前端版本控制工具,常见的Git 和SVN

目录 前言GitGit简介Git的优势Git常用指令常见的Git服务 SVN (Subversion)SVN简介SVN的优势SVN常用指令SVN与Git的区别 👍 点赞,你的认可是我创作的动力! ⭐️ 收藏,你的青睐是我努力的方向! ✏️ 评论,你…...

C++ —— Tinyxml2在Vs2017下相关使用2(较文1更复杂,附源码)

相关链接 C —— Tinyxml2在Vs2017下相关使用1(附源码) tinyxml2简介 TinyXML2是一个简单,小巧,高效,CXML解析器,可以很容易地集成到其他程序中。TinyXML-2解析一个XML文档,并从中构建一个 可以…...

阿里内推强推的并发编程学习笔记,原理+实战+面试题,面面俱到!

并发编程 谈到并发编程,可能很多人都有过经验,甚至比我了解的更多。 那么并发与并行的区别又是什么? 并发编程是编程中的核心问题,实践中,当人们希望利用计算机处理一些现实世界问题,以及希望同时处理多…...

域名注册查询流程

域名注册查询怎么查域名是否被注册?域名注册查询如何查域名的过期时间和注册商?域名注册查询用什么工具?下面是关于域名注册查询流程介绍。 1、域名注册查询可以用什么工具? 这里可以使用聚查工具,聚查包括:whois 查询、建站历史查询、反链查询、P…...

【Linux学习笔记】代码编辑工具vim

1. vim工具基本模式的转换2. vim命令模式下的各种编辑命令2.1. 光标行定位2.2. 光标自由定位2.3. 复制粘贴2.4. 删除2.5. 文本的大小写替换2.6. 文本的替换2.7. 文本的前删后删2.8. 撤销操作 3. vim底行模式下的命令3.1. 设置行号与取消设置行号3.2. 分屏操作3.3. 在不退出vim的…...

Android Boring SSL

前期设置 SSLContext.getInstance(“TLS”)SSLContext.init()SSLContext.getSocketFactory()SSLSocketFactory.createSocket()NativeSsl.newInstance()BioWrapper 的创建ConscryptEngineSocket.startHandshake() TLS协商 state_start_connect(TLS)state_enter_early_data(TLS)s…...

中国人民大学与加拿大女王大学金融硕士项目:开启你的金融精英之路

在全球化的今天,金融行业的发展日新月异,对金融人才的需求也日益增长。为了满足这一需求,中国人民大学与加拿大女王大学联合推出了金融硕士项目,旨在培养具有国际视野、专业素养和创新能力的金融精英。 这一开创性的项目将两大世…...

HashSet编程小案例,控制生日和姓名。重写HashCode

Java编程: 定义员工Employee类,该类包含:private成员属性name,sal,birthday(MyDate类型), 其中birthday为MyDate类型(属性包括:year,month,day), 要求&…...

虚幻阴影整理

虚拟阴影贴图(VSM)是一种全新的阴影贴图方法,可以提供稳定的高分辨率阴影。通过与虚幻引擎5的Nanite虚拟几何体、Lumen全局光照和反射以及世界分区功能结合使用,它能够实现电影级的品质效果,为大型开放场景提供光照。 …...

MySQL数据库(一)

数据库 —— 基础 1. 数据库 DataBase 数据库管理系统 2. SQL语言2.1 DDL数据定义语言2.1.1 数据库基础操作2.1.2 数据表基础操作2.1.3 字段基础操作 2.2 DML表记录管理2.2.1 插入数据INSERT2.2.2 更新数据UPDATE2.2.3 删除数据DELETE 3. SQL数据类型3.1 数值类型3.1.1 整数类型…...

C++11 新特性

C11 新特性 C11 新特性统一的列表初始化声明auto 关键字decltype 关键字nullptr 关键字 关键字 using使用 using 在子类中引用基类的成员使用 using 关键字定义类型别名 范围-based for 循环右值引用和移动语义左值引用和右值引用右值引用使用场景和意义完美转发 lambda表达式移…...

排查手机应用app微信登录问题不跳转失败原因汇总及其解决方案

经过最近我发的文章,我个人觉得解决了不少小问题,因为最近很小白的问题已经没有人私聊问我了,我总结了一下排查手机应用app微信登录问题不跳转失败的原因汇总及其解决方案在这篇文章中,分析微信登录不跳转的原因,并提供解决方案。希望通过这篇文章,能够帮助大家顺利解决这…...

软考高级系统架构设计师系列之:数学与经济管理

软考高级系统架构设计师系列之:数学与经济管理 一、数学与经济管理二、图论应用-最小生成树三、图论应用-最短路径四、图论应用-网络与最大流量五、运筹方法-线性规划六、运筹方法-动态规划七、运筹方法-转移矩阵八、运筹方法-排队论九、运筹方法-决策-不确定决策十、运筹方法…...

基于Scrapyd与Gerapy部署scrapy爬虫方案【可用于分布式爬虫部署】

scrapyd部署爬虫 Scrapyd 是一个基于 Scrapy 的开源项目,它提供了一个简单的方式来部署、运行和监控 Scrapy 爬虫。它是一个用于集成 Scrapy 爬虫到分布式架构中的工具,允许您在分布式环境中运行爬虫,并提供了一组 Web API,用于管…...

ST-SSL:基于自监督学习的交通流预测模型

文章信息 文章题为“Spatio-Temporal Self-Supervised Learning for Traffic Flow Prediction”,是一篇发表于The Thirty-Seventh AAAI Conference on Artificial Intelligence (AAAI-23)的一篇论文。该论文主要针对交通流预测任务,结合自监督学习&#…...

如何处理C++中的字符串编码和国际化?

在C中处理字符串编码和国际化的常用方式如下: 字符串编码: 使用UTF-8编码:UTF-8是一种可变字节长度的编码方式,广泛用于表示 Unicode 字符。C中的字符串类型std::string默认使用的是UTF-8编码。可以通过使用宽字符类型std::wstrin…...

DH48WK 温控器参数设置

北京东昊力伟科技有限责任公司 温控仪、温度控制器 产品特点: 可外接温度传感器Pt100、Cu50、K、E、J、N、T、R、S、B兼容输入;PID控制输出、位式控制输出、继电器报警输出;控温能满足设定温度值的0.2℃;既可用于加热控制、也可…...

【文档智能】多模态预训练模型及相关数据集汇总

前言 大模型时代,在现实场景中或者企业私域数据中,大多数数据都以文档的形式存在,如何更好的解析获取文档数据显得尤为重要。文档智能也从以前的目标检测(版面分析)阶段转向多模态预训练阶段,本文将介绍目…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 ​ 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

<6>-MySQL表的增删查改

目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表&#xf…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

SQL Server 触发器调用存储过程实现发送 HTTP 请求

文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...

rknn toolkit2搭建和推理

安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 &#xff0c;不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源&#xff08;最常用&#xff09; conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...