GPIO寄存器一览
GPIOx->CRL(x=A…E)
GPIOx->CRH(x=A…E)
GPIOx->IDR(x=A…E)
GPIOx->ODR(x=A…E)
GPIOx_BSRR(x=A…E)
GPIOx_BRR(x=A…E)
GPIOx->CRL(x=A…E)
这个寄存器主要是设置GPIO的低8位(0~7)端口的配置
MODE 用来设置端口输出的速度 (在输入模式下不需要配置,仅在输出模式下需要配置)CNF 用来设置输入模式或者输出模式
例如
设置PA0为推挽输出速度为50MHz
7-6-5-4-3-2-1-0
GPIOA->CRL&=0XFFFFFFF0;//PA0配置清零
GPIOA->CRL|=0X00000003;//PA0输出 速度50MHz
设置PA0为上下拉输入(默认下拉)
7-6-5-4-3-2-1-0
GPIOA->CRL&=0XFFFFFFF0;//PA0配置清零
GPIOA->CRL|=0X00000008;//PA0上下拉输入(默认下拉)
设置PB5为模拟输入
7-6-5-4-3-2-1-0
GPIOB->CRL&=0XFF0FFFFF;//PB5配置清零
GPIOB->CRL|=0X00000000;//PB5模拟输入
GPIOx->CRH(x=A…E)
设置PA10为推挽输出
15-14-13-12-11-10-9-8
GPIOA->CRH&=0XFFFFF0FF;//PA10配置清零
GPIOA->CRH|=0X00000300;//PA10输出 速度50MHz
设置PA10为上下拉输入(默认下拉)
设置PA10为推挽输出
15-14-13-12-11-10-9-8
GPIOA->CRH&=0XFFFFF0FF;//PA10配置清零
GPIOA->CRH|=0X00000800;//PA10上下拉输入(默认下拉)
设置PB15为模拟输入
15-14-13-12-11-10-9-8
GPIOB->CRH&=0X0FFFFFFF;//PB15配置清零
GPIOB->CRH|=0X00000000;//PB15模拟输入
GPIOx->IDR(x=A…E)
这个寄存器是用来读取当前端口的电平状态,低16位(0~15)每一位对应每一个端口
例如
读取PA0的数值
unsigned char a;
a=GPIOA->IDR&1<<0;
读取PB5的数值
unsigned char a;
a=GPIOB->IDR&1<<5;
读取PB15的数值
unsigned char a;
a=GPIOB->IDR&1<<15;
GPIOx->ODR(x=A…E)
这个寄存器是用来设置当前端口的电平状态,低16位(0~15)每一位对应每一个端口
例如
设置PA0为1
GPIOA->ODR|=1<<0;
设置PB5为1
GPIOB->ODR|=1<<5;
设置PA0为0
GPIOA->ODR|=0<<0;
GPIOx_BSRR(x=A…E)
这个寄存器是用来设置当前端口的电平状态,低16位(0~15)设置端口的电平为1,高16位设置端口电平为0
例如
设置PA0为1
GPIOA->BSRR|=1<<0;
设置PA0为0
GPIOA->BSRR|=1<<16;
设置PB5为1
GPIOB->BSRR|=1<<5;
设置PB5为0
GPIOA->BSRR|=1<<21;
GPIOx_BRR(x=A…E)
这个寄存器是用来清除当前端口的电平状态,也就是把电平状态设置为0
例如
清除PA0的电平状态
GPIOA->BRR|=1<<0;
清除PB5的电平状态
GPIOB->BRR|=1<<5;