No campo dos sistemas embarcados, os microcontroladores, como componentes-chave, desempenham um papel importante em cenários como controle automático, Internet das Coisas e aplicações industriais. O STM32F407 lançado pela ST Company é um microcontrolador de 32 bits de alto desempenho e baixo consumo de energia que atraiu a atenção do mercado devido às suas excelentes funções e facilidade de uso. Neste artigo, vamos nos aprofundar nas características, especificações, áreas de aplicação e ambiente de desenvolvimento do STM32F407.
Sobre o STM32F407
A série de chips STM32F407 é um microcontrolador de alto desempenho lançado pela STMicroelectronics com base no núcleo ARM Cortex™-M4. Ele usa um processo NVM de 90 nanômetros e ART (Adaptive Real-Time Memory Accelerator™).
Recursos do STM32F407
O STM32F407 é baseado no núcleo ARM Cortex-M4, possui instruções DSP e uma unidade de ponto flutuante (FPU), e tem uma frequência de clock de até 168 MHz. Aqui estão suas principais características:
- Alto desempenho
Equipado com um núcleo Cortex-M4 de 32 bits, que suporta operações de ponto flutuante e baixa latência de ciclo de clock, ele pode fornecer recursos de computação de alta velocidade.
- Baixo consumo de energia
A tecnologia de ajuste dinâmico de tensão é usada para alternar entre diferentes modos de consumo de energia e reduzir o consumo de energia do sistema.
- Várias configurações de armazenamento
Até 1 MB de Flash e 192 KB de RAM para atender aos requisitos de espaço de armazenamento de várias aplicações.
- Suporte periférico poderoso
O STM32F407 possui interfaces de comunicação avançadas, como SPI, I2C, UART, etc.; suporta até 3 conversores ADC de 12 bits, 2 conversores DAC e temporizadores de alta resolução.
- Segurança e confiabilidade
O módulo CRC de hardware integrado oferece a função de detecção de erros de soma de verificação em tempo real; o temporizador Watchdog pode monitorar o status de funcionamento do sistema e evitar o bloqueio do software.
Especificações do STM32F407
| Specification | Details |
|---|---|
| MCU Model | STM32F407ZGT6 |
| Flash Memory | 1MB |
| Clock Frequency | Up to 168MHz |
| ADC | Three 12-bit |
| DAC | Two 12-bit |
| DMA | Two DMA controllers |
| Timers | Up to 17 timers |
| GPIO | Up to 120 configurable GPIO pins |
| Interfaces | Built-in I2C, SPI, USART, I2S, CAN, and SDIO communication interfaces |
Aplicação do STM32F407
Graças à sua flexibilidade e fácil escalabilidade, o STM32F407 é amplamente utilizado em vários cenários inteligentes, incluindo, mas não se limitando a:
- Dispositivos da Internet das Coisas (IoT)
O baixo consumo de energia do STM32F407 o torna adequado como unidade central de processamento de dispositivos IoT, como sensores e controladores.
- Automação industrial
Em campos como máquinas-ferramentas CNC e robôs industriais, o STM32F407 pode ser responsável pelo controle do sistema, aquisição e processamento de dados e comunicação com dispositivos periféricos.
- Eletrônicos de consumo
O STM32F407 pode ser usado em áreas de eletrônicos de consumo, como casas inteligentes e dispositivos vestíveis, para atender às exigências dos consumidores em termos de desempenho e consumo de energia.
Recursos de desenvolvimento do STM32F407
Para facilitar o trabalho dos desenvolvedores, a ST fornece uma grande variedade de recursos de desenvolvimento e suporte a ferramentas, incluindo:
- Placas de desenvolvimento das séries Discovery e Nucleo
- Ambientes de desenvolvimento integrado (IDEs), como Keil uVision e IAR
- Depurador JLINK, CMSIS-DAP, ULINK ou STLINK
- Kit de desenvolvimento de software STM32CubeF4 baseado na biblioteca HAL/HLL
Esses recursos ajudam a simplificar o processo de desenvolvimento, encurtar o ciclo de desenvolvimento e permitir que os desenvolvedores obtenham suporte técnico, compartilhem experiências e aprendam recursos.
Biblioteca HAL
A biblioteca HAL, Hardware Abstraction Layer, é na verdade o pacote de drivers periféricos do STM32F407. O arquivo de código está localizado no caminho:\Drivers\STM32F4xx_HAL_Driver.

CMSIS
CMSIS (Cortex Microcontroller Software Interface Standard) é um pacote de drivers oficialmente projetado pela ARM. O diagrama de blocos é o seguinte:

Com este pacote de software CMSIS, espera-se que a ARM unifique os drivers periféricos, o processamento de sinal digital DSP, os downloaders e as APIs de vários RTOSs convencionais de vários fabricantes de chips.
O STM32CubeMX é um software de desenvolvimento gráfico lançado pela ST em 2014 para facilitar aos usuários a configuração de relógios, periféricos, pinos, RTOS e vários middlewares. O diagrama de blocos é o seguinte:

Através deste software gráfico, você pode facilmente gerar código de engenharia e suportar compiladores como MDK, IAR e TrueSTUDIO.
Projeto da placa de desenvolvimento STM32F407
Nesta experiência de desenvolvimento, usamos a biblioteca HAL para acender um LED ou fazer um LED piscar.
Passo 1: Abra o STM32CubeMX, encontre o pino correspondente ao LED e configure-o como saída GPIO.

Passo 2: Selecione Serial Wire em SYS. Somente se estiver selecionado, os projetos subsequentes poderão ser gravados normalmente usando o st-link.

Passo 3: Ligue o relógio externo e habilite-o para atingir a frequência máxima de 407 168 MHz.

Etapa 4: Gerar código de engenharia.

O código gerado é mostrado abaixo, e as configurações dos pinos e do relógio estão todas definidas.
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct= {0}:
/*GPIO Ports Clock Enable */
_ _HAL_RCC_GPIOF_CLK_ENABLE():
_ _HAL_RCC GPIOH_CLK_ENABLE():
_ _HAL RCC GPIOA CLK_ENABLE():
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_SET):
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_RESET):
/*Configure GPIO pins:PF9 PF10 */
GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10:
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP:
GPIO_InitStruct.Pul1 =GPIO_NOPULL:
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW:
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct):
/*EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI2_IRQn, 0, 0):
HAL NVIC_EnableIRQ(EXTI2_IRQn):
HAL_NVIC_SetPriority(EXTI3_IRQn, 0, 0):
HAL_NVIC_EnableIRQ(EXTI3_IRQn):
HAL_NVIC_SetPriority(EXTI4_IRQn, 0, 0):
HAL_NVIC_EnableIRQ(EXTI4_IRQn):
}
Em seguida, escreva o programa para controlar a luz LED em while(1) da função principal.
while (1)
{
/* USER CODE END WHILE */
//Light up the LED
//HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10|GPIO_PIN_9, GPIO_PIN_RESET);
{
//LED flashes
HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_9|GPIO_PIN_10);
HAL_Delay(1000);
}
/* USER CODE BEGIN 3 */
}




