在本章中,我们将通过代码控制
ALIENTEK
阿波罗
STM32
开发板上的两个
LED
灯
DS0
和
DS1
交替闪烁,实现类似跑马灯的效果。
一、 STM32F4 IO 口简介
这部分内容可参考STM32F4 | GPIO工作原理和配置。
二、硬件设计
本章用到的硬件只有 LED
(DS0
和 DS1
)。其电路在 ALIENTEK
阿波罗 STM32
开发板上默认是已经连接好了的。DS0
接 PB1
,DS1
接 PB0
。所以在硬件上不需要动任何东西。其连接原理图如下:
三、软件设计
我们直接复制前面创建好的工程模板——库函数版本,将复制过来的模板文件夹重新命名为“1-跑马灯实验”。在模板里面的 HALLIB
分组下面,我们引入了所有的 HAL
库源文件和对应的头文件,如下图所示:
实际上,这些大家可以根据工程需要添加。跑马灯实验我们一共使用到 HAL
库中 9 个源文件,其他不用的源文件大家可以直接在工程中删除。这样可以大大减少工程编译时间。
在工程根目录文件夹下面新建一个 HARDWARE
的文件夹,用来存储与硬件相关的代码。然后在 HARDWARE
文件夹下新建一个 LED
文件夹,用来存放与 LED
相关的代码。
接下来, 我们回到我们的工程,新建一个文件,然后保存在HARDWARE->LED
文件夹下面,保存为 led.c
,
在led.c
文件中输入以下代码:
#include "led.h"
/*
函数名称:LED_Init
函数作用:LED初始化配置
输 入:无
输 出:无
*/
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_Initure; //定义结构体变量,结构体成员为GPIO的相关模式和状态
__HAL_RCC_GPIOB_CLK_ENABLE(); //开启 GPIOB 时钟
//设置多个IO口,并且在同一个分组下,并且每个IO的配置都是一样的,就可以通过“|”来设置
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1; //指定IO口:PB1,0
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //模式设置:推挽输出;GPIO_MODE_OUTPUT_OD是开漏输出
GPIO_Initure.Pull=GPIO_PULLUP; //上下拉设置:上拉
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //速度设置:高速
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
//设置一组 IO 口中的一个或者多个 IO 口的电平状态
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET); //PB0 置 1 ,默认灯灭
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);