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

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.lryc.cn/news/41732.html

相关文章:

  • STM32的CAN总线调试经验分享
  • 深度剖析自定义类型(结构体、枚举、联合)——“C”
  • 《水经注地图服务》发布的全球影像数据在水经微图中调用
  • MyBatis --- 缓存、逆向工程、分页插件
  • vue3自定义svg图标组件
  • 智能火焰与烟雾检测系统(Python+YOLOv5深度学习模型+清新界面)
  • Java实习生------JUC并发编程(多线程)10道面试题打卡⭐⭐⭐
  • ChatGPT和百度文心一言写用例,谁更强?
  • 设计模式总结
  • 【K8S系列】深入解析Pod对象(一)
  • JVM学习.02 内存分配和回收策略
  • logstash+elasticsearch+Kibana(ELK)日志收集
  • 今天面试了一个2年Java经验的
  • 逻辑覆盖测试用例设计
  • 面试官:说一下MySQL中的锁机制吧
  • STL库中list的迭代器实现痛点分析
  • 字符编码对比(GBK、Unicode、UTF-8)
  • 【百面成神】Redis基础11问,你能坚持到第几问
  • 十大排序算法极简汇总篇
  • 数据结构笔记
  • web前端框架——Vue的特性
  • 提权工具推荐(PEASS-ng、linpeas_linux_amd64、winPEASany_ofs)
  • Spark - 继承 FileOutputFormat 实现向 HDFS 地址追加文件
  • 树莓派编程控制继电器及继电器组
  • oracle和mysql的区别
  • <Linux开发> linux应用开发-之-uart通信开发例程
  • 基于深度学习的安全帽检测系统(YOLOv5清新界面版,Python代码)
  • Linux - 进程控制(进程替换)
  • Java中 ==和equals的区别是什么?
  • Linux(网络基础---网络层)