Tutorial sobre TIM Timers com STM32CubeMX

Placa de desenvolvimento (STM32F407G-DISC1)
Software STM32CubeMX (Versão 6.10.0)
IDE Keil µVision5 (MDK-Arm)
Driver ST-LINK/V2
Analisador Lógico nanoDLA Objetivo do Experimento

Configurar o STM32F407 utilizando o STM32CubeMX para controlar um LED verde a cada 500ms usando o Timer básico TIM6 e um LED vermelho a cada 1s usando o Timer básico TIM7. Visão Geral dos Timers

O STM32F407 possui 2 timers básicos, 10 timers genéricos e 2 timers avançados, totalizando 14 timers distribuídos nas barras de clock APB1 e APB2. A frequência máxima da barra de clock APB2 é de 84MHz, enquanto a de APB1 é de 42MHz. Todos os timers, exceto TIM2 e TIM5 que são de 32 bits, são de 16 bits. O diagrama estrutural dos timers é mostrado abaixo Nota 1. Os diferentes timers possuem características distintas, incluindo comprimento do contador, direção do contagem, capacidade de gerar solicitações DMA e número de canais de captura/comparação. Consulte a tabela a seguir para detalhes específicos Nota 2. Fluxo do Experimento

Conhecimentos Prévios

Os timers básicos TIM6 e TIM7 são de 16 bits e têm uma estrutura simples, oferecendo apenas funcionalidades básicas de temporização ou geração de sinais para DAC. Neste experimento, utilizaremos apenas a funcionalidade de temporização. O diagrama abaixo mostra a estrutura dos timers básicos Nota 3. Os timers básicos recebem seu clock da linha de clock dos timers APB1. Quando um timer básico é iniciado, o sinal de clock passa pelo pré-divisor PSC para reduzir sua frequência, incrementando então o valor do contador. Quando o contador atinge o valor definido no registrador de recarga automática (ARR), ocorre um estouro. ### Configurações no STM32CubeMX

Configurações Básicas do Projeto

Abra o STM32CubeMX, selecione o MCU do seu kit de desenvolvimento (nesse caso, STM32F407VG), e inicie um novo projeto. Configure os cristais HSE/LSE e o modo Debug na aba System Core. #### Configuração da Árvore de Clock

Os timers básicos obtêm seu clock da linha de clock dos timers APB1. Com a configuração padrão, a frequência da linha de clock dos timers APB1 é de 84MHz. #### Configuração dos Parâmetros do Periférico

Na aba Pinout & Configuration, selecione TIM6 e TIM7 sob a categoria Timers. Ative esses timers e configure seus parâmetros: prescaler (PSC), modo de contagem e período do contador (ARR). Para obter um estouro a cada 500ms, use PSC=8399 e ARR=4999. Para um estouro a cada segundo, defina ARR=9999. #### Configuração de Interrupções

Configure as interrupções para TIM6 e TIM7 na aba NVIC. Escolha uma prioridade de interrupção adequada e habilite as interrupções para esses timers. ### Geração de Código

Configurações do Gerenciador de Projetos

No gerenciador de projetos, configure o nome, diretório e ferramenta de compilação do projeto. Gere o código clicando em Generate Code. #### Fluxo de Inicialização do Periférico

A função MX_TIM6_Init() inicializa o timer TIM6 chamando HAL_TIM_Base_Init(), que por sua vez chama HAL_TIM_Base_MspInit() para configurar o clock e as interrupções do timer. #### Fluxo de Interrupção do Periférico

As funções de serviço de interrupção TIM6_DAC_IRQHandler() e TIM7_IRQHandler() chamam HAL_TIM_IRQ_Handler(), que redireciona a execução para HAL_TIM_PeriodElapsedCallback() quando ocorre um estouro do timer. #### Adicionar Código Adicional

Implemente HAL_TIM_PeriodElapsedCallback() para alternar o estado dos LEDs conforme necessário. O código abaixo demonstra essa implementação: ``` /* Função de callback do timer */ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim->Instance == TIM6) { HAL_GPIO_TogglePin(GPIO_PORT_VERDE, PIN_LED_VERDE); }

if(htim->Instance == TIM7)
{
    HAL_GPIO_TogglePin(GPIO_PORT_VERMELHO, PIN_LED_VERMELHO);
}

}


Inicie os timers TIM6 e TIM7 em modo de interrupção no loop principal do programa. Funções Úteis
-------------

- HAL\_TIM\_Base\_Start(): Inicia o timer em modo de sondagem.
- HAL\_TIM\_Base\_Stop(): Para o timer em modo de sondagem.
- HAL\_TIM\_Base\_Start\_IT(): Inicia o timer em modo de interrupção.
- HAL\_TIM\_Base\_Stop\_IT(): Para o timer em modo de interrupção.
- HAL\_TIM\_PeriodElapsedCallback(): Função de callback chamada no estouro do timer.

Gravação e Verificação
----------------------

Grave o programa no dispositivo e observe os LEDs alterando seu estado conforme programado. Utilize o analisador lógico para confirmar os sinais nos pinos correspondentes aos LEDs. Notas
-----

Nota 1: Imagem fornecida pelo datasheet STM32F407VGT6 DS8626.  
Nota 2: Imagem adaptada de um tutorial de STM32 CubeMX.  
Nota 3: Imagem extraída do manual de referência STM32F4xx em português.  
Nota 4: Detalhes no artigo HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim). </div>

Tags: STM32CubeMX STM32F407 Timers Basic Timers HAL Library

Publicado em 9-22 14:05