STM32F2—通用输入输出端口GPIO
stm32 汇编语言 gpio读写

stm32 汇编语言gpio读写在STM32微控制器上使用汇编语言进行GPIO(General Purpose Input/Output)的读写涉及到寄存器的操作。
以下是一个简单的例子,演示如何使用汇编语言在STM32上进行GPIO读写。
请注意,具体的寄存器和位定义可能会因不同的STM32型号而有所不同,下面的示例基于Cortex-M系列的STM32微控制器。
首先,假设我们要配置一个GPIO引脚为输出,并将其电平设置为高。
我们使用的是ARM汇编语言(GNU汇编语法),这是通用的语法,但具体的寄存器和位定义可能需要根据你的芯片手册进行调整。
```assembly.global _start.section .text_start:// 设置RCC_AHB1ENR 寄存器的GPIOA 位,使能GPIOA 时钟LDR R1, =0x40023830 // RCC_AHB1ENR 地址LDR R0, [R1] // 读取RCC_AHB1ENR 的当前值ORR R0, R0, #(1 << 0) // 设置GPIOA 位STR R0, [R1] // 将修改后的值写回RCC_AHB1ENR// 设置GPIOA_MODER 寄存器的MODER5 位,将GPIOA Pin 5 配置为输出LDR R1, =0x40020000 // GPIOA 地址LDR R0, [R1, #0x00] // 读取当前GPIOA_MODER 的值ORR R0, R0, #(1 << 10) // 设置MODER5 为01 (输出模式)STR R0, [R1, #0x00] // 将修改后的值写回GPIOA_MODER// 设置GPIOA_ODR 寄存器的ODR5 位,将GPIOA Pin 5 输出电平设置为高LDR R0, [R1, #0x14] // 读取当前GPIOA_ODR 的值ORR R0, R0, #(1 << 5) // 设置ODR5 为1 (高电平)STR R0, [R1, #0x14] // 将修改后的值写回GPIOA_ODR// 无限循环loop:B loop```上述代码的作用是配置GPIOA Pin 5 为输出,并将其电平设置为高。
stm32f215rgt6技术参数

stm32f215rgt6技术参数
-STM32F215RG系列是STMicroelectronics公司推出的一款基于ARM Cortex-M3内核的32位微控制器。
-主频:最高主频为120MHz,支持高性能的处理能力。
-存储器:具有256KB的Flash存储器和64KB的SRAM,可用于存储程序和数据。
-通信接口:具有多个通信接口,包括4个USART、5个SPI和3个I2C,可用于与外部设备进行数据交互。
-定时器:具有多个定时器,包括基本定时器、通用定时器和高级定时器,用于实现精确的定时和控制功能。
- ADC:具有12位的模数转换器,可用于模拟输入信号的转换和采样。
- GPIO:具有多个通用输入输出引脚,用于连接外部器件和传感器。
-电源管理:支持多种低功耗模式,可实现节能和延长电池寿命。
-工作温度范围:-40℃至+85℃,适用于广泛的工业和消费电子应用。
-封装:STM32F215RGT6采用LQFP64封装,方便进行布局和焊接。
请注意,以上信息仅为参考,具体的技术参数可能会因不同的封装、版本或供应商而有所不同。
建议您查阅STMicroelectronics的官方文档或数据手册获取更详细和准确的技术参数。
STM32的8种输入输出方式

如图所示,推挽放大器的输出级有两个“臂”(两组放大元件),一个输入高电平时,输出端的电流将是下级门从本级电源经VT3拉出。
这样一来,输出高低电平时,VT3 一路和 VT5 一路将交替工作,从而减低了功耗,提高了每个管的承受能力。
又由于不论走哪一路,管子导通电阻都很小,使RC常数很小,转变速度很快。
因此,推拉式输出级既提高电路的负载能力,又提高开关速度。
开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).开漏形式的电路有以下几个特点:1. 利用外部电路的驱动能力,减少IC内部的驱动。
当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up,MOSFET到GND。
IC内部仅需很下的栅极驱动电流。
2. 一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。
比如加上上拉电阻就可以提供TTL/CMOS电平输出等。
(上拉电阻的阻值决定了逻辑电平转换的沿的速度。
阻值越大,速度越低功耗越小,所以负载电阻的选择要兼顾功耗和速度。
)3. OPEN-DRAIN提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。
因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。
所以如果对延时有要求,则建议用下降沿输出。
4. 可以将多个开漏输出的Pin,连接到一条线上。
通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系。
这也是I2C,SMBus等总线判断总线占用状态的原理。
补充:什么是“线与”?:在一个结点(线)上, 连接一个上拉电阻到电源 VCC 或 VDD 和 n 个 NPN 或 NMOS 晶体管的集电极 C 或漏极 D, 这些晶体管的发射极 E 或源极 S 都接到地线上, 只要有一个晶体管饱和, 这个结点(线)就被拉到地线电平上. 因为这些晶体管的基极注入电流(NPN)或栅极加上高电平(NMOS),晶体管就会饱和, 所以这些基极或栅极对这个结点(线)的关系是或非 NOR 逻辑. 如果这个结点后面加一个反相器, 就是或 OR 逻辑.其实可以简单的理解为:在所有引脚连在一起时,外接一上拉电阻,如果有一个引脚输出为逻辑0,相当于接地,与之并联的回路“相当于被一根导线短路”,所以外电路逻辑电平便为0,只有都为高电平时,与的结果才为逻辑1。
STM32的输入输出管脚配置

STM32的输入输出管脚有下面8种可能的配置:(4输入+2输出+2复用输出)①浮空输入_IN_FLOATING②带上拉输入_IPU③带下拉输入_IPD④模拟输入_AIN⑤开漏输出_OUT_OD⑥推挽输出_OUT_PP⑦复用功能的推挽输出_AF_PP⑧复用功能的开漏输出_AF_OD1.1I/O口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这个速度是指I/O 口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。
通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。
高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能(EMI是Electro Magnetic Interference的缩写,即电磁干扰;EMC是Electro Magnetic Compatibility的缩写,指电磁兼容性)。
当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。
关键是GPIO的引脚速度跟应用匹配(推荐10倍以上?)。
比如:1.1.1 对于串口,假如最大波特率只需115.2k,那么用2M的GPIO的引脚速度就够了,既省电也噪声小。
1.1.2 对于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引脚速度或许不够,这时可以选用10M的GPIO引脚速度。
1.1.3 对于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引脚速度显然不够了,需要选用50M的GPIO的引脚速度。
1.2 GPIO口设为输入时,输出驱动电路与端口是断开,所以输出速度配置无意义。
1.3 在复位期间和刚复位后,复用功能未开启,I/O端口被配置成浮空输入模式。
1.4 所有端口都有外部中断能力。
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单片机的八种IO口模式解析

STM32单片机的八种IO口模式解析
STM32八种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复用推挽输出
以下是详细讲解
(1)GPIO_Mode_AIN模拟输入
即关闭施密特触发器,将电压信号传送到片上外设模块(不接上、下拉电阻)
(2)GPIO_Mode_IN_FLOATING浮空输入
浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的
(3)GPIO_Mode_IPD下拉输入GPIO_Mode_IPU上拉输入
一般来讲,上拉电阻为1K-10K,电阻越小,驱动能力越强
电阻的作用:防止输入端悬空,减少外部电流对芯片的干扰,限流;,增加高电平输出时的驱动能力。
上拉输入:在默认状态下(GPIO引脚无输入)为高电平
下拉输入:在默认状态下(GPIO引脚无输入)为低电平
(4)GPIO_Mode_Out_OD开漏输出
开漏输出:输出端相当于三极管的集电极。
要得到高电平状态需要上拉电阻才行。
适合于做电流型的驱动,。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
I/O引脚的特色功能
引脚配置锁定 引脚上的位操作 I/O补偿单元(STM32F2新增)
特殊I/O引脚说明 STM32F1和STM32F2的GPIO比较
17
GPIO配置锁定
每个寄存器端口上的每个引脚,其配置可被锁定
一旦被锁定,该引脚的配置将保持到下次复位 锁定的目标寄存器
OSC_IN/OUT
HSE振荡器关闭时,对应引脚PH.0/1可以作为GPIO HSE功能优先级高于GPIO功能 STM32F1的OSC_IN/OUT不和GPIO复用
MODER、OTYPER、OSPEEDR、PUPDR AFRL、AFRH
寄存器:GPIOx_LCKR
LCKi(i=0~15)对应GPIO端口上每个位的上锁 LCKK:正确写序列使以上上锁配置生效
函数库封装
void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
②
③
① 输出驱动使能,推挽/开 漏取决于GPIOx_OTYPER
② Schmit触发输入激活
③上/下拉电阻是否激活
①
取决于GPIOx_PUPDR
根据P-MOS是否激活,可分为
推挽输出、漏输出
每个AHB1时钟周期,采样一次I/O引脚上的电平,放入输 入数据寄存器
读取GPIO_IDR可得到引脚的当前电平
PortG (16)
PortH (16) PortI (12) 总共引脚数目 48+1+2=51 80+2=82 112+2=114 128+12=140 PH0/1(OSC) PH0/1(OSC) PH0/1(OSC)
GPIO占芯片所有引脚的80% 左右
4
GPIO结构框图
数字外设
数字外设和 EVENTOUT
输入模式 GPIO输出
00 01
复用模式
模拟
10
11
片上数字外设
片上模拟外设:ADC/DAC
关闭
说明: 1. 灰色填充格,表示对应寄存器无效 2. 红色框,表示芯片以AHB1时钟频率采样引脚电平状态,放在输入数据寄存器 3. 蓝色框,只有这两个模式输出驱动被打开,输出信号分别来自输出数据寄存器和 片上数字外设,由此才需要配置推挽或开漏输出,以及输出带宽(2MHz、25MHz、 50MHz和100MHz)
特殊I/O引脚说明 STM32F1和STM32F2的GPIO比较
23
和振荡器引脚复用的I/O引脚
OSC32_IN/OUT
LSE振荡器关闭时,对应引脚PC.14/15可以作为GPIO LSE功能优先级低于GPIO功能 当1.2V区域掉电或者电池备份域由Vbat供电时,这两个引脚不具 有GPIO功能
Reset Set
16位写
e.g 同时反向toggle PA.0和PA.1
>> GPIOA_BSRR = 0x21 >> GPIOA_BSRR = 0x12
和STM32F1一样
21
I/O 补偿单元(Compensation Cell)
在高速I/O翻转时,根据电压温度(PVT)自动调 节I/O的电压转换速率(slew rate)
输入:浮空、上/下拉、模拟输入 输出:可配置上/下拉的推挽输出、开漏输出
I/O引脚的特色功能
引脚配置锁定 引脚上的位操作 I/O补偿单元(STM32F2新增)
特殊I/O引脚说明 STM32F1和STM32F2的GPIO比较
9
输入模式解析(MODER=00)
GPIO模块在AHB1总线上
特殊I/O引脚说明 STM32F1和STM32F2的GPIO比较
3
GPIO引脚分布
R(64pin) PortA (16) PortB (16) PortC (16) PortD (16) PortE (16) PortF (16) PD.2 3 5 7 9 V(100pin) Z(144pin) I(176pin)
必须32位读写
19
GPIO位操作(1)
STM32F1位操作,两个寄存器,只支持字操作
GPIOx_BSRR[32] = Bri | Bsi (i=0~15) GPIOx_BRR[32] = Bri (i=0~15) e.g. 同时同向toggle PA.0和PA.1
>> GPIOA_BSRR = 0x03 >> GPIOA_BRR = 0x03 >> GPIOA_BSRR = 0x21 >> GPIOA_BSRR = 0x12
输出信号仅来自片上数字外设,根据P-MOS是否激活可分为
推挽输出、开漏输出
I/O引脚上的信号可以输入到片上数字外设和GPIO_IDR
每个AHB1时钟周期采样一次I/O引脚上的电平,放入输入数据寄存器 读取GPIO_IDR可得到引脚上的电平状态
12
模拟功能模式解析(MODER=11)
选择推挽/开漏、上/下拉和输出速度
GPIOx_OTYPER、GPIOx_PUPDR、GPIOx_OSPEEDER
16
培训内容
GPIO引脚分布和结构框图 I/O引脚的多路复用选择和映射(STM32F2新增) I/O引脚的8种配置模式
输入:浮空、上/下拉、模拟输入 输出:可配置上/下拉的推挽输出、开漏输出
特殊I/O引脚说明 STM32F1和STM32F2的GPIO比较
6
可变功能复用选择器
每个引脚都有一个多路复用选择器来决定哪一个 外设功能连到该引脚 每个复用选择器有16路输入可供选择
AF0:系统功能(复位后复用选择器的默认连接)
JTAG/SWD,MCO1/2,RTC_50Hz
Same as STM32L
通用输入输出端口 GPIO
1
培训内容
GPIO引脚分布和结构框图 I/O引脚的多路复用选择和映射(STM32F2新增) I/O引脚的8种配置模式
输入:浮空、上/下拉、模拟输入 输出:可配置上/下拉的推挽输出、开漏输出
I/O引脚的特色功能
引脚配置锁定 引脚上的位操作 I/O补偿单元(STM32F2新增)
I/O上升沿/下降沿斜率自动调整 在50M/100MHz的输出速率配置下推荐使用 减小I/O噪声对VDD干扰
该特性模式默认关闭的,可通过软件使能
CMP_PD @ SYSCFG_CMPCR READY @ SYSCFG_CMPCR
该特性在低功耗模式下自动关闭,开启消耗电流 该特性在VDD在2.4~3.6V情况下才工作
特殊I/O引脚说明 STM32F1和STM32F2的GPIO比较
2
培训内容
GPIO引脚分布和结构框图 I/O引脚的多路复用选择和映射 I/O引脚的8种配置模式
输入:浮空、上/下拉、模拟输入 输出:可配置上/下拉的推挽输出、开漏输出
I/O引脚的特色功能
引脚配置锁定 引脚上的位操作 I/O补偿单元
22
培训内容
GPIO引脚分布和结构框图 I/O引脚的多路复用选择和映射(STM32F2新增) I/O引脚的8种配置模式
输入:浮空、上/下拉、模拟输入 输出:可配置上/下拉的推挽输出、开漏输出
I/O引脚的特色功能
引脚配置锁定 引脚上的位操作 I/O补偿单元(STM32F2新增)
14
I/O引脚的使用:外设功能
模拟外设ADC/DAC
配置成模拟模式
GPIOx_MODER = 11
关闭上/下拉电阻
GPIOx_PUPDR = 00
数字外设
配置成复用模式
GPIOx_MODER = 10
选择推挽/开漏、上/下拉和输出速度
GPIOx_OTYPER、GPIOx_PUPDR、GPIOx_OSPEEDER
配置复用选择器,把使用到的外设连到对应引脚
GPIOx_AFRL或者GPIOx_AFRH
15
I/O引脚的使用:GPIO
配置方向
输入方向
GPIOx_MODER = 00
输出方向
GPIOx_MODER = 01
对于输入方向
配置上/下拉电阻
GPIOx_PUPDR
对于输出方向
读取输出数据寄存器GPIO _ODR只能得到上次在推挽模 式下输出的值
开漏模式下软件写1,I/O引脚电平取决于外部电路
11
可变功能模式解析(MODER=10)
③
④
① 输出驱动使能,推挽/开 漏取决于GPIOx_OTYPER ② 输出电路由片上外设驱动
①
②
③ Schmit触发输入激活 ④上/下拉电阻是否激活 取决于GPIOx_PUPDR
18
GPIO引脚上锁举例
例:对引脚1、5、6的配置上锁
LCKR = 1<<16 | 0110 0010 = 0x0162 LCKR = 0 | 0110 0010 = 0x0062 LCKR = 1<<16 | 0110 0010 = 0x0162 读取LCKR 读取LCKR
复位之后,JTAG引脚是“输入上/下拉”模式,其他I/O引脚默认是“浮空输入”模式,
5
培训内容
GPIO引脚分布和结构框图 I/O引脚的多路复用选择和映射 I/O引脚的8种配置模式
输入:浮空、上/下拉、模拟输入 输出:可配置上/下拉的推挽输出、开漏输出
I/O引脚的特色功能
引脚配置锁定 引脚上的位操作 I/O补偿单元
②
③ ① 输出驱动关闭 ② Schmit触发输入关闭 ③上/下拉电阻被禁止