GPIO简介
GPIO是 General-purpose input/output 的简写,即通用输入/输出端口。
输入包括:输入浮空,输入上拉,输入下拉,模拟功能。
输出包括:开漏输出,推挽输出,复用推挽,复用开漏等。
每个GPIO所包括的寄存器:
- 4个32位配置寄存器:GPIOx_MODER、 GPIOx_OTYPER、GPIOx_OSPEEDR 和 GPIOx_PUPDR
- 2个32位数据寄存器:GPIOx_IDR 和GPIOx_ODR
- 1个32位置位/复位寄存器:GPIOx_BSRR
- 1个32位锁定寄存器:GPIOx_LCKR
- 2个32位复用功能选择寄存器:GPIOx_AFRH 和 GPIOx_AFRL
接下来我们将使用软件:STM32CubeMX(配置参数)配合keil5(编译+烧录)通过GPIO的方式来点亮LED灯。
首先使用STM32CubeMX新建工程,并选择单片机型号,我们这里使用的是STM32G030C6
以下四步设置PB0针脚为GPIO输出模式
由于LED是低电平点亮,通常设置初始值让LED保持灭的状态,也就是将PB0的初始输出电平设置为高电平输出,这样上电时LED是灭的状态。以下步骤设置PB0的高低电平、输出模式、输入模式、输出速度等参数:
以下设置项目名称、存储位置、要使用的编译器等:我们此处选择MDK-ARM编译器、名称和位置随意(使用英文名称)
点击以下位置生成代码
使用HAL库函数操作:
HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
功能:写输出数据(高低电平 )
参数:GPIOx 填使用的GPIO组(GPIOB) GPIO_Pin 使用了哪个引脚(GPIO_PIN_0)
PinState 输出数据(高低1 或者0 GPIO_PIN_RESET 0 GPIO_PIN_SET 1
HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
功能:IO口输出状态翻转
参数:GPIOx 填使用的GPIO组(GPIOB) GPIO_Pin 使用了哪个引脚(GPIO_PIN_0)
HAL_Delay()//延时函数参数填延时时间,毫秒级延时
如果在stm32cubeMX中已经设置了初始化参数则不用再填写MX_GPIO_Init
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
//结构体声明
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOB_CLK_ENABLE();
//使能GPIOB时钟
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
//输出高电平
/*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = LED_Pin;//配置使用的GPIO引脚
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;//推挽输出
GPIO_InitStruct.Pull = GPIO_NOPULL;//上下拉不配置
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;//输出速度
HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct);
//初始化参数写入
}
直接在以下位置编写程序:注意要在 /* USER CODE BEGIN 3 */注释下写入,不然重新使用cubeMX生成代码时会被覆盖
我们一般电灯使用两种方法:函数直接控制高低电平或者是函数翻转法
//方法一:
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,0);//第三个参数设置为0低电平即点亮
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,1);//第三个参数设置为1高电平即熄灭
//方法二:
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);//PB0默认为1高电平时熄灭、翻转一次即为0低电平点亮