Pular para o conteúdo principal

Laboratório 05

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
LAB05TPL0527-Apr-202604-May-2026Módulo PWM; Conversor ADC;

Instruções do LAB​

Esta atividade de laboratório tem como objetivo configurar o TIM2, ADC e PWM do STM32. Cada item equivale a 10% da nota.

  • Crie um repositório (LAB05) via template (https://github.com/ELT73A-LAB-TPL/LAB05) na organização e clone;
  • Carregue o arquivo de configuração TIM2EXTI0ADC1PWM.txt
  • Gere o código, commit e push dos arquivos gerados;
  • Adicione o código para piscar o LED via interrupção do User KEY;
  • Configure TIMER2 para 1s;
  • Adicione o código de configuração do ADC;
  • Adicione o código de leitura do ADC;
  • Adicione o código de atualização do PWM;
  • Commit e push dos arquivos modificados;
  • Envie o link do repositório no GitHub (hyperlink);

Avaliação​

  • Configuração dos periféricos 10%
  • Código para piscar o LED via interrupção do User KEY - 10%
  • Configuração do TIMER2 para 1s - 10%
  • Código de configuração e leitura do ADC - 10%
  • Código de atualização do PWM - 10%
  • 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 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

Crie um novo repositório com base no template do LAB05​

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

gh repo create ELT73A-S22-2026-2-A/LAB05 --private -p ELT73A-LAB-TPL/LAB05 -c

Visualize o repositório:

gh repo view ELT73A-S22-2026-2-A/LAB05 --web

Abra o repositório clonado no VS Code:

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


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

Implemente o código para piscar o LED via interrupção do User KEY e leitura do ADC com atualização do PWM​

Uso do flag BLUELED​

Implemente a lógica para acionar o LED azul via 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 Includes */
#include <stdbool.h>
/* USER CODE END Includes */
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 */
}

Timer 2 com interrupção e saída PWM no canal 1​

Inicialize o Timer 2 com suporte a rotina de interrupção e saída PWM no canal 1:

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

ADC1 na interrupção do Timer 2​

Inicie o ADC1 na interrupção do Timer 2:

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_ADC_Start_IT(&hadc1);
/* USER CODE END TIM2_IRQn 1 */
}

Leitura do AN1 e atualização do valor de comparação do PWM​

Na interrupção do ADC1, faça a leitura do AN1 e atualize o valor de comparação do PWM:

Src/main.c
/* USER CODE BEGIN PV */
bool BLUELED = 0; // Flag to control LED state
uint16_t adc1in1 = 0; // Variable to store ADC value
float voltage = 0.0f; // Variable to store calculated voltage
/* USER CODE END PV */
Src/stm32f4xx_it.c
/* USER CODE BEGIN PV */
extern bool BLUELED; // Flag to control the blue LED
extern uint16_t adc1in1; // Variable to store ADC value
extern float voltage; // Variable to store calculated voltage
/* USER CODE END PV */
Src/stm32f4xx_it.c
void ADC_IRQHandler(void)
{
/* USER CODE BEGIN ADC_IRQn 0 */

/* USER CODE END ADC_IRQn 0 */
HAL_ADC_IRQHandler(&hadc1);
/* USER CODE BEGIN ADC_IRQn 1 */
adc1in1 = HAL_ADC_GetValue(&hadc1); // Read ADC value
TIM2->CCR1 = adc1in1; // Update PWM duty cycle
voltage = (adc1in1*3.3)/4095; // Convert ADC value to voltage
/* USER CODE END ADC_IRQn 1 */
}

VS Code Terminal Configuration​

Configure Git Bash como terminal integrado do Visual Studio Code para evitar problemas de formatação de texto e comandos:

.vscode/settings.json
"terminal.integrated.defaultProfile.windows": "Git Bash",

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

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.0.0 --web