一 GPIO口
学单片机的第一步也是最简单的一步就是点灯,若想点灯,则首先需要了解GPIO口,GPIO全称:General Purpose Input Output,即通用输入输出端口,一般用来采集外部器件的信息或者控制外部器件工作,即输入输出。
二 GPIO口的模式
通过配置不同的功能,来达到不同的目的。具体用到会再分析。
三 实例演示及原理分析
通过操控gpio口来实现led灯的亮灭,及流水灯。
本此实验以stm32f407ig系列为例。
通过原理图可以看出,led右边与vcc相连,左边与gpio口相连。若想要led导通,则需要gpio口输出低电平。
打开cubeMX来配置工程,为了方便,后面进行代码分析。配置PE2 PF8 PF9 PF10引脚为输出管脚,隔一段时间改变输出状态即可完成流水灯操作。
工程配置如下,先将gpio口默认配置为高电平,防止上电后led都亮。导出工程分析完成时限代码。
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOE_CLK_ENABLE();
__HAL_RCC_GPIOF_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_2, GPIO_PIN_SET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10, GPIO_PIN_SET);
/*Configure GPIO pin : PE2 */
GPIO_InitStruct.Pin = GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/*Configure GPIO pins : PF8 PF9 PF10 */
GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
}
先使能4组io口的时钟,在对io口进行写高电平状态操作,再然后开始定义各个io口的具体配置,先给gpio初始化函数的结构体赋值配置管脚,输出模式,输出速度,io口的上拉下拉,在传入gpio口,和结构体的地址,完成一个io口的初始化,其他同理。
主函数的实现 :
while (1)
{
/* USER CODE END WHILE */
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_2, GPIO_PIN_RESET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_8, GPIO_PIN_RESET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_8, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9, GPIO_PIN_RESET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10, GPIO_PIN_RESET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10, GPIO_PIN_SET);
HAL_Delay(500);
/* USER CODE BEGIN 3 */
}
通过库函数对io口进行状态写入,间隔500ms改变io口状态。
四 实现效果图 成功实现流水灯。