stm32f4xx bitbant 位带配置 使用寄存器 源码 GPIO

 位带 GPIO 先看源码

这个是bitbant.h文件

***************************************************************

#ifndef __BITBAND_H_
#define __BITBAND_H_

#include "stm32f4xx.h"

//找出别名区
//addr  --地址(寄存器)
//bit   --位(要操作的寄存器的位)
#define BITBAND(addr,bit)  (((addr & 0xF0000000) +0x2000000) + ((addr & 0xFFFFF)*8+bit)*4)
                                                            //别名区基地址            +  偏移量
//操作别名区
#define MEM_ADDR(addr,bit) *(volatile unsigned int *)BITBAND(addr,bit)


//PA6  --1 
//PAOut(6) =1;
//ODR
#define PAOut(bit)  MEM_ADDR((unsigned int)&GPIOA->ODR,bit)
#define PBOut(bit)  MEM_ADDR((unsigned int)&GPIOB->ODR,bit)
#define PCOut(bit)  MEM_ADDR((unsigned int)&GPIOC->ODR,bit)
#define PDOut(bit)  MEM_ADDR((unsigned int)&GPIOD->ODR,bit)
#define PEOut(bit)  MEM_ADDR((unsigned int)&GPIOE->ODR,bit)
#define PFOut(bit)  MEM_ADDR((unsigned int)&GPIOF->ODR,bit)    
#define PGOut(bit)  MEM_ADDR((unsigned int)&GPIOG->ODR,bit)
#define PHOut(bit)  MEM_ADDR((unsigned int)&GPIOH->ODR,bit)
//IDR
#define PAIn(bit)   MEM_ADDR((unsigned int)&GPIOA->IDR,bit)
#define PBIn(bit)   MEM_ADDR((unsigned int)&GPIOB->IDR,bit)
#define PCIn(bit)   MEM_ADDR((unsigned int)&GPIOC->IDR,bit)
#define PDIn(bit)   MEM_ADDR((unsigned int)&GPIOD->IDR,bit)
#define PEIn(bit)   MEM_ADDR((unsigned int)&GPIOE->IDR,bit)
#define PFIn(bit)   MEM_ADDR((unsigned int)&GPIOF->IDR,bit)    
#define PGIn(bit)   MEM_ADDR((unsigned int)&GPIOG->IDR,bit)
#define PHIn(bit)   MEM_ADDR((unsigned int)&GPIOH->IDR,bit)


#endif

*********************************************************************************

先设置基地址 再加上各寄存器偏移地址

可以值直接复制使用 寄存器分输入和输出

举例 :

配置输入模式的:

PAOut(5)= 1;//GPIO A组的第5个端口置位(高电平)

PEOut(7)= 0;//GPIO E组的第7个端口复位(低电平)

配置输入模式的:

PAIn(5)= 1;//GPIO 检测A组的第5个端口置位还是复位

PEiN(7)= 0;//GPIO E组的第7个端口置位还是复位

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值