最详细STM32,cubeMX 点亮 led

news2024/11/25 20:27:13

这篇文章将详细介绍 如何在 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。

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

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

相关文章

云上攻防-云原生篇Docker安全权限环境检测容器逃逸特权模式危险挂载

文章目录 前言1、Docker是干嘛的?2、Docker对于渗透测试影响?3、Docker渗透测试点有那些?4、前渗透-判断在Docker中方式一:查询cgroup信息方式二:检查/.dockerenv文件方式三:检查mount信息方式四&#xff1…

NSDT编辑器实现数字孪生

数字孪生的强大功能来自于将真实世界的资产与真实世界的数据联系起来,因此您可以更好地可视化它们。数字孪生使跨职能团队能够以交互式和沉浸式方式协作设计、构建、测试、部署和操作复杂系统。 如何创建数字孪生? 数字孪生是通过导入概念模型&#xf…

C++学习——对象的内存模型

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 对象被创建时会在栈区或者堆区分配内存。我们直观的认识是,如果创建了 10 个对象,就要分别为这 10 个对象的成员变量和成员函数分配内存,如下图所示…

Realm violation Datapatch 禁用DBV database vault

Datapatch failed with the error ORA-47410: Realm violation for CREATE ROLE (Doc ID 2306010.1)​编辑To Bottom APPLIES TO: Oracle Database - Enterprise Edition - Version 12.1.0.2 and later Oracle Database Cloud Schema Service - Version N/A and later Oracle…

使用LLM在KG上进行复杂的逻辑推理10.12+10.13

使用LLM在KG上进行复杂的逻辑推理 摘要介绍相关工作方法问题格式化邻域检索和逻辑链分解链状推理提示实施细节 摘要 在知识图谱上进行推理是一项具有挑战性的任务,这需要深度理解实体之间复杂的关系和它们关系的逻辑。而当前的方法通常依赖于学习 几何形状 以将实体…

5+非肿瘤分析,分型+WGCNA+机器学习筛选相关基因

今天给同学们分享一篇非肿瘤分型机器学习WGCNA实验的生信文章“Identification of diagnostic markers related to oxidative stress and inflammatory response in diabetic kidney disease by machine learning algorithms: Evidence from human transcriptomic data and mou…

C# U2Net Portrait 跨界肖像画

效果 项目 下载 可执行文件exe下载 源码下载

【环境】Ubuntu20.04 安装 Anaconda 顺顺利利

ubuntu里面安装的Anaconda也是顺顺利利 别忘了source source一下 参考链接 中间遇到了一个问题,用下面的链接轻松解决了 关于修改anaconda安装路径的问题

RT-Thread MQTT(学习)

MQTT背景应用 MQTT是机器对机器(M2M)/物联网(IoT)连接协议,英文全名为“Message Queuing Telemetry Transport”,“消息队列遥测传输”协议。它是专为受限设备和低带宽、高延迟或不可靠的网络而设计的&…

基于SpringBoot的社区团购系统

基于SpringBoot的社区团购系统的设计与实现 开发语言:Java数据库:MySQL技术:SpringBootMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 【主要功能】 角色:用户、管理员管理员:登录、个人中心、用户管理、…

【aloam】ubuntu20.04 配置 aloam 环境,编译过程报错及成功解决方法

为什么写这篇博客 ALOAM是slamer的必经之路,official提供的基础环境推荐ubuntu16.04或者18.04,而我用20.04已经有一段时间了,不方便换,但由于其他原因也不得不去配置。过程中出现了几个问题,在这里也就20分钟&#xf…

【网安专题10.11】软件安全+安全代码大模型

软件安全安全代码大模型 写在最前面一些启发科研方法科研思路 课程考察要求软件供应链安全漏洞复制1、代码克隆2、组件依赖分析 关键组件安全不足,漏洞指数级放大供应链投毒内部攻击源代码攻击分发、下载网站攻击更新、补丁网站攻击 形成技术壁垒(找方向…

链表——单链表的简单介绍

前提须知: 顺序表的简单介绍_明 日 香的博客-CSDN博客 顺序表的缺点: 从之前的博客中,我们得知,顺序表的本质实际上是一种数组。而数组的最大特征就是连续的空间。也因此,在线性表中,顺序表是一种物理上…

[每周一更]-(第67期):docker-compose 部署php的laravel项目

容器化部署laravel框架的php项目 操作步骤 参考: https://www.cnblogs.com/jingjingxyk/p/16842937.htmlhttps://developer.aliyun.com/article/708976 0、plv项目修改 composer install.env 修改后台地址 IP:端口chmod -R 777 public / chmod -R 777 storagevi…

ELK下载(Elasticsearch、Logstash、Kibana)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

Simple RPC - 01 框架原理及总体架构初探

文章目录 概述RPC 框架是怎么调用远程服务的?客户端侧的逻辑服务端侧的逻辑完整流程 客户端是如何找到服务端地址的呢?核心:NamingService跨语言的RPC实现原理 RPC 框架的总体结构对外接口服务注册中心如何使用业务服务接口客户端服务端 模块…

【数据结构】:栈的实现

1 栈 1.1栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则 压栈…

Linux实现原理 — I/O 处理流程与优化手段

Linux I/O 接口 Linux I/O 接口可以分为以下几种类型: 文件 I/O 接口:用于对文件进行读写操作的接口,包括 open()、read()、write()、close()、lseek() 等。 网络 I/O 接口:用于网络通信的接口,包括 socket()、conne…

多目标鳟海鞘算法(Multi-objective Salp Swarm Algorithm,MSSA)求解微电网优化MATLAB

一、微网系统运行优化模型 微电网优化模型介绍: 微电网多目标优化调度模型简介_IT猿手的博客-CSDN博客 参考文献: [1]李兴莘,张靖,何宇,等.基于改进粒子群算法的微电网多目标优化调度[J].电力科学与工程, 2021, 37(3):7 二、多目标鳟海鞘算法MSSA 多…

Go持续改进与代码审查

通过Golang提高软件质量 在快节奏的软件开发世界中,保持领先至关重要。在实现软件工程卓越的基石之一是持续改进的实践,而在这个旅程中的一个关键工具是代码审查过程。在本文中,我们将深入探讨持续改进的重要性,并探讨代码审查在…