Pular para o conteúdo principal

Laboratório 03

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
LAB03TPL0306-Apr-202613-Apr-2026Arquitetura 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 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 LAB03

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 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"
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


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


Edite o seu código

Core/Scr/main.c
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.

Core/Scr/main.c
/* 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.

Core/Scr/main.c
/* 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

Core/Scr/main.c
/* 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"

Referências