Laboratório 03
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.
| Tarefa | Template | Início | Fim | Conteúdo |
|---|---|---|---|---|
| LAB03 | TPL03 | 06-Apr-2026 | 13-Apr-2026 | Arquitetura de microcontroladores; Pinos de propósito geral (GPIO); |
Conteúdo
Arquitetura de microcontroladores; Pinos de propósito geral (GPIO);
Esta atividade de laboratório tem como objetivo verificar a configuração adequada dos periféricos e debug via ST/Link do STM32.
- Crie um repositório na organização chamado LAB03;
- Clone o repositório para a sua máquina local;
- Crie e importe um projeto em branco;
- Configure SYS Debug para Serial Wire e RCC Clock
- Configure User KEY e Blue LED
- Gere o código, commit e push dos arquivos gerados;
- Crie um novo branch chamado new-feature;
- Adicione o código para piscar o LED!
- Commit e push dos arquivos gerados;
- Teste de geração e compilação de projeto para o STM32F411CEUx;
- Teste de uso do LoadMX
- Envie o link do repositório no GitHub (hyperlink);
Avaliação
- Crie um repositório na organização chamado LAB03 - 10%
- Clone, crie e importe um projeto em branco - 20%
- Configure os periféricos - 20%
- Gere o código, commit e push dos arquivos gerados - 10%
- Crie um novo branch chamado new-feature - 10%
- Adicione o código para piscar o LED - 10%
- Commit, push e envie o link do repositório no GitHub (hyperlink) - 20%
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 LAB03
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/LAB03
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB03:
gh repo create ELT73A-S22-2026-1-A/LAB03 --private -p ELT73A-LAB-TPL/LAB03 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-A/LAB03 --web
Abra o repositório clonado no VS Code:
code LAB03 --profile "STM32"
- Grupo S22-B: https://github.com/ELT73A-S22-2026-1-B
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB03
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB03:
gh repo create ELT73A-S22-2026-1-B/LAB03 --private -p ELT73A-LAB-TPL/LAB03 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-B/LAB03 --web
Abra o repositório clonado no VS Code:
code LAB03 --profile "STM32"
- Grupo S22-C: https://github.com/ELT73A-S22-2026-1-C
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB03
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB03:
gh repo create ELT73A-S22-2026-1-C/LAB03 --private -p ELT73A-LAB-TPL/LAB03 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-C/LAB03 --web
Abra o repositório clonado no VS Code:
code LAB03 --profile "STM32"
- Grupo S22-D: https://github.com/ELT73A-S22-2026-1-D
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB03
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB03:
gh repo create ELT73A-S22-2026-1-D/LAB03 --private -p ELT73A-LAB-TPL/LAB03 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-D/LAB03 --web
Abra o repositório clonado no VS Code:
code LAB03 --profile "STM32"
- Grupo S22-E: https://github.com/ELT73A-S22-2026-1-E
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB03
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB03:
gh repo create ELT73A-S22-2026-1-E/LAB03 --private -p ELT73A-LAB-TPL/LAB03 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-E/LAB03 --web
Abra o repositório clonado no VS Code:
code LAB03 --profile "STM32"
- Grupo S22-F: https://github.com/ELT73A-S22-2026-1-F
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB03
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB03:
gh repo create ELT73A-S22-2026-1-F/LAB03 --private -p ELT73A-LAB-TPL/LAB03 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-F/LAB03 --web
Abra o repositório clonado no VS Code:
code LAB03 --profile "STM32"
- Grupo S22-G: https://github.com/ELT73A-S22-2026-1-G
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB03
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB03:
gh repo create ELT73A-S22-2026-1-G/LAB03 --private -p ELT73A-LAB-TPL/LAB03 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-G/LAB03 --web
Abra o repositório clonado no VS Code:
code LAB03 --profile "STM32"
- Grupo S22-H: https://github.com/ELT73A-S22-2026-1-H
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB03
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB03:
gh repo create ELT73A-S22-2026-1-H/LAB03 --private -p ELT73A-LAB-TPL/LAB03 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-H/LAB03 --web
Abra o repositório clonado no VS Code:
code LAB03 --profile "STM32"
- Grupo S22-I: https://github.com/ELT73A-S22-2026-1-I
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB03
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB03:
gh repo create ELT73A-S22-2026-1-I/LAB03 --private -p ELT73A-LAB-TPL/LAB03 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-I/LAB03 --web
Abra o repositório clonado no VS Code:
code LAB03 --profile "STM32"
- Grupo S22-J: https://github.com/ELT73A-S22-2026-1-J
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB03
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB03:
gh repo create ELT73A-S22-2026-1-J/LAB03 --private -p ELT73A-LAB-TPL/LAB03 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-J/LAB03 --web
Abra o repositório clonado no VS Code:
code LAB03 --profile "STM32"
- Grupo S22-K: https://github.com/ELT73A-S22-2026-1-K
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB03
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB03:
gh repo create ELT73A-S22-2026-1-K/LAB03 --private -p ELT73A-LAB-TPL/LAB03 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-K/LAB03 --web
Abra o repositório clonado no VS Code:
code LAB03 --profile "STM32"
- Grupo S22-L: https://github.com/ELT73A-S22-2026-1-L
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB03
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB03:
gh repo create ELT73A-S22-2026-1-L/LAB03 --private -p ELT73A-LAB-TPL/LAB03 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-L/LAB03 --web
Abra o repositório clonado no VS Code:
code LAB03 --profile "STM32"
- Grupo S22-X: https://github.com/ELT73A-S22-2026-1-X
- LAB Template: https://github.com/ELT73A-LAB-TPL/LAB03
Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB03:
gh repo create ELT73A-S22-2026-1-X/LAB03 --private -p ELT73A-LAB-TPL/LAB03 -c
Visualize o repositório:
gh repo view ELT73A-S22-2026-1-X/LAB03 --web
Abra o repositório clonado no VS Code:
code LAB03 --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
Diagrama de pinos do STM32F4x1

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

Edite o seu código
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
Crie uma branch nova
Seguindo as boas práticas de desenvolvimento, crie uma branch nova para desenvolver a atividade do laboratório. Utilize um nome significativo para a branch, veja como criar uma nova branch utilizando como nome new-feature:
Como criar uma nova branch
Verifique o status do repositório:
git status
Crie uma nova branch:
git branch new-feature
Altere para a nova branch:
git checkout new-feature
Mostra as branches:
git branch
Envie a nova branch para o repositório remoto:
git push --set-upstream origin new-feature
Compara as branches:
git diff main new-feature
Retorna para a branch principal:
git checkout main
Mescla a branch nova na branch principal:
git merge new-feature
Vizualize no GitHub:
gh repo view --web
Coloque o seu código no local destinado para o código do usuário:
Em um projeto gerado pelo STM32CubeMX, o código do usuário deve ser colocado dentro dos blocos de código delimitados por USER CODE BEGIN e USER CODE END. Esses blocos são preservados durante a regeneração do código, garantindo que suas modificações não sejam sobrescritas.
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
// Place your code HERE!
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
// Place your code HERE!
}
/* USER CODE END 3 */
Toggle com HAL_GPIO_TogglePin e HAL_Delay
Veja a documentação do STM32F4xx HAL Driver para mais detalhes sobre as funções de GPIO e Delay.
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
HAL_Delay(100); /* Insert delay 100 ms */
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
// Place your code HERE!
}
/* USER CODE END 3 */
Toggle com HAL_GPIO_WritePin e HAL_Delay
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); // LED ON
HAL_Delay(100); /* Insert delay 100 ms */
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); // LED OFF
HAL_Delay(100); /* Insert delay 100 ms */
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
// Place your code HERE!
}
/* USER CODE END 3 */
Toggle com HAL_GPIO_WritePin se o botão estiver pressionado
// If Button Is Pressed
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0))
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); // LED OFF
else
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); // LED ON
Crie um novo release e envie o arquivo
Se você deseja criar um release, nomeie a tag (etiqueta de lançamento) e carregue seu arquivo .elf de uma só vez, sem abrir um navegador, esta é a sintaxe mais eficiente:
gh release create v1.0.0 ./path/to/your_file.elf --generate-notes
- --generate-notes: Cria automaticamente um changelog com base no seu histórico de commits desde a última tag.
Ex:
gh release create v1.1.0 ./build/Debug/*.elf --generate-notes
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
Crie um gh alias para deploy-release
gh alias set deploy-release 'tag="$1"; cp ./build/Release/*.elf ./firmware-release.elf && gh release create "$tag" ./firmware-release.elf --generate-notes && rm ./firmware-release.elf' --shell
Como funciona:
- Considera a etiqueta de lançamento como $1.
- Copia o ELF de ./build/Release/*.elf → ./firmware-release.elf.
- Executa gh release create com o arquivo renomeado.
- Limpa removendo o arquivo renomeado temporário.
Uso:
gh deploy-release v1.0.0
Crie um gh alias para deploy-all
gh alias set deploy-all 'tag="$1"; cp ./build/Debug/*.elf ./firmware-debug.elf && cp ./build/Release/*.elf ./firmware-release.elf && gh release create "$tag" ./firmware-debug.elf ./firmware-release.elf --generate-notes && rm ./firmware-debug.elf ./firmware-release.elf' --shell
Como funciona:
- Considera a etiqueta de lançamento como $1.
- Copia o ELF de ./build/Debug/*.elf → ./firmware-debug.elf.
- Copia o ELF de ./build/Release/*.elf → ./firmware-release.elf.
- Executa gh release create com ambos os arquivos renomeados.
- Limpa removendo os arquivos renomeados temporários.
Uso:
gh deploy-all 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.1.0 --web
Crie um gh alias para verificar o upload
gh alias set deploy-view 'gh release view "$1" --web' --shell
Como funciona:
- Considera a etiqueta de lançamento como $1.
- Executa gh release view com a opção --web para abrir a página do lançamento no navegador Uso:
gh deploy-view v1.0.0
Listar aliases
Comando para listar os aliases criados:
gh alias list
Como carregar um script do STM32CubeMX
Call for Help (--help, -h, /?)
LoadMX --help
Run STM32CubeMX interactively with LoadMX
LoadMX -i
To generate a script
export script ScriptToLoad.txt
LoadMX ProjectName FinalScript.txt
code ProjectName --profile "STM32"
code . --profile "STM32"