第一章 GPIO输出
GPIO通用输入输出口,想必大家都不会陌生。因此本章节只是单独的抓住主要的知识点开始讲解。
1、GPIO的模式
GPIO可以配置8种输入输出模式:
GPIO_Mode_AIN //模拟输入,一般用在ADC
GPIO_Mode_IN_FLOATING //浮空输入
GPIO_Mode_IPD//下拉输入,默认为低电平
GPIO_Mode_IPU//上拉输入,默认为高电平
GPIO_Mode_Out_OD //开漏输出
GPIO_Mode_Out_PP //推挽输出
GPIO_Mode_AF_OD //复用开漏输出
GPIO_Mode_AF_PP //复用推挽输出
由于我对硬件方面的只是不是很了解,所以之前对于如何选择GPIO口的模式很陌生,这边给大家一些基础的选择方法:我们如果我们想要配置输入的模式的话,一般来说都是选择使用上拉输入模式,要使用ADC外设时选择使用模拟输入。对于输出的模式,一般选择推挽输出,因为他对电路有较强的驱动能力。当然了,如果实在不知道选择什么模式的话,那当然是去查看数据手册了,是最正确的。
STM32数据手册,可以查看第8章的8.1.11外设GPIO配置这一章节,里面有给出具体的选择配置模式。
下面给出GPIO的基本结构,大家想要仔细了解GPIO8种配置模式的话可以自行查看数据手册,也可以去B站观看江科大自化协(江协科技)的视频,讲解的很详细。
2.点亮LED灯,配置流程
学习嵌入式,经典老套路来了,那就是点亮一个LED灯,这边我给大家分解下配置的步骤。
1.开始GPIO时钟
当我们学习每一种外设的时候,基本上这个函数是必不可少的,那就是开始外设的时钟。那么开始GPIO主要是挂载在APB2总线上,所以开启时钟函数就是 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
2.配置GPIO结构体的相关参数
STM32官方给我们封装好了库函数,基本上把外设都封装成一个结构体,因此我们只要调用就可以了。
相关函数如下:
GPIO_InitTypeDef GPIO_InitStructure;//定义一个结构体
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//选择gpio_pin_0引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//读写的速度
GPIO_Init(GPIOA, &GPIO_InitStructure);
3.1LED闪烁代码具体实现
#include "stm32f10x.h" // Device header
#include "Delay.h"
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
while (1)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_0);//将指定引脚置为0(低电平)
Delay_ms(500);
GPIO_SetBits(GPIOA, GPIO_Pin_0);//将指定引脚置为1(高电平)
Delay_ms(500);
GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);//将bit_reset(低电平)写入到指定引脚
Delay_ms(500);
GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);//将bit_set(高电平)写入到指定引脚
Delay_ms(500);
GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0);
Delay_ms(500);
GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)1);
Delay_ms(500);
}
}
结语
GPIO是STM32学习当中最简单最基础的外设,他的主要库函数就是配置GPIO参数,以及将引脚置为高电平或者低电平,读取GPIO端口的值等,之后会带大家一起学习。