专注电子技术学习与研究
当前位置:单片机教程网 >> STM32 >> 浏览文章

关于STM32的GPIO

作者:枪炮紫苑   来源:枪炮紫苑   点击数:  更新时间:2014年07月09日   【字体:
初学STM32接触的是点灯程序,其实就是对ARM的GPIO口的熟悉和掌握。
在使用GPIO口前需要对对应的端口进行初始化,初始化的配置程序如下所示。
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure; //GPIO_InitStruct:指向结构GPIO_InitTypeDef的指针,包含了外设GPIO的配置信息
 
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; //设置端口
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //配置为开漏输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //IO口最高输出速度为2MHZ

  GPIO_Init(GPIOB, &GPIO_InitStructure);   //根据GPIO_InitStructure中指定的参数初始化外设GPIOx寄存器
}
以上代码可以参见STM32的固件库手册,里面有对每个函数的详细说明。
下面是对IO口的设置,这里设置IO口为低时LED灯点亮。
方法一:
GPIOB->BSRR = 0x2000D000;
这里我看了很久都没有弄明白,哎,这个值对初学者来说很难弄明白。后来查阅STM32103XX的参考手册才发现有BSRR的寄存器配置详细解说。看完后才恍然大悟。
前16位为BRy,置1时清楚对应ODRy;后16位为BSy,置1时设置对应ODRy;两者同时设置时,以BSy有效。



方法二:
GPIO_SetBits(GPIOB, GPIO_Pin_12 | GPIO_Pin_14 | GPIO_Pin_15);
GPIO_ResetBits(GPIOB, GPIO_Pin_13);
这个功能和方法一等效,但是易读,比较推荐这种写法,虽然多了一行语句。

方法三:
GPIO_WriteBit(GPIOB, GPIO_Pin_15, Bit_SET);
此方法适用于对单个端口的操作,比较方便。
Bit_SET设置数据端口位,Bit_RESET,清楚数据端口位。
OK,暂时就这么多。

相关文章