STM32——HAL库开发笔记3(GPIO实践篇——呼吸灯实验)(参考来源:b站铁头山羊)
本实验用STM32CubeMX搭配HAL库实现呼吸灯效果。
实验一、闪灯实验
单片机驱动LED有两种接法,一种为开漏接法,另一种为推挽接法。如下图所示。


推挽接法需要将IO引脚设置为输出推挽模式,LED阳极接IO引脚,阴极接地。向IO写0输出低电平,LED熄灭。向IO写1输出高电平,LED点亮。
开漏接法需要将IO引脚设置为输出开漏模式,LED阳极接高电压VDD,阴极IO引脚。向IO写0输出低电平,LED点亮。向IO写1输出高阻抗,LED熄灭。
本次闪灯实验需要两颗LED。
LED1:在咱们的单片机上有一颗板载LED,采用的为开漏接法,连接的为我们单片机的PC13引脚。
LED2:我们外接一颗LED,我们将它连接到单片机的PA9引脚上,采用推挽接法。即阳极接PA9,阴极接VSS。
具体连接图如下:

1、CubeMx配置

参数说明:
GPIO mode: 选择IO引脚的模式:output push-pull——输出推挽
output open-drain——输出开漏
GPIO output level:设置IO引脚的初始值:0/1
Maximum output speed:设置IO引脚的最大输出速度
GPIO Pull-up/Pull-down:用来选择上拉或者下拉电阻
User Label:自定义标签



注意:命名时不能有中文路径

至此,关于CubeMX的配置结束。接下来就是对于Keil代码的修改。
2、Keil代码修改
我们进行后,点击main.c文件。本次我们的全部代码全部在main.c文件中。
相关代码说明:
HAL_Init();----HAL库的初试化。
SystemClock_Config();------初始化系统时钟
MX_GPIO_Init();——GPIO引脚的初始化
2.1 编程思路
由于PC13是开漏接法,PA9是推挽接法,所以对于点亮两颗LED,对于PC13需要写0才可以点亮,对于PA9需要写1才可以点亮。
想让LED闪烁,假如每一秒钟闪烁一次,我们就需要让其延迟1/2秒,延迟结束后,我们再把LED熄灭,也就是向PC13写1,向PA9写0。结束后,我们再延迟0.5秒。
以此反复以上步骤。

2.2 编程接口
void HAL_GPIO_WritePin(GPIOx,GPIO_Pin, )
作用:向IO写0或者1
参数说明:GPIOx : 填写引脚的组编号 ,x取A,B,C,D.例如GPIOC
GPIO_Pin : 设置引脚编号,例如,GPIO_Pin_13.
PinState: 用来指定向IO写0还是写1. GPIO_PIN_RESET——写0
GPIO_PIN_SET——写1
void HAL_Delay(uint32_t Delay)
作用:延迟一段时间
参数说明: Delay:用来设置延迟的时间长度,单位为ms
2.3 代码
我们需要把代码写在 /* USER CODE BEGIN WHILE */和 /* USER CODE END WHILE */之间,否则下次自动生成程序时会被删除。

代码如下:
while (1)
{
//点亮LED
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,GPIO_PIN_SET);
HAL_Delay(1000); //延迟1秒
//熄灭LED
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,GPIO_PIN_RESET);
HAL_Delay(1000);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
其余的代码不需要更改。
再编译代码,点击如图图标
![]()
出现以下0错误0警告,表示代码运行无误。
最后将代码下载到单片机中,点击如下图标。
![]()
至此,即可实现两颗LED灯的呼吸灯效果。
更多推荐



所有评论(0)