stm32的GPIO学习笔记讲课教案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
s t m32的G P I O学习
笔记
I/O口工作模式:
1.高阻输入
输入模式的结构比较简单,就是一个带有施密特触发输入(Schmitt-triggered input)的三态缓冲器(U1),并具有很高的阻抗。施密特触发输入的作用是能将缓慢变化的或者是畸变的输入脉冲信号整形成比较理想的矩形脉冲信号。
执行 GPIO管脚读操作时,在读脉冲(Read Pulse)的作用下会把管脚(Pin)的当前电平状态读到内部总线上(Internal Bus)。
2.推挽输出
推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高.
在推挽输出模式下,GPIO还具有回读功能,实现回读功能的是一个简单的三态门 U2。注意:执行回读功能时,读到的是管脚的输出锁存状态,而不是外部管脚 Pin的状态。
3.开漏输出
开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平,比如加上上拉电阻就可以提供TTL/CMOS电平输出等。
开漏输出和推挽输出相比结构基本相同,但只有下拉晶体管 T1而没有上拉晶体管。同样,T1实际上也是多组可编程选择的晶体管。开漏输出的实际作用就是一个开关,输出“1”时断开、输出“0”时连接到 GND(有一定内阻)
开漏输出和推挽输出相比结构基本相同,但只有下拉晶体管 T1而没有上拉晶体管。同样,T1实际上也是多组可编程选择的晶体管。开漏输出的实际作用就是一个开关,输出“1”时断开、输出“0”时连接到 GND(有一定内阻).
4.钳位二级管
其作用是防止从外部管脚 Pin输入的电压过高或者过低。
提高输出电压一种简单的做法:是先在 GPIO管脚上串联一只二极管(如
1N4148),然后再接上拉电阻。
/////////////////////////////////////////////////////////////////////////////////////////////////////////
STM32的GPIO管脚深入分析:
概述:STM23的每个GPIO引脚都可以由软件配置成输出(推挽或开漏),输入(带或不带上拉或下拉)或复用的外设功能端口。多数GPIO引脚与数字或模拟的复用外设共用;除了具有模拟输入(ADC)功能的管脚之外,其他的GPIO引脚都有大电流通过能力。
tip:每个IO口可以自由编程,单IO口寄存器必须要按32位bit被访问。
STM32的每个IO端口都有7个寄存器来控制
一.具体如下8种模式:
1)输入浮空(这个输入模式,输入电平必须由外部电路确定,要根据具体电路,加外部上拉电阻或下拉电阻,可以做按键识别)
2)输入上拉(打开IO内部上拉电阻)
3)输入下拉(打开IO内部下拉电阻)
4)模拟输入(应用ADC模拟输入)
5)开漏输出(输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).能驱动大电流和大电压,LED就使用这种模式。)
6)推挽式输出(可以输出高,低电平,连接数字器件。推挽式输出输出电阻小,带负载能力强)
7)推挽式复用功能(复用是指该引脚打开remap功能)
8)开漏复用功能(复用是指该引脚打开remap功能)
tip:
上拉输入模式:区别在于没有输入信号的时候默认输入高电平(因为有弱上拉)。
下拉输入模式:区别在于没有输入信号的时候默认输入低电平(因为有弱下拉)。
(上拉就是使IO口接上拉电阻到VCC了,跟51一样,下拉就是使IO口接下拉电阻到GND了,
浮空就是即不接上拉,也不接下拉,这样的话IO默认输入电平不确定)
浮空输入模式:顾名思义也就是输入什么信号才是什么信号,对于浮空输入要保证有明确的输入信号。
库函数:
GPIO_Mode_AIN 模拟输入
GPIO_Mode_IN_FLOATING 浮空输入
GPIO_Mode_IPD 下拉输入
GPIO_Mode_IPU 上拉输入
GPIO_Mode_Out_OD 开漏输出
GPIO_Mode_Out_PP 推挽输出
GPIO_Mode_AF_OD 复用开漏输出
GPIO_Mode_AF_PP 复用推挽输出
二.TM32的每个IO端口都有7个寄存器来控制,具体七个寄存器如下:
CRL 端口配置低寄存器
CRH 端口配置高寄存器
IDR 端口输入数据寄存器
ODR 端口输出数据寄存器
BSRR 端口位设置/复位寄存器
BRR 端口位复位寄存器
LCKR 端口配置锁定寄存器
EVCR 事件控制寄存器
MAPR 复用重映射和调试I/O配置寄存器
EXTICR 外部中断线路0-15配置寄存器
tip:
********************************************************************* *******************************
CRL(端口配置低寄存器):复位值为0X4444 4444(4化成二进制为0100),从上图可以看到,复位值其实就是配置端口为浮空输入模式
得出:STM32的CRL控制着每个IO端口(A~G)的低8位的模式。每个IO端口的位占用CRL的4个位,高两位为CNF,低两位为MODE。
CRL控制的是低8位输出口,而CRH控制的是高8位输出口
在输入模式(MODE[1:0]=00):
00:模拟输入模式
01:浮空输入模式(复位后的状态)
10:上拉/下拉输入模式
11:保留
在输出模式(MODE[1:0]>00):
00:通用推挽输出模式
01:通用开漏输出模式
10:复用功能推挽输出模式
11:复用功能开漏输出模式
MODEy[1:0]:端口x的模式位:
00:输入模式(复位后的状态)