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
- Wokwi
- 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 "ESP32IO"
Wokwi for VSCode: Embedded systems and IoT simulator supporting ESP32, Arduino, and the Raspberry Pi Pico.
- Wokwi for VSCode Your code never leaves your computer - Wokwi runs the simulation inside VS Code, using the firmware binaries from your project.
code --install-extension wokwi.wokwi-vscode --profile "ESP32IO"
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 "ESP32IO"
You need to edit the system environment variable called Path and append %USERPROFILE%\.platformio\penv\Scripts\ path in the beginning of the list.
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
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-2-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-2-A/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-2-A/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
- Grupo S22-B: https://github.com/ELT73A-S22-2026-2-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-2-B/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-2-B/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
- Grupo S22-C: https://github.com/ELT73A-S22-2026-2-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-2-C/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-2-C/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
- Grupo S22-D: https://github.com/ELT73A-S22-2026-2-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-2-D/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-2-D/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
- Grupo S22-E: https://github.com/ELT73A-S22-2026-2-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-2-E/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-2-E/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
- Grupo S22-F: https://github.com/ELT73A-S22-2026-2-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-2-F/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-2-F/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
- Grupo S22-G: https://github.com/ELT73A-S22-2026-2-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-2-G/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-2-G/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
- Grupo S22-H: https://github.com/ELT73A-S22-2026-2-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-2-H/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-2-H/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
- Grupo S22-I: https://github.com/ELT73A-S22-2026-2-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-2-I/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-2-I/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
- Grupo S22-J: https://github.com/ELT73A-S22-2026-2-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-2-J/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-2-J/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
- Grupo S22-K: https://github.com/ELT73A-S22-2026-2-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-2-K/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-2-K/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
- Grupo S22-L: https://github.com/ELT73A-S22-2026-2-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-2-L/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-2-L/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
- Grupo S22-X: https://github.com/ELT73A-S22-2026-2-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-2-X/LAB09 --private -p ELT73A-LAB-TPL/LAB09 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-2-X/LAB09 --web
Abra o repositório clonado no VS Code:
code LAB09 --profile "STM32"
Como fazer commit da atualizações
Verifique o status do repositório:
git status
Adicione os arquivos modificados:
git add .
Realize o commit das alterações:
git commit -m "Descrição breve das alterações realizadas!"
Envie para o repositório remoto (GitHub):
git push
Vizualize o log de alterações:
git log
Vizualize no GitHub:
gh repo view --web
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

O debugger ST-LINK/V2 possue um conector IDC de 10 pinos. A pinagem é descrita na figura a seguir.

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 |
Crie um gh alias para deploy-debug
gh alias set deploy-debug 'tag="$1"; cp ./build/Debug/*.elf ./firmware-debug.elf && gh release create "$tag" ./firmware-debug.elf --generate-notes && rm ./firmware-debug.elf' --shell
Como funciona:
- Considera a etiqueta de lançamento como $1.
- Copia o ELF de ./build/Debug/*.elf → ./firmware-debug.elf.
- Executa gh release create com o arquivo renomeado.
- Limpa removendo o arquivo renomeado temporário.
Uso:
gh deploy-debug v1.0.0
Rápida verificação do upload
Assim que o comando terminar, você poderá verificar o upload diretamente em seu terminal usando:
gh release view v1.0.0 --web