Pular para o conteúdo principal

Laboratório 04

Atividade em Construção

A documentação desta atividade de laboratório está em processo de construção e por isso pode estar incompleta.

Utilize como base a descrição apresentada no Moodle da disciplina.

TarefaTemplateInícioFimConteúdo
LAB04Template 0422-Sep-202529-Sep-2025Interrupçõ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"

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-2025-2-A/LAB04 --private -p ELT73A-LAB-TPL/LAB04 -c

Acesse o diretório do repositório clonado:

cd LAB04

Abra o repositório clonado no VS Code:

code . --profile "STM32"

Generate code with TIM2 and EXT INT

LoadMX TIM2EXTI0 TIM2EXTI0.txt

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 "My message for this commit!"

Envie para o repositório remoto (GitHub)

git push

Vizualize o log de alterações

git log

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.

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 */
}

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