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

STM32学习(五)

GPIO

General Purpose Input Output,通用输入输出端口,简称GPIO。
作用:

  1. 采集外部器件的信息(输入)
  2. 控制外部器件的工作(输出)

在这里插入图片描述

GPIO特点
1,不同型号,IO口数量可能不一样,可通过选型手册快速查询
2,快速翻转,每次翻转最快只需要两个时钟周期(F1最高速度可以到50Mhz)其实F103系统时钟72MHz,I/O口每次翻转最快达到36MHz,考虑超频到100MHz,F1最高速度就可以达到50MHz。
3,每个IO口都可以做中断(传统51单片机只有INT0,INT1两个中断)
4,支持8种工作模式

GPIO电气特性
在这里插入图片描述
开发板实际接3.3V

GPIO引脚类型:
在这里插入图片描述

  • 电源引脚:以V字母开头的引脚

  • 晶振引脚:外部低速晶振(32.768MHz)和外部高速晶振
    在这里插入图片描述

  • 复位引脚:NRST

  • 下载引脚:串口下载引脚,SWD引脚,JTAG引脚

  • BOOT引脚:BOOT0,BOOT1(引脚复用PB2)

  • GPIO引脚:以P字母开头

不同芯片引脚分布情况
在这里插入图片描述
GPIOA有0~15个IO口

IO引脚分布特点:按组存在、组数视芯片而定、每组最多16个IO引脚

IO端口基本结构介绍

在这里插入图片描述
① 保护二极管(要在之前加限流电阻,否则有可能被击穿)
② 内部上拉、下拉电阻
③ 施密特触发器
④ P-MOS & N-MOS管
差别:上下拉电阻

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

  • 当输入电压高于正向阈值电压,输出为高电平。
  • 当输入电压低于负向阈值电压,输出为低电平。
  • 当输入在正负向阈值电压之间,输出不变。

作用:整形!如正弦波转方波

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

P:Vgs<0,导通
N:Vgs>0,导通

GPIO的8种工作模式

在这里插入图片描述
GPIO工作模式:输入浮空
①上拉电阻关闭
②下拉电阻关闭
③施密特触发器打开
④双MOS管不导通
特点:空闲时(高阻态,外部没有接任何东西),IO状态不确定,由外部环境决定。

输入上拉
在这里插入图片描述
①上拉电阻打开
②下拉电阻关闭
③施密特触发器打开
④双MOS管不导通
特点:空闲时,IO呈现高电平

模拟功能
在这里插入图片描述
①上拉电阻关闭
②下拉电阻关闭
③施密特触发器关闭
④双MOS管不导通
特点:专门用于模拟信号输入或输出,如:ADC和DAC

开漏输出
在这里插入图片描述
①上拉电阻关闭(输出时严格禁止)
②下拉电阻关闭
③施密特触发器打开
④ P-MOS管始终不导通(所以要接高电平VDD)
⑤往ODR对应位写0,N-MOS管导通(外部输出0),写1则N-MOS管不导通(高阻态)
特点:不能输出高电平,必须有外部上拉才能输出高电平

开漏式复用功能
在这里插入图片描述
①上拉电阻关闭
②下拉电阻关闭
③施密特触发器打开
④ P-MOS管始终不导通
由片上外设控制
特点:1.不能输出高电平,必须有外部(或内部)上拉才能输出高电平。2.由其它外设控制输出

推挽输出
在这里插入图片描述
①上拉电阻关闭
②下拉电阻关闭
③施密特触发器打开
④往ODR对应位写0,N-MOS管导通,写1则P-MOS管导通
特点:可输出高低电平,驱动能力强。

推挽式复用功能
在这里插入图片描述
①上拉电阻关闭
②下拉电阻关闭
③施密特触发器打开

特点:可输出高低电平,驱动能力强,由其它外设控制输出

1,F1在输出模式,禁止使用内部上下拉
F4/F7/H7在输出模式,可以使用内部上下拉

2,不同系列IO翻转速度可能不同

GPIO寄存器

在这里插入图片描述
在这里插入图片描述
端口配置低寄存器(CRL)- F1
在这里插入图片描述
设置工作模式,输出速度。
CRL和CRH共64个位,一组GPIO有16个口,所以平均4个位控制一个IO口。
所以CRL控制Px0~Px7,8个IO口。
所以CRL控制Px8~Px15,8个IO口。


端口输出数据寄存器(ODR)-F1
在这里插入图片描述
对应16个IO口,每个IO口一个位。
输入上拉/下拉电阻通过ODR寄存器来设置

端口输入数据寄存器(IDR)– F1
用于设置IO引脚输出的电平
在这里插入图片描述
端口位设置/清除寄存器(BSRR)-F1
在这里插入图片描述
用于间接控制ODR寄存器

ODR和BSRR寄存器控制输出有什么区别?
ST官方给的答案:使用ODR,在读和修改访问之间产生中断时,可能会发生风险;BSRR则无风险。

在这里插入图片描述
所以最好用BSRR寄存器控制输出


http://www.kler.cn/a/2299.html

相关文章:

  • 结构体(c语言)
  • 【再谈设计模式】抽象工厂模式~对象创建的统筹者
  • gdb编译教程(支持linux下X86和ARM架构)
  • 推荐一款好用的postman替代工具2024
  • P8680 [蓝桥杯 2019 省 B] 特别数的和
  • Linux相关习题-gcc-gdb-冯诺依曼
  • SpringBoot基础教程
  • 数据结构——栈和队列(2)
  • 基于SpringBoot的学生成绩管理系统
  • 第十四届蓝桥杯三月真题刷题训练——第 18 天
  • 记录一次很坑的报错:java.lang.Exception: The class is not public.
  • 【沐风老师】3DMAX交通流插件TrafficFlow使用方法详解
  • albedo开源框架配置多数据源
  • 乐观锁和悲观锁 面试题
  • vue使用split()将字符串分割数组join()将数组转字符串reverse()将数组反转
  • Linux 总结9个最危险的命令,一定要牢记在心!
  • 通过DNS数据包解释DNS协议各个字段含义
  • Java中 ==和equals的区别是什么?
  • 流量分析-Wireshark -操作手册(不能说最全,只能说更全)
  • Golang每日一练(leetDay0012)
  • 让项目干系人满意的3大要点
  • list底层的简单实现(万字长文详解!)
  • 今天,我终于学懂了C++中的引用
  • 全网最全面,python自动化测试持续邮件集成,一步步详解......
  • 【Python_requests学习笔记(六)】基于requests模块构建免费代理IP池
  • 程序员的代码行数越少越好?