学习原子哥STM32M4(1):GPIO输出配置

来源:互联网 发布:01年nba总决赛数据 编辑:程序博客网 时间:2024/06/07 16:28

当初写51感觉IO口输出配置很简单,直接写入16进制数就可以了,而当我开始学STM32时我便发现了STM32的IO的强大之处,复用功能也很厉害。这里写一下贴一下我在学习GPIO输出的心得。

以为本人能力有限,理解可能有误,希望各位大虾包容包容,在评论区指出我的错误大笑

GPIO_InitTypeDef GPIO_InitST;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);GPIO_InitST.GPIO_Pin=GPIO_Pin_2;GPIO_InitST.GPIO_Mode=GPIO_Mode_OUT;GPIO_InitST.GPIO_OType=GPIO_OType_PP;GPIO_InitST.GPIO_PuPd=GPIO_PuPd_DOWN;GPIO_InitST.GPIO_Speed=GPIO_Speed_100MHz;
GPIO_Init(GPIOB,&GPIO_InitST);GPIO_ResetBits(GPIOB,GPIO_Pin_2);

这段代码是蜂鸣器的,下面一段是LED的。

GPIO_InitTypeDef GPIO_InitST;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);GPIO_InitST.GPIO_Pin=GPIO_Pin_15|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_12|GPIO_Pin_11;GPIO_InitST.GPIO_Mode=GPIO_Mode_OUT;GPIO_InitST.GPIO_OType=GPIO_OType_PP;GPIO_InitST.GPIO_PuPd=GPIO_PuPd_UP;GPIO_InitST.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOE,&GPIO_InitST);GPIO_SetBits(GPIOE,GPIO_Pin_15|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_12|GPIO_Pin_11);

我们可以发现共同之处。

首先他们都是GPIO配置成输出模式

GPIO_InitTypeDef GPIO_InitST;

定义一个函数GPIO_InitST,这个名字是自己定义的,它的作用是参数结构体指针

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);

这个是使能时钟,因为GPIOA-G都是在AHB1下的,所以我们要使能AHB1
而后面那一段代码则是我们定义的结构体的成员变量

GPIO_InitST.GPIO_Pin

指定针脚,因为我们之前使能时钟时便指定了是GPIOE,所以这里的成员变量是在指定E的针脚

GPIO_InitST.GPIO_Mode

配置GPIO的模式为输出输入模式,OUT为输出,IN为输入,如果我们用键盘输入的话这里就要写成IN
AIN模拟输入
FLOATING浮空输入
IPD下拉输入
IPU上拉输入
OD开漏输出
PP推挽输出
AF_OD复用开漏输出
AF_PP复用推挽

GPIO_InitST.GPIO_OType

OType即Output Type?(本人猜测的),配置输出类型
所以只有PP OD两种

GPIO_InitST.GPIO_PuPd

配置上下拉,有三种
GPIO_PuPd_NOPULL 
GPIO_PuPd_UP     GPIO_PuPd_DOWN 

GPIO_InitST.GPIO_Speed

配置IO口速度,有2 25 50 100MHz四种

GPIO_Init();

初始化GPIO,有两个参数,第一个是哪一组IO,GPIOE,就是E,第二个就是取我们定义的那个结构体的地址,可以知道我们怎么配置的

以上都是我们配置IO口时的参数,也是学习STM32的第一课