STM32不完全手册学习笔记--GPIO

RCC->APB2ENR|=1<<2;    //使能PORTA时钟  

RCC->APB2ENR|=1<<5;    //使能PORTD时钟   

GPIOA->CRH&=0XFFFFFFF0;

GPIOA->CRH|=0X00000003;//PA8 推挽输出   

GPIOA->ODR|=1<<8;      //PA8 输出

GPIOD->CRL&=0XFFFFF0FF;

GPIOD->CRL|=0X00000300;//PD.2推挽输出

GPIOD->ODR|=1<<2;      //PD.2输出高 

由上可以看出,对于GPIO操作,主要有以下几个步骤:

a、使能相应的GPIO时钟。

b、配置IO的功能,即配置CRH和CRL。

c、然后就是对GPIO初始化,操作。操作方式见如下两种

对整个GPIO口操作,需要用GPIOx_ODR寄存器,这个寄存器只能按16位操作。如果需要对某个位操作。则用到  IO 位段映射。下面简述两种方法

a、对GPIOx_ODR操作:

//PB0~7,作为数据线
#define      DATAOUT(x )    GPIOB->ODR=(GPIOB->ODR&0xff00)|(x&0x00FF); //输出  这样子操作不影响ODR的高8位。

b、位段映射方法:将IO口每一位映射到ram空间中去。

#define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)  //输出 

#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) 
#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr)) 
#define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum)) 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值