Laboratório 09
A documentação desta atividade de laboratório é complementar a documentação principal da disciplina.
Utilize como base a descrição apresentada no Moodle da disciplina.
Conteúdo
Introdução ao uso do PlatformIO;
- Crie um perfil no Visual Studio Code chamado
STM32IO; - Instale o PlatformIO IDE for VSCode;
- Configure o Visual Studio Code;
- Configure o PlatformIO Core;
- Edite a variável de ambiente
Pathe adicione%USERPROFILE%\.platformio\penv\Scripts\; - Instale os drivers for ST-LINK debug tool
- Teste de geração e compilação de projeto para o STM32F411CEUx;
Verifique o seu ambiente de desenvolvimento
- Git SCM
- GitHub CLI
- VS Code
- STM32CubeIDE
- PlatformIO
Git is the most widely used source-code management tool among professional developers.
- Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
winget install --id Git.Git -e --source winget
Configurações do git:
git config --list --show-origin
GitHub CLI brings GitHub to your terminal.
- GitHub CLI is a command line tool that allows you to interact with GitHub from the command line. It is available for Windows, macOS, and Linux.
winget install --id GitHub.cli -e --source winget
Status de login do GitHub CLI:
gh auth status
Visual Studio Code: IDE and Code Editor for Software Development.
- VS Code is a free source-code editor made by Microsoft for Windows, Linux and macOS. It includes support for debugging, embedded Git control, syntax highlighting, intelligent code completion, snippets, and code refactoring.
winget install --id Microsoft.VisualStudioCode -e --source winget
Extensões instaladas do Visual Studio Code para o perfil STM32:
code --list-extensions --profile "STM32"
STM32CubeIDE for Visual Studio Code: development experience for STM32 microcontrollers.
- STM32CubeIDE for Visual Studio Code is designed to enhance the development experience for STM32 microcontrollers by providing a comprehensive and updatable set of tools. The extension pack allow users to install one single pack bringing a full STM32 IDE experience into VS Code.
code --install-extension stmicroelectronics.stm32-vscode-extension --profile "STM32"
PlatformIO IDE for VSCode: Your Gateway to Embedded Software Development Excellence.
- PlatformIO IDE for VSCode Unlock the true potential of embedded software development with PlatformIO’s collaborative ecosystem, embracing declarative principles, test-driven methodologies, and modern toolchains for unrivaled success.
code --install-extension platformio.platformio-ide --profile "STM32IO"
You need to edit the system environment variable called Path and append %USERPROFILE%\.platformio\penv\Scripts\ path in the beginning of the list.
Configure a ferramenta git
Configure o nome de usuário para todos os repositórios locais ligados às suas transações de commit:
git config --global user.name "Your Name"
Configure o email de usuário para todos os repositórios locais ligados às suas transações de commit:
git config --global user.email "you@example.com"
É recomendado verificar se a instalação do seu Git não está realizando nenhuma transformação entre LFs e CRLFs.
git config --global core.autocrlf false
Configure o git para usar o Visual Studio Code como editor padrão para tarefas como escrever mensagens de commit ou rebases interativos
git config --global core.editor "code --wait"
Habilite a coloração automática da saída da linha de comando do Git:
git config --global color.ui auto
Configura o Git para usar main como o nome do branch padrão sempre que você inicializar um novo repositório localmente:
git config --global init.defaultBranch main
Liste as configurações aplicadas:
git config --list --show-origin
- STM32CubeMX
- ST-MCU-FINDER
- STM32CubeProg
- STM32CubeMonitor
STM32CubeMX is an initialization code generator.
- STM32CubeMX is a graphical tool that allows a very easy configuration of STM32 microcontrollers and microprocessors, as well as the generation of the corresponding initialization C code for the Arm® Cortex®-M core or a partial Linux® Device Tree for Arm® Cortex®-A core, through a step-by-step process.
STM32 and STM8 product finder for desktops.
- ST-MCU-FINDER-PC allows exploring and connecting to the complete portfolio of STM32 Arm® Cortex®-M, STM32 Arm® Cortex®-A7, and STM8 microcontrollers, microprocessors, development boards and examples directly from the developer’s desktop environment.
STM32CubeProg is an all-in-one multi-OS software tool for programming STM32 products.
- STM32CubeProg provides an easy-to-use and efficient environment for reading, writing, and verifying device memory through both the debug interface (JTAG and SWD) and the bootloader interface (UART and USB DFU, I2C, SPI, and CAN). STM32CubeProgrammer is delivered in GUI (graphical user interface) and CLI (command-line interface) versions.
STM32CubeMonitor is a Monitoring tool to test STM32 applications at run-time.
- STM32CubeMonitor family of tools helps to fine-tune and diagnose STM32 applications at run-time by reading and visualizing their variables in real-time. With non-intrusive monitoring, STM32CubeMonitor preserves the real-time behavior of applications, and perfectly complements traditional debugging tools to perform application profiling.
Crie um novo repositório com base no template do LAB09
Escolha o Grupo e entre com o comando abaixo para criar o repositório no GitHub:
- A
- B
- C
- D
- E
- F
- G
- H
- I
- J
- K
- L
- X
- Grupo S22-A: https://github.com/ELT73A-S22-2026-1-A
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB09
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB09:
gh repo create ELT73A-S22-2026-1-A/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-A/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
- Grupo S22-B: https://github.com/ELT73A-S22-2026-1-B
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB09
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB09:
gh repo create ELT73A-S22-2026-1-B/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-B/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
- Grupo S22-C: https://github.com/ELT73A-S22-2026-1-C
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB09
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB09:
gh repo create ELT73A-S22-2026-1-C/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-C/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
- Grupo S22-D: https://github.com/ELT73A-S22-2026-1-D
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB09
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB09:
gh repo create ELT73A-S22-2026-1-D/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-D/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
- Grupo S22-E: https://github.com/ELT73A-S22-2026-1-E
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB09
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB09:
gh repo create ELT73A-S22-2026-1-E/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-E/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
- Grupo S22-F: https://github.com/ELT73A-S22-2026-1-F
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB09
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB09:
gh repo create ELT73A-S22-2026-1-F/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-F/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
- Grupo S22-G: https://github.com/ELT73A-S22-2026-1-G
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB09
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB09:
gh repo create ELT73A-S22-2026-1-G/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-G/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
- Grupo S22-H: https://github.com/ELT73A-S22-2026-1-H
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB09
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB09:
gh repo create ELT73A-S22-2026-1-H/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-H/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
- Grupo S22-I: https://github.com/ELT73A-S22-2026-1-I
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB09
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB09:
gh repo create ELT73A-S22-2026-1-I/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-I/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
- Grupo S22-J: https://github.com/ELT73A-S22-2026-1-J
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB09
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB09:
gh repo create ELT73A-S22-2026-1-J/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-J/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
- Grupo S22-K: https://github.com/ELT73A-S22-2026-1-K
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB09
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB09:
gh repo create ELT73A-S22-2026-1-K/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-K/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
- Grupo S22-L: https://github.com/ELT73A-S22-2026-1-L
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB09
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB09:
gh repo create ELT73A-S22-2026-1-L/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-L/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
- Grupo S22-X: https://github.com/ELT73A-S22-2026-1-X
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB09
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB09:
gh repo create ELT73A-S22-2026-1-X/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-X/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
Instruções do LAB
Esta atividade de laboratório tem como objetivo utilizar o PlatformIO. Cada item equivale a 10% da nota.
- Crie um perfil no Visual Studio Code chamado
STM32IO; - Instale o PlatformIO IDE for VSCode;
- Configure o Visual Studio Code;
- Configure o PlatformIO Core;
- Edite a variável de ambiente
Pathe adicione%USERPROFILE%\.platformio\penv\Scripts\; - Instale os drivers for ST-LINK debug tool
- Envie o link do repositório no GitHub (hyperlink);
Avaliação
- Uso do template e código - 20%
- Verificação do PLatformIO - 70%
- Link do repositório no GitHub (hyperlink) - 10%
Diagrama de pinos do STM32F4x1

VS Code
Configuração do terminal
{
"terminal.integrated.defaultProfile.windows": "PIO CLI",
"terminal.integrated.profiles.windows": {
"Command Prompt": {
"path": [
"${env:windir}\\Sysnative\\cmd.exe",
"${env:windir}\\System32\\cmd.exe"
],
"args": [],
"icon": "terminal-cmd"
},
"PIO CLI": {
"path": "cmd.exe",
"args": [
"/k",
"${env:USERPROFILE}\\.platformio\\penv\\Scripts\\activate.bat && pio --version"
],
"icon": "python",
"overrideName": true
}
}
}
STM32Cube HAL: debugging and unit testing
Pisca LED
Definição do pino no arquivo main.h
#ifndef MAIN_H
#define MAIN_H
#include "stm32f4xx_hal.h"
#define LED_PIN GPIO_PIN_13
#define LED_GPIO_PORT GPIOC
#define LED_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
#endif // MAIN_H
Inicie LED_Init:
#include "main.h"
void LED_Init();
int main(void)
{
HAL_Init();
LED_Init();
while (1)
{
HAL_GPIO_TogglePin(LED_GPIO_PORT, LED_PIN);
HAL_Delay(1000);
}
}
void LED_Init()
{
LED_GPIO_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = LED_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);
}
void SysTick_Handler(void)
{
HAL_IncTick();
}
[env:blackpill_f411ce]
platform = ststm32
board = blackpill_f411ce
framework = stm32cube
upload_protocol = stlink
debug_tool = stlink
Arduino
Inicie LED_Init:
#include <Arduino.h>
#ifndef LED_BUILTIN
#define LED_BUILTIN PC13
#endif
void setup()
{
// initialize LED digital pin as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
void loop()
{
// turn the LED on (HIGH is the voltage level)
digitalWrite(LED_BUILTIN, HIGH);
// wait for a second
delay(1000);
// turn the LED off by making the voltage LOW
digitalWrite(LED_BUILTIN, LOW);
// wait for a second
delay(1000);
}
[env:blackpill_f411ce]
platform = ststm32
board = blackpill_f411ce
framework = arduino
upload_protocol = stlink
debug_tool = stlink
Frameworks
| Name | Description |
|---|---|
| Arduino | Arduino Wiring-based Framework allows writing cross-platform software to control devices attached to a wide range of Arduino boards to create all kinds of creative coding, interactive objects, spaces or physical experiences. |
| CMSIS | Vendor-independent hardware abstraction layer for the Cortex-M processor series |
| LibOpenCM3 | The libopencm3 project aims to create an open-source firmware library for various ARM Cortex-M microcontrollers. |
| STM32Cube | STM32Cube embedded software libraries, including: The HAL hardware abstraction layer, enabling portability between different STM32 devices via standardized API calls; The Low-Layer (LL) APIs, a light-weight, optimized, expert oriented set of APIs designed for both performance and runtime efficiency |