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

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灯亮灭

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

中小学分班查询系统0成本制作方法公布了,人人可用

传统的学生分班查询平台通常需要进行专业的技术开发&#xff0c;以实现学生查询和查看分班信息的功能。这个过程涉及到软件开发、数据库设计、系统集成等多个环节&#xff0c;需要有一支专业的技术团队来完成。 然而&#xff0c;这样的技术开发和维护过程需要耗费大量的经济成…

HBase有写入数据,页面端显示无数据量

写了一个测试类&#xff0c;插入几条数据&#xff0c;测试HBase的数据量。很简单的功能&#xff0c;这就出现问题了。。网页端可以看到&#xff0c;能够看到读写请求&#xff0c;但是不管是内存、还是磁盘&#xff0c;都没有数据。 于是就想到去HDFS查看&#xff0c;也是有数据…

Python简要复习

Python程序设计复习 Python基础知识 python的特点 兼具编译型和解释型特性&#xff0c;兼顾过程式、函数式和面向对象编程范式的通用编程语言 解释型语言无需像编译型需要一次性的编译成机器码&#xff0c;然后运行&#xff0c;而是由名叫解释器的程序动态的将源代码逐句转…

热备份路由协议原理

热备份路由协议原理 HSRP协议/VRRP协议热备份协议 热备份协议&#xff08;Hot Standby Protocol&#xff09; 是一种基于冗余设计的协议&#xff0c;用于提高网络的可靠性和冗余性。它允许多个设备共享同一个IP地址&#xff0c;其中一个设备被选为主设备&#xff0c;其他设备…

Tinkercad 建模21个小技巧

21个Tinkercad 建模小技巧 原文 参考文章&#xff1a;在 Tinkercad 中加快设计的 22 个技巧 一起来了解一下21个Tinkercad 3D建模小技巧&#xff0c;让你快人一步。 技巧1 Copy & Paste 文件&#xff0c;整合设计 想把文件A里面的模型拷贝到文件B里面&#xff1f; 很容…

【Linux】Centos的一些快捷操作

Centos的一些快捷操作 一个窗口多个终端GVIM 一个窗口多个文件 一个窗口多个终端 GVIM 一个窗口多个文件

idealC-2020.1.4免费下载(附安装教程)

下载地址 [软件名称]: IntelliJ IDEA 2020 [软件大小]: 560MB [安装环境]: Windows [下载链接]: 链接: https://pan.baidu.com/s/1yGOWqfRVE6cPsAe0qHpnbg https://pan.baidu.com/s/1yGOWqfRVE6cPsAe0qHpnbg 提取码: zt88 软件介绍 idea 2020.是由捷克IntelliJ公司而…

python_day16_设计模式

“”“单例模式”“” “”“工厂模式”“” class Person:passclass Worker(Person):passclass Student(Person):passclass Teacher(Person):passclass Factory:def get_person(self, p_type):if p_type w:return Worker()elif p_type s:return Student()else:return Te…

51单片机学习--按键控制流水灯模式定时器时钟

TMOD负责确定T0和T1的工作模式&#xff0c;TCON控制T0和T1的启动或停止计数&#xff0c;同时包含定时器状态 TF1&#xff1a;定时器1溢出标志 TF0&#xff1a;定时器0溢出标志 0~65535 每隔1微秒计数器1&#xff0c;总时间65535微秒&#xff0c;赋上初值64535&#xff0c;则只…

webstorm格式化代码后单引号转成了双引号

webStorm格式化js代码时单引号变成了双引号&#xff0c;问题如下&#xff1a; 格式化前&#xff1a; 格式化后&#xff1a; 解决办法&#xff1a; window: File -> Settings -> Editor -> Code Style -> Javascript&#xff1b; mac: webStorm -> Preference …

Flink回撤流

1.回撤流定义&#xff08;RetractStream&#xff09; Flink 的回撤流是指在 Flink 的流处理算法中&#xff0c;撤回已经发送到下游节点的数据。这是因为在实际应用场景中&#xff0c;有些错误数据可能会发送到下游节点&#xff0c;因此需要回撤流以保证数据的准确性。 回撤流…

【Docker】Docker应用部署之Docker容器安装Tomcat

目录 一、搜索镜像 二、拉取镜像 三、创建容器 四、测试使用 一、搜索镜像 docker search tomcat 二、拉取镜像 docker pull tomcat:版本 三、创建容器 首先在宿主机创建数据卷的目录 mkdir /root/tomcat # 创建目录 cd /root/tomcat # 进入目录 docker run -id -…

【腾讯云 Cloud Studio 实战训练营】永不宕机的IDE,Coding Everywhere

【腾讯云 Cloud Studio 实战训练营】永不宕机的IDE&#xff0c;随时随地写代码&#xff01; 写在最前视频讲解&#xff1a;Cloud Studio活动简介何为腾讯云 Cloud Studio?Cloud Studio简介免费试用&#xff0c;上手无忧Cloud Studio 特点及优势云端开发多种预制环境可选metawo…

怎么学习C语言,才能快速掌握?

有多年软件行业经验&#xff0c;期间参与过多个C语言项目。要掌握一门编程语言&#xff0c;仅仅投入时间学习是不够的&#xff0c;关键在于实际项目经验。在没有真正实战经验之前&#xff0c;不宜轻易声称掌握某种编程语言&#xff0c;因为编程是积累性的工作&#xff0c;理论知…

本地Git仓库和GitHub仓库SSH传输

SSH创建命令解释 ssh-keygen 用于创建密钥的程序 -m PEM 将密钥的格式设为 PEM -t rsa 要创建的密钥类型&#xff0c;本例中为 RSA 格式 -b 4096 密钥的位数&#xff0c;本例中为 4096 -C “azureusermyserver” 追加到公钥文件末尾以便于识别的注释。 通常以电子邮件地址…

微服务契约测试框架Pact-Python实战

Pact是一个契约测试框架&#xff0c;有多种语言实现&#xff0c;本文以基于pact-python探究契约测试到底是什么&#xff1f;以及如何实现 官网&#xff1a;自述文件 |契约文档 (pact.io) 契约测试步骤 1、为消费者写一个单元测试&#xff0c;让它通过&#xff0c;并生成契约…

中小企业如何低成本实施MES管理系统

中小企业在市场竞争中需要有高效的管理体系来支持其运营和发展。中小企业MES管理系统是一种先进的管理系统&#xff0c;可以提升工厂智能化水平&#xff0c;提高生产效率&#xff0c;是中小企业必须采取的有效管理工具。然而&#xff0c;由于资金和技术的限制&#xff0c;中小企…

Git分布式版本控制工具和GitHub(二)--Git指令入门

一.指令入门前的准备 1.Git全局设置 2.获取Git仓库 例如&#xff1a;将我GitHub上的first_resp仓库克隆到本地。 点击进入first_rep&#xff0c;后面本地仓库操作的学习就是在这个界面右键打开Git Bash 3.工作区&#xff0c;暂存区&#xff0c;版本库概念 注&#xff1a;如果空…

Ansible自动化运维工具

Ansible是一个基于Python开发的配置管理和应用部署工具&#xff0c;现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点&#xff0c;Pubbet和Saltstack能实现的功能&#xff0c;Ansible基本上都可以实现。 Ansible能批量配置、部署、管理上千台主机。比如以前需要…

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

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