GPIO寄存器
GPIO寄存器一览
以下图片全部摘自STM32中文参考手册
GPIOx->CRL(x=A…E)
这个寄存器主要是设置GPIO的低8位(0~7)端口的配置
- MODE 用来设置端口输出的速度 (在输入模式下不需要配置,仅在输出模式下需要配置)
- CNF 用来设置输入模式或者输出模式
例如
设置PA0为推挽输出速度为50MHz
GPIOA->CRL&=0XFFFFFFF0;//PA0配置清零
GPIOA->CRL|=0X00000003;//PA0输出 速度50MHz
设置PA0为上下拉输入(默认下拉)
GPIOA->CRL&=0XFFFFFFF0;//PA0配置清零
GPIOA->CRL|=0X00000008;//PA0上下拉输入(默认下拉)
设置PB5为模拟输入
GPIOB->CRL&=0XFF0FFFFF;//PB5配置清零
GPIOB->CRL|=0X00000000;//PB5模拟输入
如果看不懂最好复习一下子2进制和16进制之间的转换
GPIOx->CRH(x=A…E)
这个寄存器和GPIOx->CRL大同小异,不同的是这个寄存器是设置高8位(8~15)端口的配置
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;
看不懂的最好复习一下C语言的位运算
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;
GPIOx_LCKR(x=A…E)
这个寄存器是用来锁住当前端口的配置
不常用,所有就没有记笔记了
个人总结
常用的寄存器有GPIOx->CRL,GPIOx->CRH,GPIOx->ODR,GPIOx->IDR
需要熟练掌握位运算,2进制与16进制之间的转换