Pular para o conteúdo principal

Laboratório 11

Documentação de Apoio para Atividade de Laboratório

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.

TarefaTemplateInícioFimConteúdo
LAB11TPL1108-Jun-202615-Jun-2026Introdução ao Display OLED SSD1306;

Conteúdo

Uso do display OLED SSD1306

Display OLED 0.96″ 128×64 I2C Azul

Recursos:

More:

Uso do stm32-i2c-lcd-1602

STM32: LCD 1602 w/ I2C adapter usage example

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 Path e 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 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
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 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.

Crie um novo repositório com base no template do LAB11

Escolha o Grupo e entre com o comando abaixo para criar o repositório no GitHub:

Cole o comando abaixo no prompt aberto na pasta de trabalho!

Use o comando abaixo para criar o repositório no GitHub com base no template do laboratório LAB11:

gh repo create ELT73A-S22-2026-1-A/LAB11 --private -p ELT73A-LAB-TPL/LAB11 -c

Visualize o repositório:

gh repo view ELT73A-S22-2026-1-A/LAB11 --web

Abra o repositório clonado no VS Code:

code LAB11 --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 Path e 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


STM32F4x1 microcontroller pinout diagram;

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

ST-LINK/V2 Clone


VS Code

Configuração do terminal

settings.json
{
"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
}
}
}

SSD1306 files

CMakeLists.txt
# Add sources to executable
target_sources(${CMAKE_PROJECT_NAME} PRIVATE
# Add user sources here
${CMAKE_CURRENT_SOURCE_DIR}/Drivers/ssd1306/ssd1306.c
${CMAKE_CURRENT_SOURCE_DIR}/Drivers/ssd1306/ssd1306_fonts.c
${CMAKE_CURRENT_SOURCE_DIR}/Drivers/ssd1306/ssd1306_tests.c
)

# Add include paths
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
# Add user defined include paths
${CMAKE_CURRENT_SOURCE_DIR}/Drivers/ssd1306
)

STM32Cube HAL: debugging and unit testing

Pisca LED

Definição do pino no arquivo main.h

src/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:

src/main.c
#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();
}
platformio.ini
[env:blackpill_f411ce]
platform = ststm32
board = blackpill_f411ce
framework = stm32cube
upload_protocol = stlink
debug_tool = stlink

Arduino

Inicie LED_Init:

src/main.c
#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);
}

platformio.ini
[env:blackpill_f411ce]
platform = ststm32
board = blackpill_f411ce
framework = arduino
upload_protocol = stlink
debug_tool = stlink

Frameworks

NameDescription
ArduinoArduino 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.
CMSISVendor-independent hardware abstraction layer for the Cortex-M processor series
LibOpenCM3The libopencm3 project aims to create an open-source firmware library for various ARM Cortex-M microcontrollers.
STM32CubeSTM32Cube 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 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