STM32的每个IO端口都有7个寄存器来控制。分别是:配置模式的2个32位的端口配置寄存器CRL和CRH;2个32位的数据寄存器IDR和ODR;一个32位置位/复位寄存器BSRR;一个16位的复位寄存器BRR;一个32位的锁存寄存器LCKR。
CRL和CRH控制着每个IO口的模式及输出速率。
CRH的作用和CRL完全一样,只是CRL控制的是低八位输出口,而CRH控制的是高八位输出口。
在固件库开发中,操作寄存器CRH和CRL来配置IO口的模式和速度是通过GPIO初始化函数完成:
void GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypedef*GPIO_InitStruct);这个函数有两个参数,第一个参数是用来指定GPIO,取值范围为GPIOA~GPIOG
第二个参数为初始化参数结构体指针,结构体类类型为GPIO_InitTypeDef.
GPIO初始化常用格式是:
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-->PB.5 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度 50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数配置 GPIO