通用IO功能描述
6.1.1GPIO端口
24个GPIO引脚可分为三组端口:PA、PB、PC。根据它们在GPIO寄存器中的位,每组端口中的GPIO又分别编号为0-7。
注:由于GPIO端口寄存器的功能是相同的,使用符号Px代表PA、PB、PC。例如,GPIO_PxIN代表寄存器GPIO_PAIN、GPIO_PBIN、GPIO_PCIN。
三组GPIO端口中的任何一组都有以下的这些寄存器,它们的低8位对应端口中的8个GPIO引脚:
● GPIO_PxIN(输入数据寄存器)返回引脚的电平(模拟模式除外)。
● GPIO_PxOUT(输出数据寄存器)在正常输出模式下控制输出电平。
● GPIO_PxCLR(清除输出数据寄存器)清除GPIO_PxOUT中的位。
● GPIO_PxSET(设置输出数据寄存器)设置GPIO_PxOUT中的位。
● GPIO_PxWAKE(唤醒监控寄存器)指定能够唤醒STM32W108的引脚。
除了这些寄存器,每个端口还有一对配置寄存器,GPIO_PxCFGH和GPIO_PxCFGL。这些寄存器为端口引脚指定了基本操作模式。GPIO_PxCFGL配置引脚Px[3:0],GPIO_PxCFGH配置引脚Px[7:4],符号GPIO_PxCFGH/L指的就是这一对配置寄存器。
PA6、PA7、PB6、PB7和PC0 5个GPIO引脚可以实现比一般标准通用输出更强的输出电流。
6.1.2配置
每个引脚在GPIO_PxCFGH/L寄存器中都有一个4位的配置值,不同的GPIO模式和其对应的4位配置值参考表6.1。
表6.1. GPIO配置模式
GPIO模式 | GPIO_PxCFGH/L | 描述 |
模拟 | 0x0 | 模拟输入或输出,当在模拟模式,数字输入(GPIO_PxIN)读总是1 |
输入(浮空) | 0x4 | 不带有内部上拉或下拉的数字输入,输出被禁用 |
输入(上拉或下拉) | 0x8 | 带有内部上拉或下拉的数字输入,通过设置GPIO_PxOUT中的一个位来选择上拉,或清除一个位来选择下拉,输出被禁用 |
输出(推挽模式) | 0x1 | 推挽输出,GPIO_PxOUT控制该输出 |
输出(开漏模式) | 0x5 | 开漏输出,GPIO_PxOUT控制该输出,如果需要一个上拉电阻,则须外接 |
复用输出(推挽模式) | 0x9 | 推挽输出,片上外设控制它的输出 |
复用输出(开漏模式) | 0xD | 开漏输出,片上外设控制它的输出,如果需要一个上拉电阻,则须外接 |
复用输出(推挽模式) SPI SCLK模式 | 0xB | 推挽输出模式仅用于SPI为主模式时的SCLK引脚 |
如果一个GPIO有两个外设,可以作为复用输出模式数据源,那么除了GPIO_PxCFGH/L寄存器,还需要其它寄存器共同决定哪个外设控制输出。
定时器2和串口控制器可以与多个GPIO共享一个复用输出引脚,定时器2的TIM2_OR寄存器中的一些位控制定时器2的输出到不同的GPIO引脚,TIM2_CCER寄存器中的一些位使能定时器2的输出。在定时器2输出使能的情况下,它们会覆盖串口控制器的输出。根据寄存器TIM2_OR中的一些位,表6.2显示了GPIO对于定时器2的输出映射。
表6.2.定时器2的输出配置控制
定时器2输出 | 寄存器选择位 | TIM2_OR位决定的GPIO映射 | |
0 | 1 | ||
TIM2_CH1 | TIM2_OR[4] | PA0 | PB1 |
TIM2_CH2 | TIM2_OR[5] | PA3 | PB2 |
TIM2_CH3 | TIM2_OR[6] | PA1 | PB3 |
TIM2_CH4 | TIM2_OR[7] | PA2 | PB4 |
当输出配置为串口控制时,串行接口模式寄存器(SCx_MODE)决定GPIO的引脚如何被使用。
PA4和PA5的复用输出既可以提供跟踪数据包PTI_EN和PTI_DATA,也可以同步CPU跟踪数据TRACEDATA2和TRACEDATA3。
如果在复用输出模式下GPIO与外设无关,它的输出将被设置为0。