STM32F10x的多端口位绑定方法

这篇博客详细介绍了如何使用STM32的GPIO位带操作来快速绑定和控制各个端口位。通过定义宏,可以便捷地对A到E端口的输入输出寄存器进行位带操作,实现对单个GPIO位的读写。这种方法简化了对GPIO的编程,提高了代码的可读性和效率。
摘要由CSDN通过智能技术生成

快捷绑定所有端口的位,直接调用,效果如下:
在这里插入图片描述

方法:

#define GPIO_ODR_A (GPIOA_BASE+0X0C)  //定义A~E端口基地址
#define GPIO_IDR_A (GPIOA_BASE+0X08)
#define GPIO_ODR_B (GPIOB_BASE+0X0C)
#define GPIO_IDR_B (GPIOB_BASE+0X08)
#define GPIO_ODR_C (GPIOC_BASE+0X0C)
#define GPIO_IDR_C (GPIOC_BASE+0X08)
#define GPIO_ODR_D (GPIOD_BASE+0X0C)
#define GPIO_IDR_D (GPIOD_BASE+0X08)
#define GPIO_ODR_E (GPIOE_BASE+0X0C)
#define GPIO_IDR_E (GPIOE_BASE+0X08)

通过公式得出:

#define BitBand(Addr,BitNum) *((volatile unsigned long *)((Addr&0xf0000000)+0x2000000+((Addr&0xfffff)*32)+(BitNum*4)))
//#define BitBand(Addr,BitNum) *((volatile unsigned long *)((Addr&0xf0000000)+0x2000000+((Addr&0xfffff)<<5)+(BitNum<<2)))

Addr&0xf0000000 、Addr&0xfffff :作用是判断是SRAM还是片上外设的。
volatile unsigned long * :是指向的地址的数据类型。

#define	PAout(n) BitBand(GPIO_ODR_A,n) //PAout是A端口输出,n是第n位,以此类推
#define	PAin(n) BitBand(GPIO_IDR_A,n)
#define	PBout(n) BitBand(GPIO_ODR_B,n)
#define	PBin(n) BitBand(GPIO_IDR_B,n)
#define	PCout(n) BitBand(GPIO_ODR_C,n)
#define	PCin(n) BitBand(GPIO_IDR_C,n)
#define	PDout(n) BitBand(GPIO_ODR_D,n)
#define	PDin(n) BitBand(GPIO_IDR_D,n)
#define	PEout(n) BitBand(GPIO_ODR_E,n)
#define	PEin(n) BitBand(GPIO_IDR_E,n)

可直接对某一位操作
效果如图:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琅中之嶹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值