APP下载

STM32的输入/输出端口课堂教学方法探讨

2020-11-25

科教导刊·电子版 2020年30期
关键词:浮空低电平高电平

(洛阳师范学院信息技术学院 河南·洛阳 471934)

0 引言

输入/输出端口是STM32微控制器最基本的片上外设。I/O端口工作在输入状态时,既可接收数字信号,亦可接收模拟信号;I/O端口工作在输出状态时,根据程序的运行结果,输出驱动外部负载工作。STM32的常规输入/输出 GPIO 具有浮空输入、上拉输入、下拉输入、模拟输入、推挽输出、开漏输出、复用推挽输出、复用开漏输出8种工作模式,根据用户需要进行编程设置。

STM32F103ZET6具有7组I/O端口,PA~PG,每组端口16位,共112个I/O口。这些端口大都具有多重功能,既可作为常规I/O端口,又可编程为其它功能,如EXTI引脚、ADC通道引脚、SPI引脚、FSMC引脚、USART引脚等。

1 输入/输出端口的结构

1.1 输入/输出端口的结构

输入/输出端口电路是可编程的,主要由保护电路、输入驱动器、输出驱动器、输入数据寄存器和输出数据寄存器等构成,如图1所示。STM32F103ZET6具有112个这样的 I/O端口电路。

保护电路中的两个保护二极管,防止I/O引脚输入过高、过低的电压,烧毁芯片。因此I/O端口不能直接外接大功率器件。输入驱动器(Inputdriver)由TTL施密特触发器构成,相当于一个开关,把I/O端口的电平状态通过触发器送入输入数据寄存器。

输出驱动器(Output driver)由选择器、输出控制、含有PMOS管和N-MOS管的推挽结构电路组成,输出控制的输出是一对互补信号,推挽结构电路由互补信号控制,工作时两个管只有一个导通,功耗低。输出数据寄存器输出高电平时,控制输出亦为高电平,此时P-MOS管导通、N-MOS管截止,I/O端口输出高电平;输出数据寄存器输出低电平时,控制输出亦为低电平,那么P-MOS管截止、N-MOS管导通,I/O端口输出低电平。I/0端口输出的状态即是输出数据寄存器的状态。

1.2 输入/输出端口的工作模式

输入工作模式有浮空输入、上拉输入、下拉输入、模拟输入4种。浮空输入时,引脚内部什么也不用接,I/O的端口状态取决于用于外部信号;上拉输入时,上拉开关闭合,将不确定的信号通过内部电阻上拉到高电平,适用于输入信号为低电平有效的情况;下拉输入时,下拉开关闭合,将不确定的信号通过内部电阻接GND,适用于输入信号为高电平有效的情况;模拟输入时,把连续的模拟信号直接引入,常用于AD转换。注意,输入模式下,输出驱动器不工作,相当于断开。

图1:可编程I/O端口电路的基本结构

图2:端口配置低寄存器的设置位

图3:重映射和调试I/O配置寄存器的设置位

输出工作模式有推挽输出、开漏输出、复用推挽输出和复用开漏输出4种。推挽输出时,可以输出高/低电平,处理的是数字信号,输出高电平时,P-MOS管导通,N-MOS管截止,I/O端口联通VDD,输出低电平时,N-MOS管导通,P-MOS管截止,I/O端口联通VSS;开漏输出时,P-MOS管是关闭状态,无法直接输出高电平,需要外接上拉电阻,输出电压由上拉电阻连接的电源决定,输出低电平时,和推挽输出一样,I/O端口联通VSS,因此开漏输出模式适用于匹配电平的工况;复用推挽输出和复用开漏输出用于其它片内外设。注意,输出模式下,输入驱动器工作,开关闭合,可读取I/O端口的状态。

2 输入/输出端口的寄存器设置

2.1 GPIO寄存器的设置

GPIO是常规输入/输出端口,STM32F103ZET6有7组16位的GPIO,通过对GPIO寄存器编程,设置每个端口的工作模式。GPIO寄存器包括端口配置低寄存器(GPIOX_CRL)、端口配置高寄存器 (GPIOX_CRH)、输入数据寄存器 (GPIOX_IDR)、输出数据寄存器(GPIOX_ODR)、端口位设置/清除寄存器(GPIOX_BSRR)、端口位清除寄存器(GPIOX_BRR)、端口配置锁定寄存器(GPIOX_LCKR),均为32位寄存器(有的带保留位),所有x的范围为(A~G),A~G标识的是分组号。例如,GBIOB_CRL是B组的GPIO端口配置低寄存器,GPIOC_CRL是C组GPIO的端口配置低寄存器。

端口配置低寄存器(GPIOX_CRL)用于设置各组GPIO低8位端口的工作模式,寄存器的各设置位如图2所示,每位均可读写,每4位设置1位端口,其中低两位设置输入或输出(00表示输入模式,也是复位后的值;01表示输出模式,最大速度10MHZ;10表示输出模式,最大速度2MHZ;11表示输出模式,最大速度50MHZ),高两位设置具体工作模式(输入模式时,00表示模拟输入,01表示浮空输入,也是复位后的值,10表示上拉/下拉输入,联合设置输出数据寄存器ODR,区分上拉和下拉,11为保留;输出模式时,00表示通用推挽输出,01表示通用开漏输出,10表示复用推挽输出,11表示复用开漏输出)。例如,当设置GPIOA5为通用推挽输出模式时,GPIOA的端口配置低寄存器的内容可以设置为0x4424 4444。

端口配置高寄存器(GPIOX_CRH)用于设置各组GPIO高8位端口的工作模式,同GPIOX_CRL设置一样,不再赘述。输入数据寄存器(GPIOX_IDR),只读属性,高16位保留,16位形式读出,读出的值为对应I/O端口的状态。输出数据寄存器(GPIOX_ODR),读/写属性,高 16 位保留,16 位形式读/写,可以对各位清零或置1,那么对应的I/O端口便可以输出高电平或低电平。端口位设置/清除寄存器、端口位清除寄存器是用于为输出数据寄存器ODR的对应位清零或置1,不再赘述。端口配置锁定寄存器用来锁定端口位的配置,当对应的端口位锁定后,在下次系统复位之前不能再更改端口位的配置。

2.2 AFIO寄存器的设置

具有复用功能的I/O端口,其复用功能需要重新配置。例如,配置某个I/O端口为ADC的通道,这个I/O端口不能再作为GPIO使用,这个过程叫做复用重映射。复用重映射的过程是设置重映射和调试I/O配置寄存器(AFIO_MAPR),寄存器的各设置位如图3所示。

3 输入/输出端口的应用举例

利用输入/输出端口可实现一些信号控制,例如,STM32外接了按键电路和LED指示灯电路,控制要求如下:当按下S1按键时,让LED1和LED3灯闪烁,按下S2按键时LED1和LED3灯关闭;当按下S3按键时,让LED2和LED4灯闪烁,按下S4按键时LED2和LED4灯关闭。按键电路如图4所示,LED指示灯电路如图5所示。

图4 LED指示灯电路

图5:按键电路

图4中的4个LED为共阳极接法,另一端分别接了I/O端口B组的PB5口、E组的PE5口、A组的PA5和PA6,当这些端口输出低电平时,对应的LED指示灯亮,反之LED指示灯不亮。根据外接指示灯电路分析,这4个I/O端口的工作模式应设置为通用推挽输出。

图5中的4个按键开关分别接了I/O端口A组的PA0口和 E 组的 PE2、PE3、PE4口,其中 S1、S2、S3 是低电平信号有效,无信号时为高电平,而S4是高电平信号有效,无信号时为低电平。根据外接按键电路分析,这4个I/O端口的工作模式应设置为浮空输入。

LED指示灯对应I/O端口的设置(初始化)如下:

4个按键对应I/O端口的设置(初始化)如下:

以上代码中RCC、GPIOA、GPIOB、GPIOE被定义为结构体类型指针,对它们的各寄存器地址进行了描述,并且对相应的寄存器进行了设置,按照要求实现了浮空输入和通用推挽输出的设置。

4 小结

对于STM32的输入/输出端口设置,应先了解I/O端口的电路结构和工作模式,之后按使用要求对GPIO和AFIO寄存器进行合理配置,通过I/O端口使用的例子进一步掌握输入/输出端口的使用。

猜你喜欢

浮空低电平高电平
一种基于FPGA的PWM防错输出控制电路
铁道车辆高/低电平信号智能发生器设计
TS-03C全固态PDM中波发射机开关机控制电路原理及故障分析
基于单片机的全方位智能浮空广告机
2017款凯迪拉克2.8L/3.0L/3.2L/3.6L车型低电平参考电压总线电路图
DM 50KW中波广播发射机欠推动故障分析
PDM 1kW中波广播发射机保护电路分析
15-MeV电子直线加速器的低电平系统
建筑浮空结构可行性研究
集成电路静态参数测试