STM32单片机GPIO口配置问题

2022-12-27  

  在学习STM32F单片机时,我们常常困惑什么时候才能叫入门,采用什么样的教材入门,或者采用什么的编程软件。在学习类的教材中,以神州,原点教材布局很多,但是相信很多人看到这类教材也是一头雾水,需要你花费巨大的精力从寄存器的最底层去学习和了解,学习时间还是相对漫长。在采用的编程软件中,KEIL和IAR各有优势吧,在这里我选用的是KEIL。


  在开始学习编程时,我采用的是库函数开发指南。在安装完成KEIL软件和添加项目工程时,就开始学习库函数编程。


  在编写一个GPIO口控制时,首先我们要知道我们要实现的功能,连接的IO口和怎么配置GPIO口。最常见的以LED举例来说。比如我采用PB13引脚连接LED灯的负极,按照硬件的逻辑需要置位该引脚为低电平,LED才点亮。置位高电平,LED灯熄灭。按照库函数编程的规则,我需要创建一个LED.C和一个LED.H文件,当然,也可以省事,两个不需要创建,创建的好处,方便以后直接移植修改和便于阅读理解。只有main函数中包含LED.H文件,这个头文件才会被调用,LED.C文件需要被添加进来。


  在图示中配置为引脚配置为LED灯控制引脚,在这里GPIO口配置为输出。GPIO口可以灵活配置为输入和输出。输入模式一般为四种,一般为模拟输入,浮空输入,上拉输入和下拉输入模式,也有人认为输入为模拟输入,浮空输入,弱上拉输入,强上拉输入,弱下拉输入和强下拉输入。输出一般开漏输出,推挽输出,复用开漏输出,复用推挽输出。针对输出几种模式这么来理解,开漏输出和推挽输出的最大差别在于开漏输出无法输出高电平,一般需要IO口外部默认为上拉,才能输出高电平。其电平状态要不就是0.要不就是悬空状态(在没有配置外部上拉的情况下)。推挽输出可以输出高电平和低电平。


  对于输出模式的开漏输出,推挽输出,复用开漏输出,复用推挽输出怎么理解复用这二字呢。一个GPIO口若是纯作为GPIO口,则无需考虑复用二字,若是GPIO口配置为串口,I2C,ADC,SPI等等,则是必须要考虑复用二字。


  在对GPIO口进行配置时,我们可以在LED.C文件中对GPIO口进行初始化配置,如下例所示:


  void LED_GPIO_Config(void)

  {

  //定义一个GPIO_InitTypeDef类型的结构体

  GPIO_InitTypeDef GPIO_InitStructure;

  //开启GPIO口的外部时钟

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

  //配置GPIO口

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 ;

  //配置为推挽输出

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

  //配置引脚速率50MHz*

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  //调用库函数,初始化GPIOB;

  GPIO_Init(GPIOB, &GPIO_InitStructure);

  //开启LED灯

  GPIO_ResetBits(GPIOB, GPIO_Pin_13 );

  }

  在LED.H文件中,我们需要包含#include "stm32f10x.h"和void LED_GPIO_Config(void);即可。当然也可以写一些内联函数,主要是关于GPIO口高低电平的配置。在头文件中,切记只能出现include,DEFINE,VOID等函数,不能出现类似于U8,U32等函数。


  随后我们在main函数中可以通过SET或RESET对GPIO口进行高低电平配置。当然也可以在LED.H头文件写一些内联函数,如1,0或者ON,OFF定义高低电平,然后在main函数中直接调用。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。