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

  • Post author:
  • Post category:其他


例子://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 )。

完结!



版权声明:本文为qq_52449680原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。