概述
STM32F103的GPIO口的模式
STM32F103的GPIO口有8种模式。
4个输出:
- 开漏输出-GPIO_Mode_Out_OD
- 推挽输出-GPIO_Mode_Out_PP
- 复用开漏输出-GPIO_Mode_AF_OD
- 复用推挽输出-GPIO_Mode_AF_PP。
4种输入:
- 模拟输入-GPIO_Mode_AIN
- 浮空输入-GPIO_Mode_IN_FLOATING
- 下拉输入-GPIO_Mode_IPD
- 上拉输入-GPIO_Mode_IPU
举例
- 如果我们只需要单纯的将某个引脚置成高电平,或者是低电平,比如是控制LED灯的亮与灭。就可以使用:推挽输出-GPIO_Mode_Out_PP。
- 如果我们是需要配置串口的TX脚,则可以选择:复用推挽输出-GPIO_Mode_AF_PP。
- 其他的2种输出暂时还没有用到,等用到了再修改。
- 如果我们是需要检测输入源的,比如按键,信号,则可以选择:下拉输入-GPIO_Mode_IPD或者上拉输入-GPIO_Mode_IPU。
- 如果我们是需要配置串口的RX脚,则可以选择:浮空输入-GPIO_Mode_IN_FLOATING。
- 看到博主帖子详细介绍各个模式,简单易懂,虽然没有介绍什么原理,但是能让你选择想要用到的引脚模式,值得推荐
简单易懂的介绍
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口的模式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复