STM32学习(二)GPIO推挽输出实验
以 LED 和 BEEP 模块为例,讲解 GPIO 推挽输出模式的使用。
硬件平台
STM32学习 系列文章,如未特殊说明,默认是使用 STM32F407 主芯片,后续文章不再单独说明。
GPIO初始化
硬件电路
主要代码
这里以 LED0 为例,LED1 和 BEEP 代码同理,都是用推挽输出模式
开启 GPIO 时钟
- 使用 GPIO 之前,必须先开启对应的时钟;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
GPIO 结构体初始化
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOF, &GPIO_InitStructure);
代码示例
- 使用宏 LED0_PIN 和 LED0_GPIO_PORT 是为了方便代码移植,比如使用相同主芯片,硬件电路变更时,只需要修改这两个宏就可以了,提升了开发效率
#define LED0_PIN GPIO_Pin_9
#define LED0_GPIO_PORT GPIOF
void led_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
GPIO_InitStructure.GPIO_Pin = LED0_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(LED0_GPIO_PORT, &GPIO_InitStructure);
}
GPIO 输出电平接口
- GPIO 初始化后,要根据实际情况输出一个默认值,以免造成不必要的麻烦;
输出高电平
GPIO_SetBits(LED0_GPIO_PORT, LED0_PIN);
输出低电平
GPIO_ResetBits(LED0_GPIO_PORT, LED0_PIN);
实验
待更新。。。