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_InitStc);						//根据上面的配置初始化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所用到的简单的功能就是这些。有学到新的会再补充

  • 21
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值