STM32 GPIO使用

9 篇文章 1 订阅

1. 将硬件环境设置为宏定义,方便硬件环境修改:

设置包含三项:GPIO端口、GPIO引脚号和GPIO端口时钟。示例如下

#define LED1_PIN              GPIO_Pin_10
#define LED1_GPIO_PORT        GPIOH
#define LED1_GPIO_CLK         RCC_AHB1Periph_GPIOH

#define LED2_PIN              GPIO_Pin_11
#define LED2_GPIO_PORT        GPIOH
#define LED2_GPIO_CLK         RCC_AHB1Periph_GPIOH

#define LED3_PIN              GPIO_Pin_11
#define LED3_GPIO_PORT        GPIOD
#define LED3_GPIO_CLK         RCC_AHB1Periph_GPIOD
其中GPIO_Pin_10 /GPIO_Pin_11、GPIOH / GPIOD 、RCC_AHB1Periph_GPIOH / RCC_AHB1Periph_GPIOD这些都是STM32库中的宏定义。


2. 开启GPIO外设时钟

RCC_AHB1PeriphClockCmd (LED1_GPIO_CLK | LED2_GPIO_CLK | LED3_GPIO_CLK, ENABLE);

将要使用的GPIO端口时钟全部开启。


3. 初始化GPIO

3.1定义一个GPIO初始化结构体对象

GPIO_InitTypeDefGPIO_InitStructure;

3.2通过该结构体对象设置GPIO工作模式

a. 选择要控制的引脚:

GPIO_InitStructure.GPIO_Pin =LED1_PIN;

b. 设置引脚输入、输出出模式:

GPIO_InitStructure.GPIO_Mode =GPIO_Mode_OUT;//设置引脚为输出模式                                                                

c. 设置引脚输出类型:

GPIO_InitStructure.GPIO_OType =GPIO_OType_PP;//设置引脚为推挽模式

d. 设置引脚上拉模式:

GPIO_InitStructure.GPIO_PuPd =GPIO_PuPd_UP;//设置引脚为上拉

e. 设置引脚速率:

GPIO_InitStructure.GPIO_Speed =GPIO_Speed_2MHz; //设置引脚速率为2Mhz

3.3 调用库函数使用上面的初始化结构体对象,初始化GPIO

GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure);


以上,一个端口的初始配置即已完成。


如果有多个GPIO需要初始化,则根据端口工作模式可归类一起初始化。

如LED2_PIN和LED3_PIN工作方式与LED1_PIN一样,则初始化LED2_PIN和LED3_PIN可以在上面的基础上,如下设置:

/*选择要控制的GPIO引脚*/

GPIO_InitStructure.GPIO_Pin =LED2_PIN;
GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStructure);
    
/*选择要控制的GPIO引脚*/ 
GPIO_InitStructure.GPIO_Pin =LED3_PIN;

GPIO_Init(LED3_GPIO_PORT, &GPIO_InitStructure);


即,只要重新给初始化结构体的pin脚成员变量赋新值,然后调用初始化库函数GPIO_Init即可(注意,函数第一个参数GPIO端口要对应改变)。步骤3.2下的b、c、d、e可省略。

如果端口工作模式不一样时,可多定义几个初始化结构体,将相同模式的归为一类,步骤3.2中统一设置,避免重复编写代码。


参考《零死角玩转STM32-F49挑战者》例程如下:





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值