Pular para o conteúdo principal

Laboratório 04

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
LAB04TPL0413-Apr-202620-Apr-2026Interrupções via GPIO e Temporizadores (Timers);

Instruções do LAB

Esta atividade de laboratório tem como objetivo verificar a interrupção via GPIO com User KEY e interrupção via TIMER 2 do STM32. Cada item equivale a 10% da nota.

  • Crie um repositório na organização chamado LAB04 e clone 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;
  • Configure TIMER2 para 1s;
  • Gere o código, commit e push dos arquivos gerados;
  • Adicione o código para piscar o LED via interrupção do User KEY!
  • Adicione o código para piscar o LED via interrupção do TIM2!
  • Commit e push dos arquivos gerados;
  • Envie o link do repositório no GitHub (hyperlink);

Avaliação

  • Repositório criado no GitHub - 10%
  • Configuração dos periféricos - 20%
  • Configuração do TIMER2 para 1s - 20%
  • Código para piscar o LED via interrupção do User KEY -15%
  • Código para piscar o LED via interrupção do TIM2 - 15%
  • 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 LAB04

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 LAB04:

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

Visualize o repositório:

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

Abra o repositório clonado no VS Code:

code LAB04 --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

Generate code with TIM2 and EXT INT

LoadMX TIM2EXTI0 TIM2EXTI0.txt

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


Using GPIO EXTI0 Interrupt to Toggle BLUE LED Flag on WeActStudio STM32F411CEU6 board

Learn how to use the GPIO EXTI0 interrupt feature on the STM32F411CEU6 microcontroller to toggle a flag that controls a BLUE LED. This step-by-step guide covers configuring the GPIO pin, setting up the external interrupt, and writing the interrupt handler to efficiently manage LED toggling. Ideal for beginners and hobbyists working on STM32-based projects.

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

Inicialize o Timer 2 com suporte a rotina de interrupção:

Src/main.c
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM2_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim2);
/* USER CODE END 2 */

Toggle no LED interno via interrupção do User Key:

Src/stm32f4xx_it.c
void EXTI0_IRQHandler(void)
{
/* USER CODE BEGIN EXTI0_IRQn 0 */

/* USER CODE END EXTI0_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(User_KEY_EXTI0_Pin);
/* USER CODE BEGIN EXTI0_IRQn 1 */
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
/* USER CODE END EXTI0_IRQn 1 */
}

Toggle no LED interno via interrupção do Timer 2 (1s):

Src/stm32f4xx_it.c
void TIM2_IRQHandler(void)
{
/* USER CODE BEGIN TIM2_IRQn 0 */

/* USER CODE END TIM2_IRQn 0 */
HAL_TIM_IRQHandler(&htim2);
/* USER CODE BEGIN TIM2_IRQn 1 */
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
/* USER CODE END TIM2_IRQn 1 */
}

Com uso do flag BLUELED

Src/main.c
/* USER CODE BEGIN Includes */
#include <stdbool.h>
/* USER CODE END Includes */
Src/main.c
/* USER CODE BEGIN PV */
bool BLUELED = 0;
/* USER CODE END PV */
Scr/main.c
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
// Verify BLUELED Flag
if (BLUELED)
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); // LED ON
else
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); // LED OFF
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */

}
/* USER CODE END 3 */
Src/stm32f4xx_it.c
/* USER CODE BEGIN PV */
extern bool BLUELED;
/* USER CODE END PV */
Src/stm32f4xx_it.c
void EXTI0_IRQHandler(void)
{
/* USER CODE BEGIN EXTI0_IRQn 0 */
// Toggle BLUELED FLAG
BLUELED = !BLUELED;
/* USER CODE END EXTI0_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(User_KEY_EXTI0_Pin);
/* USER CODE BEGIN EXTI0_IRQn 1 */

/* USER CODE END EXTI0_IRQn 1 */
}

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 com LoadMX

Call for Help (--help, -h, /?)

LoadMX --help

Run STM32CubeMX interactively with LoadMX

LoadMX -i

To generate a script

export script ScriptToLoad.txt

Opens STM32CubeMX with provided Project Name and Script Name and loads default value for Code Generation (N)

LoadMX ProjectName ScriptName.txt

Opens STM32CubeMX with provided Project Name, Script Name and generate code

LoadMX ProjectName ScriptName.txt Y
LoadMX TIM2EXTI0 TIM2EXTI0.txt