4.4 三色灯控制项目

# 4.4 三色灯控制项目

通过STM32控制三色LED实现流水灯效果,依次点亮蓝、红、绿三种颜色。

# 4.4.1 硬件设计

三色LED共阴极连接,三个阳极分别通过1KΩ电阻连接PA7(蓝)、PB0(红)、PB1(绿)引脚。高电平点亮对应颜色LED。

三色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. 功能实现代码

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

# 4.4.5 下载验证

下载程序后观察三色LED按蓝→红→绿顺序循环点亮。