STM32之通用输入输出之GPIO
STM32各模块总结

STM32各模块总结STM32是STMicroelectronics(意法半导体)公司推出的一款32位ARM内核的微控制器系列。
它广泛应用于工业自动化、消费电子、医疗设备、智能家居等领域。
STM32系列拥有丰富的功能模块,下面将对常用的几个模块进行总结。
1.GPIO模块:GPIO是通用输入输出模块,用于连接和控制外部设备。
STM32的GPIO模块支持多种输入输出模式,包括输入、输出、开漏输出、复用功能等。
它支持中断和事件触发,并且可以配置外部信号中断触发的方式。
GPIO模块是STM32的基础模块,可以实现与其他模块的通信和控制。
2.UART模块:UART是通用异步收发传输模块,用于与其他设备进行串行通信。
STM32的UART模块支持多种传输速率和数据位数,可以实现可靠的数据传输。
它还支持硬件流控制功能,可以实现数据的流畅传输。
UART模块可以用于与电脑、传感器、显示屏等外部设备进行通信。
3.ADC模块:ADC是模数转换器模块,用于将模拟信号转换为数字信号。
STM32的ADC模块支持多种输入电压范围和精度,可以实现高精度的模拟信号采集。
它还支持多通道采集和DMA传输功能,提高了数据采集的效率。
ADC模块可以用于传感器的数据采集、模拟信号的处理等应用。
4.TIM模块:TIM是定时器模块,用于产生定时和脉冲信号。
STM32的TIM模块支持多种定时器模式和计数模式,可以实现多种定时、计数和PWM输出功能。
它还支持中断和事件触发功能,可以实现精确的时间控制。
TIM模块广泛应用于PWM调速、定时测量、脉冲计数等应用。
5.SPI模块:SPI是串行外设接口模块,用于与外部设备进行高速的全双工串行通信。
STM32的SPI模块支持多种工作模式和数据传输速率,可以实现可靠的数据传输。
它还支持硬件流控制功能,可以实现数据的流畅传输。
SPI模块常用于与存储器、传感器、显示屏等外部设备进行通信。
6.I2C模块:I2C是双线串行总线模块,用于与多个外部设备进行通信。
STM32库函数功能详解

STM32库函数功能详解STM32是一款广泛应用于嵌入式系统中的微控制器系列,由意法半导体(STMicroelectronics)开发。
它具有高性能、低功耗和丰富的外设功能,广泛应用于各种应用领域。
为了方便开发者进行快速开发和简化编程流程,STM32提供了一系列库函数,本文将对其功能进行详细解析。
1.GPIO库函数:GPIO库函数用于配置STM32的通用输入输出口(GPIO)功能,包括输入、输出模式的配置和读写操作。
通过GPIO库函数,开发者可以方便地读取外部输入信号、控制外部设备的输出。
例如,使用GPIO库函数可以简单地配置一个引脚为输入模式,并读取其电平状态,或者配置一个引脚为输出模式,并设置其输出电平。
2.EXTI库函数:EXTI库函数用于配置STM32的外部中断(EXTI)功能,可以实现对外部事件的中断响应功能。
通过EXTI库函数,开发者可以方便地配置外部中断的触发方式和优先级,以及处理中断事件。
例如,使用EXTI库函数可以配置一个引脚为上升沿触发模式,并在引脚触发中断时执行相应的中断服务函数。
3.RCC库函数:RCC库函数用于配置和控制STM32的时钟系统(RCC),包括各个外设模块和系统时钟的配置。
通过RCC库函数,开发者可以方便地配置STM32的时钟源、时钟分频和时钟使能。
例如,使用RCC库函数可以配置系统时钟为指定频率,以及使能和配置外设时钟。
4.NVIC库函数:NVIC库函数用于配置和控制STM32的中断控制器(NVIC)功能,包括中断向量表和中断优先级的配置。
通过NVIC库函数,开发者可以方便地配置中断向量表和中断优先级,以及控制中断的使能和屏蔽。
例如,使用NVIC库函数可以配置一个外部中断的优先级和使能状态,以及控制中断的屏蔽和释放。
5.ADC库函数:ADC库函数用于配置和控制STM32的模数转换器(ADC)功能,可以实现模拟信号的数字化转换。
通过ADC库函数,开发者可以方便地配置ADC的转换通道、采样速率和转换模式。
stm32GPIO口工作原理详细解释

STM32的GPIO介绍STM32引脚说明GPIO是通用输入/输出端口的简称,是STM32可控制的引脚。
GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。
STM32F103ZET6芯片为144脚芯片,包括7个通用目的的输入/输出口(GPIO)组,分别为GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG,同时每组GPIO口组有16个GPIO口。
通常简略称为PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x为0-15。
STM32的大部分引脚除了当GPIO使用之外,还可以复用位外设功能引脚(比如串口),这部分在【STM32】STM32端口复用和重映射(AFIO辅助功能时钟)中有详细的介绍。
GPIO基本结构每个GPIO内部都有这样的一个电路结构,这个结构在本文下面会具体介绍。
这边的电路图稍微提一下:保护二极管:IO引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入。
当引脚电压高于VDD时,上方的二极管导通;当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。
但是尽管如此,还是不能直接外接大功率器件,须加大功率及隔离电路驱动,防止烧坏芯片或者外接器件无法正常工作。
P-MOS管和N-MOS管:由P-MOS管和N-MOS管组成的单元电路使得GPIO具有“推挽输出”和“开漏输出”的模式。
这里的电路会在下面很详细地分析到。
TTL肖特基触发器:信号经过触发器后,模拟信号转化为0和1的数字信号。
但是,当GPIO引脚作为ADC采集电压的输入通道时,用其“模拟输入”功能,此时信号不再经过触发器进行TTL电平转换。
ADC外设要采集到的原始的模拟信号。
这里需要注意的是,在查看《STM32中文参考手册V10》中的GPIO的表格时,会看到有“FT”一列,这代表着这个GPIO口时兼容3.3V和5V 的;如果没有标注“FT”,就代表着不兼容5V。
STM32的8种GPIO输入输出模式详细分析

STM32的8种GPIO输入输出模式详细分析浮空,顾名思义就是浮在空中,上面用绳子一拉就上去了,下面用绳子一拉就沉下去了。
开漏,就等于输出口接了个NPN三极管,并且只接了e,b。
c 极是开路的,你可以接一个电阻到 3.3V,也可以接一个电阻到5V,这样,在输出1的时候,就可以是5V电压,也可以是3.3V 电压了。
但是不接电阻上拉的时候,这个输出高就不能实现了。
推挽,就是有推有拉,任何时候IO口的电平都是确定的,不需要外接上拉或者下拉电阻。
(1)GPIO_Mode_AIN 模拟输入(2)GPIO_Mode_IN_FLOATING 浮空输入(3)GPIO_Mode_IPD 下拉输入(4)GPIO_Mode_IPU 上拉输入(5)GPIO_Mode_Out_OD 开漏输出(6)GPIO_Mode_Out_PP 推挽输出(7)GPIO_Mode_AF_OD 复用开漏输出(8)GPIO_Mode_AF_PP 复用推挽输出推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。
输出既可以向负载灌电流,也可以从负载抽取电流。
推拉式输出级既提高电路的负载能力,又提高开关速度。
开漏输出:输出端相当于三极管的集电极。
要得到高电平状态,需要上拉电阻才行。
适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)。
开漏形式的电路有以下几个特点:1、利用外部电路的驱动能力,减少IC内部的驱动。
当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up ,MOSFET到GND。
IC内部仅需很下的栅极驱动电流。
2、一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。
gpio参数

GPIO,即通用输入输出,是STM32芯片上的数字接口,具有灵活性和可编程性,能够被软件配置为输入或输出。
它是嵌入式设备中非常基础的一部分,允许嵌入式系统与外界环境交互,可以通过编程来控制它们进行各种操作。
例如,在输入模式下,GPIO可以读取来自传感器、开关等外部设备的信号;在输出模式下,它可以控制LED 灯、电机等外部设备。
特定于STM32F103ZET6芯片,它有GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF和GPIOG七组GPIO口,共有112个IO口可供编程使用,其中37个是普通输入/输出口,75个是复用输入/输出口。
对GPIO的参数进行配置时,会用到一个名为GPIO_InitTypeDef的结构体(用于配置CRL、CRH寄存器参数),这些参数包括具体的端口GPIO_Pin、端口速度GPIO_Speed、端口模式GPIO_Mode。
另外,当我们选择配置GPIO后,可以通过GPIO_Init指向引脚初始化类型GPIO_InitTypeDef 的结构体指针,该结构体包含指定引脚的配置参数。
stm32 gpio读取函数

1. 基础概念在开始介绍STM32 GPIO读取函数之前,让我们先来了解一下GPIO 的基本概念。
GPIO,即通用输入输出,是单片机中常见的一种外设模块,用于实现与外部设备的数字通信。
在STM32系列的单片机中,GPIO模块提供了丰富的功能和灵活的配置,使得我们可以通过GPIO 口实现数字信号的输入和输出。
2. GPIO读取函数在STM32系列的单片机中,我们可以通过调用相关的库函数来实现对GPIO口的读取操作。
其中,对于输入操作,我们可以使用GPIO_ReadInputDataBit函数来实现。
该函数的原型为:uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_tGPIO_Pin)。
其中,GPIOx代表GPIO口的基位置区域,GPIO_Pin代表具体的引脚编号,函数的返回值为引脚的状态,通常是0或1,代表低电平和高电平。
3. 深入理解在实际的应用中,我们需要从硬件层面深入理解GPIO读取函数的原理和使用方法。
我们需要了解GPIO口的工作原理,包括输入模式和输出模式的配置方法,以及GPIO口在不同状态下的电平变化。
我们需要熟悉STM32的库函数,了解库函数的调用方法和参数含义。
我们需要考虑GPIO读取函数在特定场景下的应用,如按键输入、传感器信号读取等。
4. 应用举例假设我们需要通过STM32的GPIO口读取外部按键的状态,并根据按键状态执行相应的操作。
我们可以使用GPIO_ReadInputDataBit函数来读取按键引脚的状态,然后根据返回的状态值进行逻辑判断,从而实现按键的检测和响应。
这个例子充分展示了GPIO读取函数在实际中的应用,同时也能帮助我们更深入地理解GPIO的工作原理和库函数的使用。
5. 个人观点和总结从个人角度来看,GPIO读取函数是STM32开发中非常基础和重要的一部分。
通过学习和掌握GPIO读取函数的原理和使用方法,我们可以更好地理解STM32的GPIO模块,并能够在实际的项目中灵活应用。
stm32库函数详解

GPIO_Speed GPIO_Speed:用以设置选中管脚的速率。 GPIO_Speed_10MHz:最高输出速率 10MHz GPIO_Speed_2MHz:最高输出速率 2MHz GPIO_Speed_50MHz:最高输出速率 50MHz
名为 PPP_StructInit 的函数,其功能为通过设置 PPP_InitTypeDef 结构中的各种参数来定义外设的功能,例 如:USART_StructInit
名为 PPP_Cmd 的函数,其功能为使能或者失能外设 PPP,例如: SPI_Cmd.
名为 PPP_ITConfig 的函数,其功能为使能或者失能来自外设 PPP 某中断源,例如: RCC_ITConfig.
功能描述:根据 GPIO_InitStruct 中指定的参数初始化外设 GPIOx 寄存器 例: GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure);
1
命名规则
在函数名中,只允许存在一个下划线,用以分隔外设缩写和函数名的其它部分。
STM32GPIO输入输出模式的理解

STM32GPIO输⼊输出模式的理解
四种输出模式:
1、推挽输出
所谓推挽输出模式是根据两个MOS管的⼯作⽅式命名的。
功能:推挽输出可输出⾼电平,可输出低电平。
应⽤:⼀般应⽤在输出电平为VSS和VDD,⽽且需要⾼速切换开关状态的场合。
在STM32的应⽤中,除必须使⽤开漏模式的场合,我们都使⽤推挽输出模式。
2、推挽复⽤模式
应⽤于内容来⾃STM32⽚上外设。
即GPIO被⽤作复⽤功能时使⽤。
3、开漏输出
功能:只能输出低电平,如需输出⾼⾼电平,需外接电路(单⽚机输出3.3V时,外接电路为3,3V时,输出3.3V.外接5V时,可输出5V)。
应⽤:⼀般应⽤在输出电平在IIC、SMBUS通信等需要"线与"功能的总线中。
除此之外,还⽤在电平不匹配的场合,如需输出5伏的⾼电平,就可以外部接⼀上拉电阻,上拉电源为5伏。
并且把GPIO设置为开漏模式,当输出⾼阻态时,由上拉电阻和电源向外输出5伏的电平。
4、开漏复⽤
四种输⼊模式:
1、上拉输⼊
在没有输⼊信号的时候,输⼊端默认输⼊⾼电平(由上拉决定)。
2、下拉输⼊
如上拉输⼊
3、浮空输⼊
浮空输⼊的电平是不确定的,完全由外部的输⼊决定。
应⽤:⼀般⽤于接按键。
4、模拟输⼊
⽤于ADC采集。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4. 钳位二极管(用来保护 GPIO 管脚) GPIO 内部具有钳位保护二极管,如下图所示。其作用是防止从外部管脚 Pin 输入的电 压过高或者过低。VDD 正常供电是 3.3V,如果从 Pin 输入的信号(假设任何输入信号都有 一定的内阻)电压超过 VDD 加上二极管 D1 的导通压降(假定超过 VDD 电压 0.6V 的时候, 那么二极管 D1 导通需要 0.6V 的压降),则二极管 D1 导通,这样就会把多于的电流引到 VDD,而真正输入到内部的信号电压不会超过 3.9V(3.3v+0.6v=3.9v)。同理,如果从 Pin 输入的信号电压比 GND 还低,则由于二极管 D2 的作用,会把实际输入内部的信号电压钳 制在-0.6V 左右。
如上图所示,为 GPIO 管脚在开漏输出模式下的等效结构示意图。开漏输出和推挽输 出相比结构基本相同,但只有下拉晶体管 T1 而没有上拉晶体管。同样,T1 实际上也是多 组可编程选择的晶体管。开漏输出的实际作用就是一个开关,输出“1”时断开、输出“0” 时连接到 GND(有一定内阻)。回读功能:读到的仍是输出锁存器的状态,而不是外部管 脚 Pin 的状态。因此开漏输出模式是不能用来输入的。
如上图所示,为 GPIO 管脚在推挽输出模式下的等效结构示意图。U1 是输出锁存器, 执行 GPIO 管脚写操作时,在写脉冲(WritePulse)的作用下,数据被锁存到 Q 和/Q。T1 和 T2 构成 CMOS 反相器,T1 导通或 T2 导通时都表现出较低的阻抗,但 T1 和 T2 不会 同时导通或同时关闭,最后形成的是推挽输出。在推挽输出模式下,GPIO 还具有回读功能, 实现回读功能的是一个简单的三态门 U2。注意:执行回读功能时,读到的是管脚的输出锁 存状态,而不是外部管脚 Pin 的状态。
推挽电路是两个参数相同的三极管或 MOSFET,以推挽方式存在于电路中,各负责正负半 周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗 小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路 的负载能力,又提高开关速度。
推挽放大器的输出级有两个“臂”(两组放大元件),一个“臂”的电流增加时,另一个 “臂”的电流则减小,二者的状态轮流转换。对负载而言,好像是 一个“臂”在推,一个 “臂”在拉,共同完成电流输出任务。
管脚名称 PF[15:0]
类型 I/O
表 5:端口 E GPIO 管脚描述 描述
通用输入/输出 PF0 到 PF15
管脚名称 PG[15:0]
类型 I/O
表 5:端口 E GPIO 管脚描述 描述
通用输入/输出 PG0 到 PG15
管脚名称 PH[1:0]
类型 I/O
表 6:时钟晶振 GPIO 管脚描述 描述
3. 开漏输出 开漏输出就是不输出电压,低电平时接地,高电平时不接地。如果外接上拉电阻,则在 输出高电平时电压会拉到上拉电阻的电源电压,如果开漏输出的管脚被上拉了,那么这个管 脚将一直默认是输出高电平的。 一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部 的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻, 很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平,比如加上上拉电阻就可 以提供 TTL/CMOS 电平输出等。
6.1 通用输入/输出(GPIO) ............................................................................................1 6.1.1 管脚特性...........................................................................................................1 6.1.2 GPIO应用领域 .................................................................................................1 6.1.3 管脚分配...........................................................................................................1 6.1.4 GPIO管脚内部硬件电路原理剖析..................................................................2 6.1.5 STM32 的GPIO管脚深入分析 ........................................................................6 6.1.6 在STM32 中如何配置片内外设使用的IO端口............................................12 6.1.7 例程 01 单个LED点灯闪烁程序 ..................................................................13 6.1.8 例程 02 LED双灯闪烁实验 ........................................................................17 6.1.9 例程 03 LED三个灯同时亮同时灭 ............................................................18 6.1.10 例程 04 LED流水灯程序 ...............................................................................20
表示 GPIO
管脚;这是一个管脚的情况,其它管脚的结构也是同样的,输入模式的结构比较简单,就是 一个带有施密特触发输入(Schmitt-triggered input)的三态缓冲器(U1),并具有很高的阻 抗。施密特触发输入的作用是能将缓慢变化的或者是畸变的输入脉冲信号整形成比较理想的 矩形脉冲信号。执行 GPIO 管脚读操作时,在读脉冲(Read Pulse)的作用下会把管脚(Pin) 的当前电平状态读到内部总线上(Internal Bus)。
1) 可编程控制 GPIO 中断 ----- 包括屏蔽中断发生 ----- 边沿触发(上升沿、下降沿、双边沿触发) ----- 电平触发(高电平触发、低电平触发) 2) 输入/输出管脚最大可承受 5V 电压 3) 可通过编程控制 GPIO 管脚配置: ----- 弱上拉或弱下拉电阻 ----- 2mA、4mA、8mA 驱动,STM32 芯片管脚驱动最大是 25mA GPIO 管脚可以被配置为多种工作模式,配置不同的模式实际就是内部的驱动电路有不 一样,下面我们分析几种,大家可以从这里了解原理知识: 1. 高阻输入 高阻态是一个数字电路里常见的术语,指的是电路的一种输出状态,既不是高电平也不
在不执行读操作时,它可以变成高阻抗的状态,使得外部管脚与内部总线之间是隔离的。 为什么会产生这种高阻抗的管脚设计呢?因为是很多管脚都连在同一根总线上,为了不 干扰其他管脚,当某一个管脚在传送数据的适合,其他管脚配置成高阻抗,就不会干扰正在 传送数据的管脚了,这样可以很多管脚同时共用一根总线,分时复用。 为减少信息传输线的数目,大多数计算机中的信息传输线采用总线形式,即凡要传输的 同类信息都在同一组传输线,且信息是分时传送的。在计算机中一般有三组总线,即数据总 线、地址总线和控制总线。为防止信息相互干扰,要求凡挂到总线上的寄存器或存储器等, 它的输入输出端不仅能呈现 0、1 两个信息状态,而且还能产生一种高阻抗状态,即好像它 们的输出被开关断开,对总线状态不起作用,此时总线可由其他器件占用。三态缓冲器即可 实现上述功能,它除具有输入输出端之外,还有一控制端,就像一个开关一样,可以控制使 其变成高阻抗状态。
类型 I/O
表 3:端口 C GPIO 管脚描述 描述
通用输入/输出 PC0 到 PC15
管脚名称 PD[15:0] Nhomakorabea类型 I/O
表 4:端口 D GPIO 管脚描述 描述
通用输入/输出 PD0 到 PD15
管脚名称 PE[15:0]
类型 I/O
表 5:端口 E GPIO 管脚描述 描述
通用输入/输出 PE0 到 PE15
6.1 通用输入/输出(GPIO) 6.1.1 管脚特性
z STM32F407ZGT6 总共有 114 个通用输入/输出(GPIO)口 z 每个 I/O 端口位可以自由编程 z I/O 端口寄存器可按 32 位字被访问(不允许半字或字节访问)
6.1.2 GPIO应用领域
z 通用 I/O 口 z 驱动 LED 或其他指示器 z 控制片外器件或片外器件通信 z 检测静态输入
6.1.3 管脚分配
管脚名称 PA[12:0]
类型 I/O
表 1:端口 A GPIO 管脚描述 表 1:端口 A GPIO 管脚描述
描述 通用输入/输出 PA0 到 PA12
管脚名称 类型
表 2:端口 B GPIO 管脚描述 描述
PB[12:0]
I/O 通用输入/输出 PB1 到 PB12
管脚名称 PC[15:0]
如果确实想进一步提高输出电压,一种简单的做法是先在 GPIO 管脚上串联一只二极 管(如 1N4148),然后再接上拉电阻。参见下图,框内是芯片内部电路。向管脚写“1”时, T1 关闭,在 Pin 处得到的电压是 3.3+VD1+VD3=4.5V,电压提升效果明显;向管脚写 “0”时,T1 导通,在 Pin 处得到的电压是 VD3=0.6V,仍属低电平。