STM32入门学习笔记之GPIO输入输出实验(上)

发布时间:
来源: 电子工程世界

5.1 STM32单片机GPIO概述

STM32中每个IO口都有很多个作用,比如这次我们使用的STM32F103ZET6的PA0口,既可以作为IO口使用,还可以作为待机唤醒(WAKEUP),模拟输入(ADC功能)等。根据数据手册中列出的每个I/O端口的特定硬件特征,GPIO端口的每个位可以由软件分别配置成多种模式。


(1)输入浮空

(2)输入上拉

(3)输入下拉

(4)模拟输入

(5)开漏输出

(6)推挽式输出

(7)推挽式复用功能

(8)开漏复用功能

每个I/O端口位可以自由编程,然而I/O端口寄存器必须按32位字被访问(不允许半字或字节访问)。GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器的读/更改的独立访问;这样,在读和更改访问之间产生IRQ时不会产生异常错误。


STM32F103系列的基本IO口结构如下图所示

图片

从结构图可以看出来,STM32的GPIO口可以配置好几个选项,内部上拉下拉电阻的选择,推挽输出或者开漏输出,对于复用功能,有专门的复用输入支路和输出支路。STM32F103的端口由10个寄存器控制,但是常用的并不多,时钟控制寄存器APB2ENR,模式控制寄存器CRH和CRL,输入寄存器IDR,输出寄存器ODR。

5.2 相关寄存器

5.2.1 APB2 外设时钟使能寄存器:RCC_APB2ENR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
-














15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- USART1EN - SPI1EN TIM1EN ADC2EN ADC1EN - IOPEEN IOPDEN IOPCEN IOPBEN IOPAEN - AFIOEN

Bit 14:串口1时钟使能(写1开启,写0关闭)

Bit 12:SPI1时钟使能(写1开启,写0关闭)

Bit 11:定时器1时钟使能(写1开启,写0关闭)

Bit 10:ADC2时钟使能(写1开启,写0关闭)

Bit 9:ADC1时钟使能(写1开启,写0关闭)

Bit 6:GPIOE时钟使能(写1开启,写0关闭)

Bit 5:GPIOD时钟使能(写1开启,写0关闭)

Bit 4:GPIOC时钟使能(写1开启,写0关闭)

Bit 3:GPIOB时钟使能(写1开启,写0关闭)

Bit 2:GPIOA时钟使能(写1开启,写0关闭)

Bit 0:辅助时钟IO时钟使能(写1开启,写0关闭)

5.2.2 端口配置低寄存器:GPIOx_CRL(x=A..E)

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
CNF7 MODE7 CNF6 MODE6 CNF5 MODE5 CNF4 MODE4







15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CNF3 MODE3 CNF2 MODE2 CNF1 MODE1 CNF0 MODE0







端口配置表:

bit 31Bit 30:bit 27Bit 26:bit 23Bit 22:bit 19Bit 18:bit 15Bit 14:bit 11Bit 10:bit 7Bit 6:bit 3Bit 2: CNFy[1:0]:端口y的配置位(y=0……7)输入模式下:00:模拟输入模式01:浮空输入模式(复位后的状态)10:上拉/下拉输入模式11:保留输出模式下:00:通用推挽输出模式01:通用开漏输出模式10:复用功能推挽输出模式11:复用功能开漏输出模式
bit 29Bit 28:bit 25Bit 24:bit 21Bit 20:bit 17Bit 16:bit 13Bit 12:bit 9Bit 8:bit 5Bit 4:bit 1Bit 0: MODEy[1:0]:端口y的模式位(y=0……7)00:输入模式(复位后的状态)01:输出模式,最大速度10MHz10:输出模式,最大速度2MHz11:输出模式,最大速度50MHz

5.2.3 端口配置高寄存器:GPIOx_CRH(x=A..E)

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
CNF15 MODE15 CNF14 MODE14 CNF13 MODE13 CNF12 MODE12







15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CNF11 MODE11 CNF10 MODE10 CNF9 MODE9 CNF8 MODE8







配置方式和端口配置低寄存器一致。

5.2.4 端口输入数据寄存器:GPIOx_IDR(x=A..E)

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
-














15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0

Bit 15~Bit 0:端口输入数据(这些位属于只读并只能以字的形式读出)


文章来源于: 电子工程世界 原文链接

本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。