STM32直接操作寄存器方法

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;
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值