STM32端口IO方向设置问题
STM32端口寄存器配置
STM32 的 IO 口可以由软件配置成如下 8 种模式:
1 、输入浮空
2 、输入上拉
3 、输入下拉
4 、模拟输入
5 、开漏输出
6 、推挽输出
7 、推挽式复用功能
8 、开漏复用功能
每个 IO 口可以自由编程,但 IO 口寄存器必须要按 32 位字被访问。 STM32 的很多 IO 口都
是 5V 兼容的,这些 IO 口在与 5V 电平的外设连接的时候很有优势,具体哪些 IO 口是 5V 兼容
的,可以从该芯片的数据手册管脚描述章节查到( I/O Level 标 FT 的就是 5V 电平兼容的)。
STM32 的每个 IO 端口都有 7 个寄存器来控制。他们分别是:配置模式的 2 个 32 位的端口
配置寄存器 CRL 和 CRH ; 2 个 32 位的数据寄存器 IDR 和 ODR ; 1 个 32 位的置位 / 复位寄存器
BSRR ;一个 16 位的复位寄存器 BRR ; 1 个 32 位的锁存寄存器 LCKR ;这里我们仅介绍常用 的
几个寄存器,我们常用的 IO 端口寄存器只有 4 个: CRL 、 CRH 、 IDR 、 ODR 。
CRL 和 CRH 控制着每个 IO 口的模式及输出速率。
STM32 的 IO 口位配置表如表 6.1.1 所示:
![](https://file.elecfans.com/web2/M00/09/75/poYBAGD1wY-ADTlJAASmEc5txos137.png)
该寄存器的复位值为 0X4444 4444,从图 6.1.1 可以看到,复位值其实就是配置端口为浮空
输入模式。从上图还可以得出:STM32 的 CRL 控制着每组 IO 端口(A~G)的低 8 位的模式。
每个 IO 端口的位占用 CRL 的 4 个位,高两位为 CNF,低两位为 MODE。这里我们可以记住几 个常用的配置,
比如 0X0 表示模拟输入模式(ADC 用)、0X3 表示推挽输出模式(做输出口用, 50M 速率)、0X8 表示上/下拉输入模式(做输入口用)、0XB 表示复用输出(使用 IO 口的第二 功能,50M 速率)。
CRH 的作用和 CRL 完全一样,只是 CRL 控制的是低 8 位输出口,而 CRH 控制的是高 8 位输出口。这里我们对 CRH 就不做详细介绍了。
给个实例,比如我们要设置 PORTC 的 11 位为上拉输入,12 位为推挽输出。代码如下:
GPIOC-》CRH&=0XFFF00FFF; //清掉这 2 个位原来的设置,同时也不影响其他位的设置
GPIOC-》CRH|=0X00038000; //PC11 输入,PC12 输出
GPIOC-》ODR=1《《11;
//PC11 上拉
通过这 3 句话的配置,我们就设置了 PC11 为上拉输入,PC12 为推挽输出。
IDR 是一个端口输入数据寄存器,只用了低 16 位。该寄存器为只读寄存器,并且只能以
16 位的形式读出。该寄存器各位的描述如图 6.1.2 所示:
![](https://file.elecfans.com/web2/M00/09/7A/pYYBAGD1wZOAVjBtAAMYx6vUM5Q389.png)
STM32端口IO方向设置问题
STM32端口寄存器配置
STM32 的 IO 口可以由软件配置成如下 8 种模式:
1 、输入浮空
2 、输入上拉
3 、输入下拉
4 、模拟输入
5 、开漏输出
6 、推挽输出
7 、推挽式复用功能
8 、开漏复用功能
每个 IO 口可以自由编程,但 IO 口寄存器必须要按 32 位字被访问。 STM32 的很多 IO 口都
是 5V 兼容的,这些 IO 口在与 5V 电平的外设连接的时候很有优势,具体哪些 IO 口是 5V 兼容
的,可以从该芯片的数据手册管脚描述章节查到( I/O Level 标 FT 的就是 5V 电平兼容的)。
STM32 的每个 IO 端口都有 7 个寄存器来控制。他们分别是:配置模式的 2 个 32 位的端口
配置寄存器 CRL 和 CRH ; 2 个 32 位的数据寄存器 IDR 和 ODR ; 1 个 32 位的置位 / 复位寄存器
BSRR ;一个 16 位的复位寄存器 BRR ; 1 个 32 位的锁存寄存器 LCKR ;这里我们仅介绍常用 的
几个寄存器,我们常用的 IO 端口寄存器只有 4 个: CRL 、 CRH 、 IDR 、 ODR 。
CRL 和 CRH 控制着每个 IO 口的模式及输出速率。
STM32 的 IO 口位配置表如表 6.1.1 所示:
![](https://file.elecfans.com/web2/M00/09/75/poYBAGD1wY-ADTlJAASmEc5txos137.png)
该寄存器的复位值为 0X4444 4444,从图 6.1.1 可以看到,复位值其实就是配置端口为浮空
输入模式。从上图还可以得出:STM32 的 CRL 控制着每组 IO 端口(A~G)的低 8 位的模式。
每个 IO 端口的位占用 CRL 的 4 个位,高两位为 CNF,低两位为 MODE。这里我们可以记住几 个常用的配置,
比如 0X0 表示模拟输入模式(ADC 用)、0X3 表示推挽输出模式(做输出口用, 50M 速率)、0X8 表示上/下拉输入模式(做输入口用)、0XB 表示复用输出(使用 IO 口的第二 功能,50M 速率)。
CRH 的作用和 CRL 完全一样,只是 CRL 控制的是低 8 位输出口,而 CRH 控制的是高 8 位输出口。这里我们对 CRH 就不做详细介绍了。
给个实例,比如我们要设置 PORTC 的 11 位为上拉输入,12 位为推挽输出。代码如下:
GPIOC-》CRH&=0XFFF00FFF; //清掉这 2 个位原来的设置,同时也不影响其他位的设置
GPIOC-》CRH|=0X00038000; //PC11 输入,PC12 输出
GPIOC-》ODR=1《《11;
//PC11 上拉
通过这 3 句话的配置,我们就设置了 PC11 为上拉输入,PC12 为推挽输出。
IDR 是一个端口输入数据寄存器,只用了低 16 位。该寄存器为只读寄存器,并且只能以
16 位的形式读出。该寄存器各位的描述如图 6.1.2 所示:
![](https://file.elecfans.com/web2/M00/09/7A/pYYBAGD1wZOAVjBtAAMYx6vUM5Q389.png)
举报