Pular para o conteúdo principal

Laboratório 05

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
LAB05Template 0529-Sep-202506-Oct-2025Mó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);
  • Teste de uso do LoadMX

Avaliação

  • Uso do template e LoadMX - 20%
  • 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 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 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-2025-2-A/LAB05 --private -p ELT73A-LAB-TPL/LAB05 -c

Acesse o diretório do repositório clonado:

cd LAB05

Abra o repositório clonado no VS Code:

code . --profile "STM32"

Carregue o script do STM32CubeMX com LoadMX

LoadMX TIM2EXTI0ADC1PWM TIM2EXTI0ADC1PWM.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

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

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

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

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

Na interrupção do ADC1, faça a leitura do AN1 e atualize o valor de comparação do PWM:
TIM2->CCR1 = HAL_ADC_GetValue(&hadc1);

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 */
TIM2->CCR1 = HAL_ADC_GetValue(&hadc1);
/* USER CODE END ADC_IRQn 1 */
}

Uso de variáveis

Src/stm32f4xx_it.c
void ADC_IRQHandler(void)
{
/* USER CODE BEGIN ADC_IRQn 0 */
uint16_t adc1in1;
float voltage;
/* USER CODE END ADC_IRQn 0 */
HAL_ADC_IRQHandler(&hadc1);
/* USER CODE BEGIN ADC_IRQn 1 */
adc1in1 = HAL_ADC_GetValue(&hadc1);
voltage = (adc1in1*3.3)/4095;
/* USER CODE END ADC_IRQn 1 */
}

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

Generate code with TIM2 and EXT INT

LoadMX TIM2EXTI0 TIM2EXTI0.txt

Generate code with TIM2, EXT INT and ADC1

LoadMX TIM2EXTI0ADC1 TIM2EXTI0ADC1.txt

Generate code with TIM2, EXT INT, ADC1 and PWM

LoadMX TIM2EXTI0ADC1PWM TIM2EXTI0ADC1PWM.txt