关于stm32的GPIO寄存器操作(一)

例子://PB7

#define DS1302_DATA_INPUT()     {GPIOB->CRL&= 0X0FFFFFFF;GPIOB->CRL|= 0x80000000;}  //上拉或下拉输入
#define DS1302_DATA_OUTPUT()    {GPIOB->CRL&= 0X0FFFFFFF;GPIOB->CRL|= 0x30000000;}  //推挽输出,输出模式位50MHz

或者
#define DS1302_DATA_INPUT()  {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)8<<28;}  
#define DS1302_DATA_OUTPUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)3<<28;} 

讲解:

操作GPIOx某引脚设置位输出或输入模式

1、首先看懂CNFy【】与MODEy【】对模式的选择,如表17

MODE1  MODE0为00时,表示为输入模式,        此时CNF1  CNF0为

            00 :模拟输入              01:浮空输入         10:上拉或下拉输入

MODE1  MODE0不为00时,表示为输出模式          此时CNF1  CNF0为

    00 :推挽输出             01:开漏输出         10:复用推挽输出    11: 10:复用开漏输出

MODE1  MODE0不为00,此时可以对输出速度进行选择:

01:最大输出速度为10MHz      10:最大输出速度为2MHz          11:最大输出速度为50MHz
 

2、对端口配置寄存器进行配置(GPIOx_CRL、GPIOx_CRH),PB7为例

 看懂这张图,每4位就是对GPIOx的某引脚操作,这张图是GPIOx->CRL,是引脚0到引脚7的。

首先,PB7处于这张图的28到31的位置,CRL进行位清零 GPIOB->CRL&=0X0FFFFFFF

接着,配置为推挽输出,50MHz输出速度,GPIOB->CRL|= 0x30000000

(或GPIOB->CRL|=(u32)3<<28 )。

完结!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值