4.4 三色灯控制项目
# 4.4 三色灯控制项目
通过STM32控制三色LED实现流水灯效果,依次点亮蓝、红、绿三种颜色。
# 4.4.1 硬件设计
三色LED共阴极连接,三个阳极分别通过1KΩ电阻连接PA7(蓝)、PB0(红)、PB1(绿)引脚。高电平点亮对应颜色LED。

# 4.4.2 STM32CubeMX配置
# 1. 建立新工程
(1). File → New → STM32 Project
(2). 选择芯片STM32F103C8T6
(3). 工程命名为04 GPIO_OUT



# 2. 引脚分配与参数配置
配置PA7、PB0、PB1为GPIO_Output模式,推挽输出,初始低电平。


# 3. 生成代码
勾选生成单独外设文件,保存生成工程代码。

# 4.4.3 软件设计
# 1. 初始化函数
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0|GPIO_PIN_1,GPIO_PIN_RESET);
GPIO_InitStruct.Pin = GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 2. 功能实现代码
while (1)
{
// 蓝灯亮
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1,GPIO_PIN_RESET);
HAL_Delay(500);
// 红灯亮
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1,GPIO_PIN_RESET);
HAL_Delay(500);
// 绿灯亮
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
HAL_Delay(500);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 4.4.5 下载验证
下载程序后观察三色LED按蓝→红→绿顺序循环点亮。