stm32单片机GPIO端口使用

本文详细介绍了STM32微控制器中IO口的配置方法,包括端口配置寄存器CRL和CRH的使用,以及不同工作模式如模拟输入、浮空输入等的配置流程。同时给出了具体实例,例如流水灯和按键初始化的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  STM32的每个IO口有7个寄存器控制(1个IO口应该就是一组),分别是两个32位的端口配置寄存器,CRL和CRH。两个32位的数据寄存器IDR和ODR(这上面四个是重点),一个32位置位复位寄存器,一个16位复位寄存器,一个锁存寄存器LCKR.
 
________________________________________________________________________________________________________________
 
端口配置寄存器
 
       端口配置寄存器CRL和CRH有两部分组成   CNFX和MODEX      
 
                通过设置这两个来确定模式      (1)GPIO_Mode_AIN 模拟输入 
                                                                (2)GPIO_Mode_IN_FLOATING 浮空输入
                                                                (3)GPIO_Mode_IPD 下拉输入 
                                                                (4)GPIO_Mode_IPU 上拉输入 
                                                                (5)GPIO_Mode_Out_OD 开漏输出
                                                                (6)GPIO_Mode_Out_PP 推挽输出
                                                                (7)GPIO_Mode_AF_OD 复用开漏输出
                                                                (8)GPIO_Mode_AF_PP 复用推挽输出
    如果IO口是0-7的话用CRL寄存器,如果是8-15的话用CRH寄存器
 
 
 
使用说明:     MODE         模式                                                    
 
                         00           输入模式
 
                         01           输出模式  10MHZ
 
                         10           输出模式  2MHZ
 
                         11           输出模式  50MHZ
 
                  
 
                      CNF           所处模式                表达含义
 
                       00               输入                     模拟输入模式
 
                       01               输入                     浮空输入模式
 
                       10               输入                     上拉\下拉输入模式
 
                       11               输入                      保留
 
 
 
                       00              输出                      推挽输出模式
 
                       01              输出                      开漏输出模式
 
                       10              输出                      复用功能 推挽输出模式
 
                       11             输出                     复用功能开漏输出模式
 
 
 
使用方法:
 
             首先是APB2总线上的外设始能寄存器,只要加外设就要将这个使能
 
                                              RCC->APB2ENR  |= 1<<几位   根据表来说
 
              然后开始配置
 
                         
                                       GPIOB->CRH &= 0XFFFFFFF0;                 通过与将要写数据的位进行清空
                                       GPIOB->CRH |= 0X03;                              在要写的为写内容
                                        GPIOB->ODR = 1<<8;                             在第几位写入数据
 
                       ODR是输出数据寄存器
 
 
 
GPIO端口使用举例
 
__________________________________________________________________________________________________________________
 
流水灯的.c文件
 
void LED_Init (void)
{
 
//两个RCC是使能时钟
 RCC->APB2ENR |= 1<<3;   
 
 RCC->APB2ENR |= 1<<6;   
 
 GPIOB->CRL &= 0XFF0FFFFF;
 GPIOB->CRL |= 0X00300000;
 GPIOB->ODR = 1 << 5;
 
 GPIOE->CRL &= 0XFF0FFFFF;
 GPIOE->CRL|=0X00300000;    //PE.5
 GPIOE->ODR|=1<<5;          //PE.5
}
 
.h文件
 
# define LED0 PBout (5)
# define LED1 PEout (5)
因为是输出,所以用PXout (引脚号)
 
——————————————————————————————————————————————
 
 
 
按键的初始化
 
 
void KEY_Init (void)
{
 RCC->APB2ENR |= 1<<2;
 RCC->APB2ENR |= 1<<6;
 
 GPIOA->CRL &= 0XFFFFFF0;
 GPIOA->CRL |= 0X0000008;   
// GPIOA->ODR |= 1<<1;  GPIOE->CRL &= 0XFFF000FF;
 GPIOE->CRL |= 0X00088800;
 GPIOE->ODR |= 7<<2;    //7<<2   从7的位置右移5位
 
}
 

注意.h文件
 
 
#define KEY0 PEin(4)    //PE4
#define KEY1 PEin(3) //PE3
#define KEY2 PEin(2) //PE2
#define KEY3 PAin(0) //PA0  WK_UP
因为是输入,所以用的是PXin (引脚号)
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值