我是靠谱客的博主 发嗲黑米,最近开发中收集的这篇文章主要介绍STM32F103的GPIO口相关内容STM32F103的GPIO口的模式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

STM32F103的GPIO口的模式

STM32F103的GPIO口有8种模式。

4个输出:

  1. 开漏输出-GPIO_Mode_Out_OD
  2. 推挽输出-GPIO_Mode_Out_PP
  3. 复用开漏输出-GPIO_Mode_AF_OD
  4. 复用推挽输出-GPIO_Mode_AF_PP。

4种输入:

  1. 模拟输入-GPIO_Mode_AIN
  2. 浮空输入-GPIO_Mode_IN_FLOATING
  3. 下拉输入-GPIO_Mode_IPD
  4. 上拉输入-GPIO_Mode_IPU

举例

  1. 如果我们只需要单纯的将某个引脚置成高电平,或者是低电平,比如是控制LED灯的亮与灭。就可以使用:推挽输出-GPIO_Mode_Out_PP。
  2. 如果我们是需要配置串口的TX脚,则可以选择:复用推挽输出-GPIO_Mode_AF_PP。
  3. 其他的2种输出暂时还没有用到,等用到了再修改。
  4. 如果我们是需要检测输入源的,比如按键,信号,则可以选择:下拉输入-GPIO_Mode_IPD或者上拉输入-GPIO_Mode_IPU。
  5. 如果我们是需要配置串口的RX脚,则可以选择:浮空输入-GPIO_Mode_IN_FLOATING。
  6. 看到博主帖子详细介绍各个模式,简单易懂,虽然没有介绍什么原理,但是能让你选择想要用到的引脚模式,值得推荐
    简单易懂的介绍

1.LED灯的相关配置

在这里插入图片描述

LED.c

#include "LED.h"
void LED_Config(void)
{
	GPIO_InitTypeDef	GPIO_InitStc;		//设置GPIO结构体,后面的名称可以直接定义
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); 	//使能APB2外设时钟
	GPIO_InitStc.GPIO_Pin = GPIO_Pin_1;						//配置需要用到的GPIO口引脚编号:1
	GPIO_InitStc.GPIO_Mode = GPIO_Mode_Out_PP;				//配置需要用到的GPIO口模式:推挽输出
	GPIO_InitStc.GPIO_Speed = GPIO_Speed_50MHz;				//配置需要用到的GPIO口速率:50MHz
	GPIO_Init(GPIOA, &GPIO_InitStruct);						//根据上面的配置初始化GPIO
}

外设时钟可以通过芯片的数据手册的 ——Figure 1. STM32F103xx performance line block diagram 中查看

LED.h

#ifndef _LED_H_
#define _LED_H_

#include "stm32f10x.h"		//引用该头文件,因为我们代码的一些东西需要在这个头文件中引用

void LED_Config(void);
#endif

再关于一些库函数的介绍:
在这里插入图片描述

//void GPIO_SetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin),以上面LED的引脚定义为例:
GPIO_SetBits(GPIOA,GPIO_Pin_1);	//将GPIOA的第一个引脚置成高电平,LED灯亮,可以用|来设置多个pin脚
//void GPIO_ResetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin),以上面LED的引脚定义为例:
GPIO_ResetBits(GPIOA,GPIO_Pin_1);//将GPIOA的第一个引脚置成低电平,LED灯灭,可以用|来设置多个pin脚
//void GPIO_WriteBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin, BitAction BitVal),以上面LED的引脚定义为例:
GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_SET)//将GPIOA的第一个引脚置成高电平,LED灯亮,可以用|来设置多个pin脚
GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_RESET)//将GPIOA的第一个引脚置成低电平,LED灯灭,可以用|来设置多个pin脚
//void GPIO_Write(GPIO_TypeDef* GPIOx, u16 PortVal)
//GPIO_Write函数可以控制GPIOx的引脚(多个引脚),如果要将0,4,8,12引脚置高
//则可以设置:0x0001+0x0010+0x0100+0x1000=0x1111
GPIO_Write(GPIOA,0x0002);//将GPIOA的第一个引脚置成高电平,LED灯亮

2.按键KEY的相关配置

在这里插入图片描述
如果按键没有按下,则S1为高电平。如果按键按下,则S1为低电平。

key.c

#include "key.h"
void KEY_Config(void)
{
	GPIO_InitTypeDef	GPIO_InitStc;		//设置GPIO结构体,后面的名称可以直接定义
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); 	//使能APB2外设时钟
	GPIO_InitStc.GPIO_Pin = GPIO_Pin_1;						//配置需要用到的GPIO口引脚编号:1
	GPIO_InitStc.GPIO_Mode = GPIO_Mode_IPU;				//配置需要用到的GPIO口模式:上拉输入
	//GPIO_InitStc.GPIO_Speed = GPIO_Speed_50MHz;				//配置需要用到的GPIO口速率:50MHz
	//因为不需要输出,所以可以不用配置
	GPIO_Init(GPIOA, &GPIO_InitStruct);	
}

key.h

#ifndef _KEY_H_
#define _KEY_H_

#include "stm32f10x.h"		//引用该头文件,因为我们代码的一些东西需要在这个头文件中引用

void KEY_Config(void);
#endif

用到的库函数介绍:

//u8 GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1) == 1)
{	
	//判断端口是否有输入,因为我们设置的是上拉输入,所以
	//(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1) == 1 便是按键没有按下的状态。如果设置为下拉输入则相反
	//(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1) == 0 便是按键按下的状态。如果设置为下拉输入则相反
}

目前GPIO所用到的简单的功能就是这些。有学到新的会再补充

最后

以上就是发嗲黑米为你收集整理的STM32F103的GPIO口相关内容STM32F103的GPIO口的模式的全部内容,希望文章能够帮你解决STM32F103的GPIO口相关内容STM32F103的GPIO口的模式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部