STM32 GPIO的配置寄存器(CRL、CRH)快速学习

您所在的位置:网站首页 uvwarning什么意思 STM32 GPIO的配置寄存器(CRL、CRH)快速学习

STM32 GPIO的配置寄存器(CRL、CRH)快速学习

2023-12-24 07:11| 来源: 网络整理| 查看: 265

1、问题

在使用STM32的时候配置GPIO是最常见的操作,可以使用比较简单明白的库函数配置,但很繁杂。使用寄存器的方式可以快速配置,对于同一个IO口的输入输出都需要使用到的时候,比如IIC通讯的SDA接口就是要输出和检测输入。

我们在很多工程都能看到比如下面的一些代码:

//IO方向设置 #define SDA_IN() {GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=8;} #define SDA_OUT() {GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=3;}

代码:GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=8;是什么意思呢?意思很简单就是配置IO的工作模式嘛!至于是怎么来写,我以前一直没弄懂,现在弄懂了记录下来。

2、GPIO的配置寄存器CRL和CRH

STM32的一组GPIO有16个IO口,比如GPIOA这一组,有GPIOA0~GPIOA15一共16个IO口。每一个IO口需要寄存器的4位用来配置工作模式。

那么一组GPIO就需要16x4=64位的寄存器来存放这一组GPIO的工作模式的配置,但STM32的寄存器都是32位的,所以只能使用2个32位的寄存器来存放了。CRL用来存放低八位的IO口(GPIOx0—GPIOx7)的配置,CRH用来存放高八位的IO口(GPIOx8—GPIOx15)的配置。

这两个寄存器的全称是:端口配置低寄存器(GPIOx_CRL) (x=A…E) 和 端口配置高寄存器(GPIOx_CRH) (x=A…E)

也就是每一组GPIO都有两个32位的寄存器是用来配置IO口的工作模式的。

我们都清楚STM32的GPIO有八种工作模式,4个二进制数可以组合出16种情况,而我们只需要8种就行了。至于4位数怎么组合是什么工作模式,我们看STM32的手册。

3、工作模式的配置

我们直接看手册的说明: 在这里插入图片描述 在这里插入图片描述 可以看出,4位中又分为了CNFy和MODEy(y表示这组GPIO的第几个IO口),现在我们分析这两个的作用。 MODEy:

00:输入模式(复位后的状态) 01:输出模式,最大速度10MHz 10:输出模式,最大速度2MHz 11:输出模式,最大速度50MHz

可以看出MODEy是用来配置是输出还是输入模式的。一般是使用00和11这两种情况。00是输入模式,11是输出模式。

CNFy:

在输入模式(MODE[1:0]=00): 00:模拟输入模式 01:浮空输入模式(复位后的状态) 10:上拉/下拉输入模式 11:保留 在输出模式(MODE[1:0]>00): 00:通用推挽输出模式 01:通用开漏输出模式 10:复用功能推挽输出模式 11:复用功能开漏输出模式

这些就是CNFy的配置,配置具体的工作模式。配合MODEy就可以配置出所有的工作模式了。 比如我需要配置上拉输入模式,那么4位寄存器的配置就是CNFy【10】MODEy【00】:1000换成十进制数就是8。

GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=8;

所以这段代码的意思就是将GPIOA0配置成上拉(下拉)输入模式。

4、配置代码的解析

如果 需要将GPIOB9配置成上拉(下拉)输入模式。 它的代码是:

GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=8


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3