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配置高电平上拉

 

posted @ 2021-04-12 16:36  一个爱搬运的球  阅读(1475)  评论(0)    收藏  举报