STM32的IO口能够由软件装备成8种方式:
1、输入浮空
2、输入上拉
3、输入下拉
4、模仿输入
5、开漏输出
6、推挽输出
7、推挽式复用功用
8、开漏复用功用
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。
STM32的IO口位装备表如表3.1.1.1所示:
STM32输出方式装备如表3.1.1.2所示:
该寄存器的复位值为0X4444 4444,从上图能够看到,复位值其实便是装备端口为浮空输入方式。从上图还能够得出:STM32的CRL操控着每个IO端口(A~G)的低8位的方式。每个IO端口的位占用CRL的4个位,高两位为CNF,低两位为MODE。这儿咱们能够记住几个常用的装备,比方0X0表明模仿输入方式(ADC用)、0X3表明推挽输出方式(做输出口用,50M速率)、0X8表明上/下拉输入方式(做输进口用)、0XB表明复用输出(运用IO口的第二功用,50M速率)。
给个实例,比方咱们要设置PORTC的11位为上拉输入,12位为推挽输出。代码如下:
GPIOC->CRH&=0XFFF00FFF;//清掉这2个位本来的设置,一起也不影响其他位的设置
GPIOC->CRH|=0X00038000; //PC11输入,PC12输出
GPIOC->ODR=1<<11;//PC11上拉
IDR是一个端口输入数据寄存器,只用了低16位。该寄存器为只读寄存器,而且只能以16位的方式读出。该寄存器各位的描绘如下图所示:
要想知道某个IO口的状况,你只需读这个寄存器,再看某个位的状况就能够了。运用起来是比较简单的。
ODR是一个端口输出数据寄存器,也只用了低16位。该寄存器为可读写,从该寄存器读出来的数据能够用于判别当时IO口的输出状况。而向该寄存器写数据,则能够操控某个IO口的输出电平。该寄存器的各位描绘如下图所示:
在此,咱们能够总结一下,关于学过AVR的人来说,咱们都知道AVR的IO口由3个寄存器操控:DDR、 PORT、PIN。这儿咱们能够拿STM32的IO操控寄存器和AVR的来个类比:
1,
STM32的CRL和CRH就相当于AVR的DDR寄存器,用来操控IO口的方向,只不过STM32的CRL和CRH功用更强大一点算了。
2,
STM32的ODR就相当于AVR的PORT,都是用来操控IO口的输出电平或许上下拉电阻的。
3,
STM32的IDR就相当于AVR的PIN,都是用来存储IO口当时的输入状况(凹凸电平)的。
除此之外,STM32还有BSRR、BRR、LCKR等几个寄存器用于操控IO口,这点是AVR所没有的。