寄存器介绍:
通过寄存器的位标注rw,我们可知这个寄存器的某个位是可读(r)并且可写的(w),我们也可以通过读寄存器里面的值得到引脚的配置信息,如果寄存器的位标注只有r或者w,那么就代表这个寄存器的这个位只能进行读(r)或者写(w)。
复位后IO口寄存器的值每一位可能不都是一样的,也就是说复位后IO口的状态、工作模式等不完全相同,一定要注意。
模式配置寄存器GPIOx_MODER,右上角用蓝色圆圈标识的地方告诉我们IO口的复位值,可以看到复位后对于A组IO口来说初始值0XA8000000,对于B组IO口初始值为0x00000280,其他组IO口都是0。该寄存器共 32 位,每 2个位控制 1个IO。
如图中左下角划蓝线的为第0位和第1位。通过往第0位写0,第1位写0配置成Input Mode(输入模式),通过往第0位写0,第1位写1配置成General purpose output Mode(普通输出模式),通过往第0位写1,第1位写0配置成Alternate function Mode(复用功能模式),通过往第0位写1,第1位写1配置成analog Mode(模拟模式)。
例如我们要把这个寄存器第0位写1,其他都写0,表示如下:
GPIOA->MODER |= 0x00000001;
这就相当于把A组的PA0口配置成了普通输出模式,其他IO口配置成了输入模式。
GPIOx_OTYPER寄存器用于控制 IO 的输出类型,仅用于输出模式,在输入模式下不起作用。该寄存器低 16 位(第0位-第15位)有效,每一个位控制一个 IO 口,根据往不同的位写1(开漏输出)/写0(推挽输出)来配置成不同的输出模式。复位后,该寄存器值均为 0,即默认为推挽输出。
例如我们往A组IO口的第0位写1那就将PA0成开漏输出模式:
GPIOA->OTYPER |= 0x00000001;
|