STM32 IO寄存器操作

本文详细介绍了STM32微控制器的IO端口配置及其常用寄存器。包括八种工作模式、每种模式对应的配置值及如何通过CRL、CRH等寄存器进行端口设置。

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

STM32的IO端口有八种模式:

1、输入浮空         5、开漏输出

2、输入上拉         6、推挽输出

3、输入下拉         7、推挽复用

4、模拟输入         8、开漏复用

每个IO口都有七个寄存器来控制:

CHL、CHR        :端口配置寄存器(32位)

IDR、ODR        :数据寄存器(32位)

BSRR                :置位/复位寄存器(32位)

BRR                  :复位寄存器(16位)

LCKR                :所存寄存器(32位)

其中,比较常用的IO端口寄存器为CRL,CRH,IDR,ODR

低配置寄存器CRL:

该寄存器复位值为0x4444 4444。即复位后IO口默认为浮空输入模式。STM32的CRL寄存器控制着每组IO端口的低8位。每4个位(2位MODE,2位CNF)即控制对应IO端口的输入输出模式和端口速度的配置。常用的配置有:0X0(模拟输入,ADC使用),0X3(推挽输出,50M速率),0X8(上下拉输入),0XB(复用输出,50M速率)。

CRH与CRL功能相同,CRH控制高八位(8-15),CRL控制低八位(0-7)。

例:想要设置PTC11为上拉输入,PTC12为推挽输出:
 

    GPIOC->CRH &= 0XFFF0 0FFF;  //清除该两位设置而不影响其他位

    GPIOC->CRH  |=  0X0003 8000; //C11输入,C12输出

    GPIOC->ODR  =   1<<11;//C11上拉

IDR是端口输入数据寄存器,只用了低16位,该寄存器是只读寄存器,并且只能以16位形式读出。

 

要想知道某个IO口的状态时,只需读该寄存器,看某位的状态即可。

ODR为端口输出数据寄存器,只用了低16位,可读写,读出来的状态可作为IO口输出状态的判断,写数据则改变对应IO端口的电平状态。

完整IO口初始化示例:

void LED_Init(void){

    RCC->APB2ENR |= 1<<2;    //使能PTA时钟

    RCC->APB2ENR |= 1<<5;    //使能PTD时钟

    GPIOA->CRH&=0XFFFF FFF0; //清空PA8设置

    GPIOA->CRH|=0X0000 0003; //设置PA8推挽输出

    GPIOA->ODR|=1<<8;  //PA8输出高

    GPIOD->CRL&=0XFFFF F0FF;//清空PD2设置

    GPIOD->CRL|=0X0000 0300;//设置PD2推挽输出

    GPIOD->ODR|=1<<2;//PD2输出高

}

需注意,任何外设在初始化之前,都需要配置其时钟。在上例中,APB2ENR为APB2总线上的外设时钟使能寄存器。

由上图所示,GPIOA和GPIOD的端口时钟分别在第二位和第五位,这两位置一即可使能这两个端口的时钟

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WKJay_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值