分享

初识stm32的GPIO

 心不留意外尘 2016-06-11

http://blog.csdn.net/lpp0900320123/article/details/27212945

2014

stm32端口有8中工作模式,4中输入(上拉、下拉、浮空、模拟输入),4中输出(开漏、推免、开漏复用、推免复用),具体8中工作模式区别可以参考博文:http://blog.csdn.net/lpp0900320123/article/details/27208911

问题:点亮开发板上的一个LED灯,0点亮,1熄灭;LED灯连接GPIOC的第3个管脚;

需要以下步骤:

(1)开启外设时钟

(2)配置管脚的输入输出方式

(3)设置管脚的电平

1.开启外设时钟

stm32的外设默认时钟源是关闭的,当用到相应的外设,再开启相应的外设的时钟,这样可以降低功耗;首先应该查看外设挂在哪条总线上,再调用相应的时钟函数,可以通过查看库帮助手册去查看总线上挂的相应的外设;

void RCC_AHBPeriphClockCmd  ( uint32_t  RCC_AHBPeriph,   FunctionalState  NewState  ) 
void RCC_APB1PeriphClockCmd  ( uint32_t  RCC_APB1Periph,  FunctionalState  NewState  ) 
void RCC_APB2PeriphClockCmd  ( uint32_t  RCC_APB2Periph,  FunctionalState  NewState   ) 

上面三个函数分别开启AHB、APB1、APB2 总线时钟。GPIOC挂在APB2总线上,所以需要APB2总线时钟。

RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOC,ENABLE);

2.配置管脚的输入输出方式

st库通过函数GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); 实现GPIO管脚的工作方式的配置,这里有一个自定义的数据类型GPIO_InitTypeDef,被封装成结构体了。

 typedef struct
{
  uint16_t GPIO_Pin;            //配置引脚
  GPIOSpeed_TypeDef GPIO_Speed;   //引脚的输出速度(输出模式下才配置)
  GPIOMode_TypeDef GPIO_Mode;    //引脚的工作模式
}GPIO_InitTypeDef;


下面是代码实现:

          GPIO_InitTypeDef GPIO_InitStruct;   //定义结构体变量
 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5 ;
 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;  //推免输出
 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOC,&GPIO_InitStruct);    //初始化

3.设置管脚的电平

设置管脚的电平的函数很多:

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

可以查库的帮助手册,来了解这些函数的使用方法。

点亮LED:

GPIO_ResetBits(GPIOC,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5);

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多