tm32寄存器版本学习笔记 GPIO的配置
一:STM32的 I/O口可配置八种模式
输出:
1.推挽输出:引脚接GND,IO输出0,引脚接VCC,IO输出1.读输入是未知的。
2.开漏输出:引脚接GND,IO输出0,引脚悬空,IO输出1,需要外接上拉电阻,才能实现输出高电平。
也就是说当输出为1时,IO口的状态是由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或者不变。
可以读IO输入电平变化,实现C51的IO双向功能。
3.复用功能推挽输出:片内外设功能(I2C的SCL,SDA)
4.复用功能开漏输出:片内外设功能(TX1,MOSI,MISO.SCK.SS)
输入:
1.模拟输入:ADC模拟输入或者低功耗模式(这模式我是没用过)
2.浮空输入:可以做KEY识别,RX1
3.下拉输入:内部下拉电阻输入
4.上拉输入:内部上拉电阻输入
二:GPIO配置步骤
1.APB2外设时钟使能寄存器(RCC_APB2ENR)

Eg:RCC->APB2ENR| = 1 << 2; //使能PORTA时钟
2.端口配置低寄存器(GPIOx_CRL) (x=A..E)


Eg:
GPIOA->CRL &=0xfffffff0; //把原有的寄存器位置清0
GPIOA->CRL |= 0x00000003; //PA0推挽输出 3---0011 二进制 右边开始
3.端口输入数据寄存器(GPIOx_IDR) (x=A..E)

这个寄存器是读取引脚高低电平
Eg: if((GPIOA->IDR&(1<<5))) //判断PA5是否输出1
4.端口输出数据寄存器(GPIOx_ODR) (x=A..E)

Eg: GPIOA->ODR |= 1 <<8; //PA8输出高
三:举例程序初始化
void GPIO_Init(void)
{
RCC->APB2ENR|=1<<2; //使能PORTA时钟
RCC->APB2ENR|=1<<4; //使能PORTC时钟
GPIOA->CRL&=0XFFFFFFF0;
GPIOA->CRL|=0X00000008; //PA0设置成上下拉输入
GPIOA->CRL&=0XFFFFFF0F;
GPIOA->CRL|=0X000000B0; //PA1设置成复用功能推挽输出 50MHZ
GPIOA->CRH&=0X0FFFFFFF;
GPIOA->CRH|=0X80000000; //PA15设置成上下拉输入
GPIOA->ODR|=1<<15; //PA15配置高电平 上拉 PA0默认下拉
GPIOC->CRL&=0XFF0FFFFF;
GPIOC->CRL|=0X00800000; //PC5设置成上下拉输入
GPIOC->ODR|=1<<5; //PC5配置高电平上拉
}
浙公网安备 33010602011771号