本教程使用的单片机为stm32f103c8t6
STM32标准库GPIO
作为STM32最基本的外设,GPIO最基本的输出功能是由STM32控制 引脚输出高低电平,比如可以把GPIO接LED灯来控制其亮灭,
也可以接继电器或者三极管,通过继电器或三极管来控制外部大功率电路的通断。
这是大概到结构图,看的懂就看,看不懂就算了。
STM32一共是有8种模式
输入模式:
(1)GPIO_Mode_IN_FLOATING 浮空输入
(2)GPIO_Mode_IPU 上拉输入
(3)GPIO_Mode_IPD 下拉输入
(4)GPIO_Mode_AIN 模拟输入
输出模式:
(5)GPIO_Mode_Out_OD 开漏输出(带上拉或者下拉)
(6)GPIO_Mode_AF_OD 复用开漏输出(带上拉或者下拉)
(7)GPIO_Mode_Out_PP 推挽输出(带上拉或者下拉)
(8)GPIO_Mode_AF_PP 复用推挽输出(带上拉或者下拉)
介绍输出模式
推挽输出

既能主动拉高电平到 VDD,也能主动拉低电平到 GND,高低电平都由内部电路直接驱动
由N-MOS和P-MOS控制
开漏输出

只能主动拉低电平到 GND,无法主动输出高电平;高电平必须依靠外部上拉电阻实现
高电平相当接了一个无穷大的电阻
低电平就是连接GND
只由N-MOS控制
复用推挽输出和复用开漏输出

复用相当是引用其他引脚控制,相当于是变成其他引脚。
实现的功能效果和上面一样
输入模式
浮空输入

浮空输入就是不经过任何上下拉电阻,直接进行读取电平容易被干扰
适合需要自己外部上下拉的情况
上拉输入

上拉就是接了上拉电阻
悬空的时候是高电平
下拉输入

下拉就是接了下拉电阻
悬空的时候就是低电平
模拟输入

唯一作用是接收、采集「连续变化的模拟电压信号」
给ADC用的
复用输入
(*´・д・)?
额STM32标准库没有这东西。你问我为没什么,可以st觉得没必要做吧
参考代码
下面内容建议配合代码查看(stm32f103c8t6)
配置GPIO步骤
1 开启gpio时钟
2 配置GPIO初始化
3 调用
开启gpio时钟
而相对应的外设功能所使用的时钟 在stm32f4xx.h 中即可查看到
1 | RCC_AHB1PeriphClockCmd ( RCC_AHB1Periph_GPIOX, ENABLE); /*开启 AHB1时钟*/ |
X是选择引脚组
ENABLE开
DISABLE 关
RCC_AHB1
RCC_APB1
配置GPIO初始化
1 | GPIO_Init(GPIOX, &GPIO_InitStructure); //初始化所设置的引脚 |
X是初始化引脚组为ABCD等组
GPIO_InitStructure 是结构体
用于初始化
1 | GPIO_InitTypeDef GPIO_InitStruct; //定义初始化结构体 |
定义完结构体后就可以对结构体进行配置
GPIO_InitStruct.GPIO_Mode = x; //配置模式模式上面有
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_X; //配置哪个IO口一共有1到16个引脚
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_xMHz; //配置IO口速度,仅输出有效
gpio的速度
GPIO输出
1 | GPIO_ResetBits(GPIOX, GPIO_Pin_X); //X组,x引脚 gpio引脚低电平 |
1 | GPIO_SetBits(GPIOX, GPIO_Pin_X); //X组,x引脚 gpio引脚高电平 |
1 | GPIO_SetBits(GPIOX, GPIO_Pin_X); //X组,x引脚 gpio引脚高电平 |
1 | GPIO_WriteBit(GPIOX, GPIO_Pin_X, Bit_RESET);//X组,x引脚 gpio引脚低电平 |
1 | GPIO_WriteBit(GPIOX, GPIO_Pin_X, Bit_SET);//X组,x引脚 gpio引脚高电平 |
1 | GPIO_WriteBit(GPIOX, GPIO_Pin_X, X);//X组,x引脚 X可以为高低电平 |
GPIO输入
1 | GPIO_ReadInputDataBit(GPIOX, GPIO_Pin_X) //X为组 X为引脚 |
这个就可以检测高低电平用if判断上面的函数为1或者0就是高或者低
参考工程:
https://wwm.lanzouq.com/b03lno3za
密码:6jed