stm32 固件库之:gpio

1. 简介:

此文章的目的是能使用固件库,并不是深究固件库的细节,会随着时间的推移而增加内容。

固件库的版本是:3.5.0


2. 程序:

先从程序开始,探索 gpio 的配置和 操作 gpio,以 led 为例最合适不过

#define LED_D3_ON() GPIO_ResetBits(GPIOF, GPIO_Pin_8)
#define LED_D3_OFF() GPIO_SetBits(GPIOF, GPIO_Pin_8)
void LED_Init(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE); // 使能 GPIOF 的时钟	
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
    GPIO_Init(GPIOF, &GPIO_InitStructure);
    LED_D3_ON();
}

3. 过程分析:

【1】stm32芯片出于对电源管理的考虑,将外设的时钟都分别的进行配置,因此,第一件事就是打开某外设的时钟

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)

参数:

对 gpio 来说 RCC_APB2Periph 的选值可以是

RCC_APB2Periph_GPIOA

RCC_APB2Periph_GPIOB

...

RCC_APB2Periph_GPIOG

他们可以是 取或 来同时操作多个 io

NewState 的取值是 ENABLE、DISABLE


【2】声明一个 gpio 结构体

typedef struct
{
  uint16_t GPIO_Pin;             /* 指定哪个 GPIO */
  GPIOSpeed_TypeDef GPIO_Speed;  /* 指定引脚的速度 */
  GPIOMode_TypeDef GPIO_Mode;    /* 指定引脚的上下拉等的属性/模式 */
}GPIO_InitTypeDef;
成员:

选中哪个引脚 GPIO_Pin,可以取值:

GPIO_Pin_0

GPIO_Pin_1

...

GPIO_Pin_15

GPIO_Pin_All

同样上边除All外,可以取 或

选中引脚的上下拉的设置 GPIO_Mode,可以取值 :

GPIO_Mode_AIN // 模拟输入

GPIO_Mode_IN_FLOATING // 悬空输入

GPIO_Mode_IPD // 下拉输入

GPIO_Mode_IPU // 上拉输入

GPIO_Mode_Out_OD // 开漏输出

GPIO_Mode_Out_PP // 推挽输出

GPIO_Mode_AF_OD // 开漏复用

GPIO_Mode_AF_PP // 推挽复用

选中引脚 驱动电路的响应速度 GPIO_Speed,当然波特率输出的越大,可以想象的是功耗越高,同时,高的频率对应了高的噪声,可以取值:

GPIO_Speed_10MHz

GPIO_Speed_2MHz

GPIO_Speed_50MHz


【3】将引脚的属性赋值给相应的 IO

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)


【4】操作 gpio

置位引脚,即将某引脚置 1 :

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

清零引脚,即将某引脚清 0:

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)


清零引脚,GPIO_ResetBits

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值