【嵌入式学习笔记】嵌入式入门1——GPIO

news2024/9/20 0:57:39

1.什么是GPIO

General Purpose Input Output,即通用输入输出端口,简称GPIO,作用是负责采集外部器件的信息或者控制外部器件工作,即输入输出。
在这里插入图片描述

2.STM32 GPIO简介

2.1.GPIO特点

  • 不同型号,IO口数量可能不一样,可通过选型手册快速查询
  • 快速翻转,每次翻转最快只需要两个时钟周期(F1最高速度可以到50Mhz)
  • 每个IO口都可以做中断
  • 支持8种工作模式

2.2.GPIO电气特性

  • STM32工作电压范围——2 V ≤ VDD ≤ 3.6 V

  • GPIO识别电压范围——COMS端口-0.3V ≤ VIL ≤ 1.164V,1.833V ≤ VIH ≤ 3.6V,部分兼容TTL

  • GPIO输出电流——单个IO,最大25mA

详情参考STM32的数据手册

2.3.GPIO引脚分布

STM32引脚类型:电源引脚、晶振引脚、复位引脚、下载引脚、BOOT引脚、GPIO引脚

在这里插入图片描述
在这里插入图片描述
IO引脚分布特点:按组存在、组数视芯片而定、每组最多16个IO引脚

3.IO端口基本结构介绍

  • F1系列IO端口基本结构
    ① 保护二极管
    ② 内部上拉、下拉电阻
    ③ 施密特触发器
    ④ P-MOS & N-MOS管
    在这里插入图片描述

  • F4/F7/H7系列IO端口基本结构
    在这里插入图片描述

  • 施密特触发器:施密特触发器就是一种整形电路,可以将非标准方波,整形成方波
    在这里插入图片描述

  • P-MOS & N-MOS管:MOS管是压控型元件,通过控制栅源电压( Vgs )来实现导通或关闭
    在这里插入图片描述

4.GPIO的八种模式分析

模式特点及应用
浮空输入输入用,完全浮空,状态不定
上拉输入输入用,用内部上拉,默认是高电平
下拉输入输入用,用内部下拉,默认是低电平
模拟功能ADC、DAC
开漏输出软件IIC的SDA、SCL等
推挽输出驱动能力强,25mA(max),通用输出
开漏复用片上外设功能(硬件IIC 的SDA、SCL引脚等)
推挽复用片上外设功能(SPI 的SCK、MISO、MOSI引脚等

4.1.浮空输入

在这里插入图片描述

4.2.上拉输入

在这里插入图片描述

4.3.下拉输入

在这里插入图片描述

4.4.模拟功能

在这里插入图片描述

4.5.开漏输出

在这里插入图片描述

4.6.推挽输出

在这里插入图片描述

4.7.开漏复用

在这里插入图片描述

4.8.推挽复用

在这里插入图片描述

4.9.F4/F7/H7系列和F1系列的GPIO差异点

  • F1在输出模式,禁止使用内部上下拉,F4/F7/H7在输出模式,可以使用内部上下拉
  • 不同系列IO翻转速度可能不同

【STM32能输出5V的电平吗?——可以,兼容5V的引脚可以】

5.GPIO寄存器介绍

在F1系列和F4/F7/F7系列的GPIO中,选择GPIO模式的寄存器不同,控制输入输出的寄存器相同
在这里插入图片描述

5.1.F1/F4/F7/H7相同GPIO寄存器

  • 端口输入数据寄存器IDR——用于判断IO引脚的电平
    在这里插入图片描述
  • 端口输出数据寄存器ODR——用于设置IO引脚输出的电平
    在这里插入图片描述
  • 端口位设置/清除寄存器BSRR——用于设置ODR寄存器
    在这里插入图片描述

5.2.F1系列特有GPIO寄存器

  • 端口配置低/高寄存器CRL/CRH——设置工作模式、输出速度
    在这里插入图片描述

5.3.F4/F7/H7系列特有GPIO寄存器

  • GPIO 端口模式寄存器MODER——用于设置模式
    在这里插入图片描述
  • GPIO 端口输出类型寄存器OTYPER——用于设置输出类型
    在这里插入图片描述
  • GPIO 端口输出速度寄存器OSPEEDR——用于设置IO的输出速度
    在这里插入图片描述
  • GPIO 端口上拉/下拉寄存器(PUPDR)用于设置上拉/下拉电阻
    在这里插入图片描述

5.4.F1系列与F4/F7/H7系列工作模式配置

  • F1系列
    输入上拉/下拉电阻通过ODR寄存器来设置
    在这里插入图片描述
  • F4/F7/H7系列
    在这里插入图片描述

5.5.ODR和BSRR寄存器控制输出的区别

ST官方给的答案:使用ODR,在读和修改访问之间产生中断时,可能会发生风险;BSRR无风险。建议使用BSRR控制输出

ODR修改:读->->写
GPIOB->ODR |= 1 << 3;         	/* PB3 = 1 */
BSRR修改:写 
GPIOB->BSRR = 0x00000008;      	/* PB3 = 1 */

6.通用外设驱动模型(四步法)

在这里插入图片描述

7.GPIO配置步骤

  • 使能时钟 __HAL_RCC_GPIOx_CLK_ENABLE()

  • 设置工作模式 HAL_GPIO_Init()

  • 设置输出状态(可选) HAL_GPIO_WritePin() 、HAL_GPIO_TogglePin()

  • 读取输入状态(可选) HAL_GPIO_ReadPin()
    在这里插入图片描述

  • 关键结构体

// F1
typedef struct 
{ 
  uint32_t Pin;        	/* 引脚号 */ 
  uint32_t Mode;   		/* 模式设置 */ 
  uint32_t Pull;       	/* 上拉下拉设置 */ 
  uint32_t Speed;  		/* 速度设置 */ 
} GPIO_InitTypeDef;
// F4/F7/H7
typedef struct 
{ 
  uint32_t Pin;    		/* 引脚号 */ 
  uint32_t Mode;        /* 模式设置 */ 
  uint32_t Pull;        /* 上拉下拉设置 */ 
  uint32_t Speed;       /* 速度设置 */
  uint32_t Alternate; 	/* 复用功能 */
} GPIO_InitTypeDef;

8.编程实战:点亮一个LED灯/跑马灯

分析IO输出模式——推挽输出
在这里插入图片描述

9.编程实战:通过一个按键控制一个LED灯亮灭

在这里插入图片描述
在这里插入图片描述
【编程实战代码暂不贴出】

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

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

相关文章

企业如何在线编写一份优秀的产品说明文档?

编写一份优秀的产品说明文档对于企业来说非常重要&#xff0c;它可以帮助用户理解产品的功能、使用方法和优势&#xff0c;提高用户体验和满意度。下面是一些关键的步骤和建议&#xff0c;帮助企业在线编写一份优秀的产品说明文档。 一、明确目标受众 在编写产品说明文档之前…

搞活系列-Java NIO之偏偏不用buffer.flip()会出现什么问题?

最近看博客又看到了Java NIO相关的博客&#xff0c;其中有讲解NIO和传统IO关于文件复制的文章&#xff0c;看到了如下的代码&#xff1a; /**** channel用例* 基于channel的文件复制*/Testpublic void fileCopyByChannel(){try {FileInputStream fileInputStream new FileInpu…

MyBatis小记_one

目录 什么是框架 1.框架的概述 2.框架要解决的问题 3. 软件开发的分层重要性 4.分层开发的常见框架 MyBatis 框架概述 JDBC 编程的回顾 JDBC 问题分析 MyBatis 框架快速入门 1.官网下载MyBatis框架jar包 2.搭建MyBatis 开发环境 3. 编写持久层接口的映射文件 IUserD…

Stable Diffusion 使用教程

环境说明&#xff1a; stable diffusion version: v1.5.1python: 3.10.6torch: 2.0.1cu118xformers: N/Agradio: 3.32.0 1. 下载 webui 下载地址&#xff1a; GitHub stable-diffusion-webui 下载 根据自己的情况去下载&#xff1a; 最好是 N 卡&#xff1a;&#xff08;我的…

计数排序算法

计数排序 计数排序说明&#xff1a; 计数排序&#xff08;Counting Sort&#xff09;是一种非比较性的排序算法&#xff0c;它通过统计元素出现的次数&#xff0c;然后根据元素出现的次数将元素排列在正确的位置上&#xff0c;从而实现排序。计数排序适用于非负整数或者具有确…

使用vue creat搭建项目

一、查看是否安装node和npm&#xff08;显示版本号说明安装成功&#xff09; node -v npm -v 显示版本号说明安装成功&#xff0c;如果没有安装&#xff0c;则需要先安装。 二、安装vue-cli脚手架 查看安装的版本&#xff08;显示版本号说明安装成功&#xff09; vue -V 三…

纯JS+Vue实现一个仪表盘

在使用canvas的时候发现数值变化&#xff0c;每次都要重新渲染&#xff0c;值都从0开始&#xff0c;这和我的需求冲突。 1. 先绘制基本的圆环背景&#xff0c;利用border-color和border-radius将正方形变成基本的圆环。 <div class"circle"><div class&qu…

使用toad对数据进行分箱处理

Toad 是专为工业界模型开发设计的Python工具包&#xff0c;特别针对评分卡的开发。Toad 的功能覆盖了建模全流程&#xff0c;从 EDA、特征工程、特征筛选到模型验证和评分卡转化。Toad 的主要功能极大简化了建模中最重要最费时的流程&#xff0c;即特征筛选和分箱。 导入模型包…

7 网络通信(上)

文章目录 网络通信概述ip地址ip的作用ip地址的分类私有ip 掩码和广播地址 linux 命令&#xff08;ping ifconfig&#xff09;查看或配置网卡信息&#xff1a;ifconfig(widows 用ipconfig)测试远程主机连通性&#xff1a;ping路由查看 端口端口是怎样分配的知名端口动态端口 查看…

思维导图在线生成,新手必备!

思维导图是一个很好的学习和工作的方式&#xff0c;可以解决我们工作中的很多困难的问题&#xff0c;但是现在随着思维导图学习方法的推广&#xff0c;市面上的导图软件层出不穷&#xff0c;电子化的思维导图软件极大的方便了我们的工作和生活&#xff0c;下面我们就一起来盘点…

Linux下Pycharm安装

查看java版本&#xff0c;如果没有安装&#xff0c;需要先安装Java JDK。 java -versionsudo apt install openjdk-11-jre-headless下载Pycharm社区般&#xff0c;安装。 tar -zxvf pycharm-community-2023.2.tar.gz sh /opt/software/pycharm-community-2023.2/bin/pycharm.s…

URL存储解锁数据管理的新思路,重新定义数据传输与共享(@vue/repl)

Thinking系列&#xff0c;旨在利用10分钟的时间传达一种可落地的编程思想。 近日&#xff0c;在了解 vue/repl 相关内容&#xff0c;其通过 URL 进行数据存储&#xff0c;感觉思路惊奇&#xff0c;打开了新方式。 首先&#xff0c;通过 URL 存储最大的便利是&#xff1a;无需服…

IDEA中连接虚拟机 管理Docker

IDEA中连接虚拟机 管理Docker &#x1f4d4; 千寻简笔记介绍 千寻简笔记已开源&#xff0c;Gitee与GitHub搜索chihiro-notes&#xff0c;包含笔记源文件.md&#xff0c;以及PDF版本方便阅读&#xff0c;且是用了精美主题&#xff0c;阅读体验更佳&#xff0c;如果文章对你有帮…

android 如何分析应用的内存(十三)——perfetto

android 如何分析应用的内存&#xff08;十三&#xff09; 本篇文章是native内存的最后一篇文章——perfetto perfetto简介 从2018年始&#xff0c;android开发者峰会正式推出perfetto工具。从此perfetto成为安卓最重要的工具之一。在2018年以前&#xff0c;android使用syst…

率失真优化

文章目录 率失真优化率失真优化技术率失真理论1.互信息量2.失真度3.率失真函数4.率失真信源编码定理 视频编码中的率失真优化1.视频失真测度2.视频率失真曲线3.视频编码率失真优化 率失真优化 编码比特率和失真度相互制约、相互矛盾 因此&#xff0c;视频编码的主要目的就是在…

浅析Java中的内存泄漏

浅析Java中的内存泄漏 Java最明显的一个优势就是它的内存管理机制。你只需简单创建对象&#xff0c;java的垃圾回收机制负责分配和释放内存。然而情况并不像想像的那么简单&#xff0c;因为在Java应用中经常发生内存泄漏。 本教程演示了什么是内存泄漏&#xff0c;为什么会发生…

CAN转ETHERCAT网关can协议是什么意思

大家好&#xff0c;今天要跟大家分享一款自主研发的通讯网关&#xff0c;JM-ECT-CAN。这款产品能够将各种CAN总线和ETHERCAT网络连接起来&#xff0c;实现高效的数据传输和通信。那么&#xff0c;这款通讯网关具体有哪些功能和特点呢&#xff1f;接下来&#xff0c;我们就一起来…

vscode配置c++环境

第一步&#xff1a;安装vscode编辑器 预先安装&#xff1a; vscode&#xff08;https://code.visualstudio.com/&#xff09;在vscode中安装 C/C extension for VS Code&#xff08;在左侧扩展栏中搜索 “C”&#xff09; 第二步&#xff1a;安装MinGW-w64工具链 MinGW 提供…

web浏览器脚本的调试

水一贴。 在浏览器中按F12点击"source"或者"源程序"点击html、js、css等源码文件所在的窗口的左边&#xff0c;此时点击处显示为蓝色光标&#xff0c;表示断点中断已经设置完毕。配合窗口右上角的"继续" “下一步” "跳过"等控制按钮…

计算机SCI期刊,和计算机会议哪个更权威? - 易智编译EaseEditing

在计算机学科领域&#xff0c;SCI期刊和计算机会议都有其特点和优势&#xff0c;但两者在权威性方面可能存在一些差异。 SCI期刊是指被SCI&#xff08;Science Citation Index&#xff09;收录的学术期刊&#xff0c;SCI是Web of Science&#xff08;科学引文索引&#xff09;的…