STM32 BlackPill LED Tutorial: Step-by-Step Guide to GPIO Programming
STM32 BlackPill LED Tutorial: Step-by-Step Guide to GPIO Programming
The STM32F401 BlackPill is a powerful, compact development board ideal for embedded systems learning. This tutorial walks you through setting up STM32CubeIDE, writing your first GPIO program, and flashing it onto the board.
🖼️ Board Overview
                    
Top view of the Black Pill V1.2 board
đź§ Pinout Diagram

Pinout diagram for the STM32F401CCU6 BlackPill board
đź› Setup Steps
1.      Install STM32CubeIDE: Download STM32CubeIDE from STMicroelectronics and install it. Ensure ST-Link drivers are installed if needed.
2.      Connect the Board: Use a Micro USB cable or ST-Link to connect the board. Connect SWDIO, SWCLK, GND, and 3.3V if using ST-Link.
3.      Create a Project: Open STM32CubeIDE → File → New STM32 Project → Search for STM32F401CCU6 → Name your project BlinkLED.
🔌 ST-Link V2 to BlackPill Connection
|
ST-Link V2 |
BlackPill |
|
SWDIO |
SWDIO |
|
SWCLK |
SWCLK |
|
GND |
GND |
|
3.3V |
3.3V |

ST-Link V2 connected to STM32F401 BlackPill using SWD interface

Initial setup of BlackPill in STM32CubeIDE

Creating a new project for STM32F401CCU6

Configuring GPIO pins in STM32CubeIDE

Additional GPIO settings and configuration
📦 Materials Required
·      STM32F401 BlackPill board
·      USB cable (Micro USB)
·      ST-Link V2 Programmer (optional)
·      LED (optional for breadboard test)
·      Breadboard & jumper wires
đź§‘đź’» Blink LED Code
// USER CODE BEGIN 2
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
// USER CODE END 2
// Infinite loop
// USER CODE BEGIN WHILE
while (1)
{
 HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
 HAL_Delay(500);
 // USER CODE END WHILE
 // USER CODE BEGIN 3
}
// USER CODE END WHILE
🚀 Upload & Run
Click the green play button or go to Run → Debug in STM32CubeIDE. The onboard LED connected to PC13 should start blinking.

Debugging interface in STM32CubeIDE showing the debug button and configuration
Â
❌ Troubleshooting
·      Check ST-Link or USB connections
·      Confirm pin configurations in your .ioc file
·      Ensure proper power to the board