浅析STM32之GPIO结构

发布者:EtherealJourney最新更新时间:2024-02-19 来源: elecfans关键字:STM32  GPIO结构 手机看文章 扫描二维码
随时随地手机看文章

  1、STM32的GPIO结构图

  GPIO共有8中设置模式:输入浮空、输入上拉、输入下拉、模拟输入、开漏输出、推挽式输出、推挽式复用功能,开漏复用功能,共4种输入,2种输入,2种复用功能。

  2、模式说明

  ①浮空输入

  图中施密特触发器是开启的,IO口的状态可以直接送到输入寄存器中,CPU可以直接读取输入寄存器;

  在上图中,阴影的部分处于不工作状态,尤其是下半部分的输出电路,实际上是与端口处于隔离状态。

  黄色的高亮部分显示了数据传输通道,外部的电平信号通过左边编号1的IO端口进入STM32,经过编号2的施密特触发器的整形送入编号3的输入数据寄存器,在输入数据寄存器的另一端编号4,CPU可以随时读出IO端口的电平状态。

  ②上拉输入

  上图是STM32的GPIO带上拉输入模式的配置。与前面的浮空输入模式相比,仅仅是在数据通道上部,接入了一个上拉电阻,根据STM32的数据手册,这个上拉电阻阻值介于30K~50K。

  同样,CPU可以随时在输入数据寄存器的另一端,读出IO端口的电平状态。

  ③下拉输入

  ④模拟输入

  施密特触发器是关闭的,信号直接到ADC输入;

  STM32的模拟输入通道的配置则更加简单,信号从左边编号1的端口进入,从右边编号2的一端直接进入ADC模块。

  这里我们看到所有的上拉、下拉电阻和施密特触发器,均处于断开状态,因此输入数据寄存器将不能反映端口上的电平状态,也就是说,模拟输入配置下,CPU不能在输入数据寄存器上读到有效的数据。

  ⑤开漏输出模式

  当CPU在编号1端通过“位设置/清楚寄存器”或“输出数据寄存器”写入数据后,该数据位通过编号2的输出控制电路传送到编号4的IO端口。


  如果CPU写入的是逻辑1,则编号3的N-MOS管将处于关闭状态,此时IO端口的电平将由外部的上拉电阻决定,如果CPU写入的是逻辑0,则编号3的N-MOS管将处于开启状态,此时IO端口的电平被编号3的N-MOS管拉到了VSS的零电位。

  在上图的上半部,施密特触发器处于开启状态,这意味着CPU可以在“输入数据寄存器”的另一端,随时监控IO端口的状态;通过这个特性,还实现了虚拟的IO端口双向通信,只要CPU输出逻辑1,由于编号3的N-MOS管处于关闭状态,IO端口的电平将完全由外部电路决定,因此,CPU可以在“输入数据寄存器”读到外部电路的信号,而不是它自己输出的逻辑1。

  GPIO口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这个速度是指GPIO口驱动电路的响应速度,而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在IO口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。当然如果要输出较高的频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。

  ⑥开漏输出复用功能

  ⑦推挽输出模式

  ⑧推挽复用输出模式

  GPIO推挽复用输出模式,编号2的输出控制电路的输入,与复用功能的输出端相连,此时输出数据寄存器被从输出通道断开了,并和片上外设的输出信号连接。我们将GPIO配置成复用输出功能后,如果外设没有被激活,那么它的输出将不确定,其它部分与前述模式一致,包括对“输入数据寄存器”的读取。

  3、应用场合

  ①上拉输入、下拉输入可以用来检测外部信号;例如,按键等;

  ②浮空输入模式,由于输入阻抗较大,一般把这种模式用于标准通信协议的I2C、USART的接收端;

  ③普通推挽输出模式一般应用在输出电平为0和3.3V的场合。而普通开漏输出模式一般应用在电平不匹配的场合,如需要输出5V的高电平,就需要在外部一个上拉电阻,电源为5V,把GPIO设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出5V电平。

  ④对于相应的复用模式,则是根据GPIO的复用功能来选择,如GPIO的引脚用作串口的输出,则使用复用推挽输出模式。如果用在IC、SMBUS这些需要线与功能的复用场合,就使用复用开漏模式。

  ⑤在使用任何一种开漏模式时,都需要接上拉电阻。


关键字:STM32  GPIO结构 引用地址:浅析STM32之GPIO结构

上一篇:stm32的八种GPIO配置模式
下一篇:如何使用STM32F4的DSP库

推荐阅读最新更新时间:2024-11-07 18:38

学习STM32时为什么要学习汇编?
不同的平台的汇编代码是不一样的,最早的汇编在50年代就发明了,比很多人的父母的年龄都大,老掉牙,不用学习怎么写汇编。一个公司有一个人知道怎么写汇编就够了。但要学习读汇编 为什么学习汇编? 性能 直接翻译为机器语言,性能最高。优秀的C语言效率只能达到汇编的80%左右。其他高级语言跟汇编一比差得更远。语言越高级性能越差。很多bootloader和BIOS用汇编写,汇编操作的是电脑,手机刚刚上电时,硬件和初始化的那些命令,它们的性能的要求比较高,效率高开机速度更快。 分析问题 个人认为,编程人与机器对话,我们写C,写JAVA,但是电脑并不认识这些语言,电脑只认识0和1;所以需要一个人来翻译这些语言,这个翻译官就是编译
[单片机]
学习<font color='red'>STM32</font>时为什么要学习汇编?
关于USART很多人都容易忽视的一个问题
Ⅰ、 写在前面 今天这篇文章分享的知识点比较少,但比较重要,是大部分人在实际项目开发中都容易忽视,且容易犯下的低级错误。 本文讲述在项目开发中,或在学习中经常遇到USART发送字符串,对方没有接收完成(最后一两字节),也就是最后字节数据丢失了。具体可以看下面章节实验。 关于本文的更多详情请往下看。 Ⅱ、实例工程 为了方便大家学习,提供实验源代码工程给大家参考。 STM32F10x_USART(验证USART发送字符串): https://yunpan.cn/ckInh8YTwWHVP 访问密码 81f9 提供下载的实例实现的功能比较简单,主要是用于验证不同情况下,发送字符的不同。 实例实现功能可以从
[单片机]
关于USART很多人都容易忽视的一个问题
stm32学习笔记之用systick写delay
一、系统滴答SysTick定时器 SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。大多数操作系统需要一个硬件定时器来产生滴答中断,作为整个系统的时基。例如,为多个任务许以不同数目的时间片,确保没有一个任务霸占系统;或者吧每个定时器周期的某个时间范围赐予特定的任务等,还有提供各种定时功能,都与滴答定时器有关。因此,需要一个定时器产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统的“心跳”的节奏。该定时器的时钟源可以是内部时钟(FCLK),或者是外部时钟(CM3处理器上的STCLK信号)。SysTick定时器能产生中断,异常中断。(内容摘自《Cortex-M3权威
[单片机]
stm32使用systick精确延时
利用系统滴答定时器来实现精确延时,需要以下五步: 1、设置滴答定时器的时钟,通过设置其控制寄存器,选择外部时钟,即为系统时钟的八分之一,若系统时钟为72M,则滴答定时器时钟为9M。即定时一秒需要9M个时钟周期。 2、设置滴答定时器的重装载寄存器的数值,即需要延时的时钟周期数。如:若需要延时20微秒,则重装载值为20*9.若要延时20毫秒,则设置重装载值为20*9000. 3、清空滴答定时器当前值寄存器的值,使之为零,以便使能计数时能够从设定值开始倒数计时。 4、设置滴答定时器的控制寄存器,开始倒计数。 5、查询滴答定时器的状态位,定时时间到,关闭定时器,清空定时器当前值。 void delay_init(u8 SYSCLK) {
[单片机]
STM32输出PWM
  STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3 内核。按性能分成两个不同的系列: STM32F103 “增强型”系列和STM32F101“基本型”系列。增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品。   基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是16位产品用户的最佳选择。两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。时钟频率72MHZ时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品。   脉冲宽度调制(PWM),是英文“Pulse Width Modulat
[单片机]
stm32 pwm性能和fpga脉冲性能比较
stm32 pwm采取两种方式,一种是固定设置方式, 例如设置计数器为199个clk,脉宽为100clk ,第二种方式采取DMA配置脉宽方式, 例如我开了一个3000大小的数组,里面都写100, 采取循环DMA发送 fpga就比较简单,对clk计数,最大值为100,到0- 49的时候io为0,50-99为io口为1, 这样就产生了pwm波形 测试结果如下 stm32下面pwm两种方式性能都差不多, 360K基准上下波动3K,最大可达到5K, dma和直接pwm都一样。 fpga方式下面,410K基准上波动不超过1k 性能差异很明显,fpga方式远远好于stm32, 特别是考虑到多轴同步的时候更是这样。 示波器采用同样条件
[单片机]
关于STM32的SPI端口设置问题
在复用SPI总线时,必须先设置总线端口。读取其他ARM芯片(如NXP)一般很容易看出芯片的设置是否正确。不过对于STM32就容易让人迷惑了。例如,我们在使用SPI总线进行通信时,可以这样设置: GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用的推挽输出 恐怕大家对MISO端口的设置就会产生疑惑了
[单片机]
关于<font color='red'>STM32</font>的SPI端口设置问题
STM32单片机自动售货机系统设计
一、功能简介 本项目使用Proteus8仿真STM32单片机控制器,使用LCD1602显示模块、矩阵按键模块、LED和蜂鸣器、继电器模块等。 主要功能: 系统运行后,LCD1602显示系统初始界面,可通过矩阵按键S1和S5选择商品,LCD液晶显示商品价格,共有8种价格商品可供选择,且选择的商品对应LED会有指示。可通过S9和S13选择商品数量,当需要返回时可按下S16键,选择好商品和数量后可按下S12键,此时LCD显示累计商品总价,此时可通过键盘输入投币数,LCD显示投币值,若投币数值大于等于商品累计总价,则驱动继电器出货,且蜂鸣器报警提示,LCD显示找零数。若投币数小于商品累计总价,则LCD显示继续投币。 二、软件设
[单片机]
<font color='red'>STM32</font>单片机自动售货机系统设计
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved