quinta-feira, agosto 24, 2023

Mini Review: WeAct STM32G431 Core Board

 Outra placa da WeAct, desta vez com um microcontrolador STM32. A minha experiência com estes microcontroladores é muito pouca, estando restrita a umas poucas brincadeiras com a BluePill e BlackPill.


O coração desta placa é um STM32G431, um microcontrolador que o fabricante chama de "mixed-signal" para enfatizar os seus recursos de processamento digital e analógico. O núcleo é um ARM Cortex M4, com uma unidade de ponto flutuante (precisão simples) e instruções de processamento de sinal digital (DSP), galopando a 170 MHz. Os periféricos analógicos incluem 2 ADCs de 12 bits, 4 comparadores, 3 amplificadores operacionais e 4 canais de DAC. A lista de periféricos de comunicação também é extensa: 3 I2C, 3 SPI, 3 UARTs e USB (somente device). Temos ainda um relógio de tempo real (RTC), que pode ser alimentado por uma bateria.

Na parte de memória, temos 32 kbytes de Ram e 128 kbytes de Flash, internos ao microcontrolador.

A placa não inclui muitos componentes adicionais. Temos os tradicionais botões de Reset e Boot, mais um "botão do usuário" (ligado a um GPIO).  Um LED de ligado e um LED ligado a um GPIO. Um conector USB-C é usado para alimentação e comunicação (através da USB nativa). Um regulador linear (LDO) baixa os 5V da USB para os 3,3V usados pelo microcontrolador. Há espaço para soldar um conector para debug.

O que nos leva aos conectores principais de expansão. Com muitos pinos para ligar e uma placa compacta, a solução foi usar conectores duplos, o que impede o uso direto em protoboard (salvo altas gambiarras).

Para testar a placa, eu usei o projeto stm32duino para programar a placa com a IDE do Arduino. É preciso instalar o  STM32CubeProgrammer da ST, mas a gravação de programas não requer hardware adiconal. O programa que eu rodei foi o benchmark Whetstone que eu tinha adaptado para testar o Arduino Uno R4. Os resultados foram bons e ficaram ainda melhores quando mandei otimizar o código para velocidade (algo que o stm32duino permite de forma simples):

Placa    Repetições      Tempo  Desempenho Observações 
-------- ---------- ----------  ---------  --------------------------------
Uno R4         2000  71.94 sec   2.8 MIPS  R7FA4M1     48 MHz
PiPico         2000  19.17 sec  10.4 MIPS  Cortex M0+ 125 MHz
ESP32          2000  12.70 sec  15.7 MIPS  Xtensa LX6 240 MHz
STM32G431      2000  14.14 sec  14.1 MIPS  STM32G431  170 MHz -Os (default)
-------- ---------- ----------  ---------  ---------------------------------
PiPico        10000  96.xx sec  10.4 MIPS  Cortex M0+ 125 MHz
ESP32         10000  61.85 sec  16.2 MIPS  Xtensa LX6 240 MHz
STM32G431     10000  67.35 sec  14.8 MIPS  STM32G431  170 MHz -Os (default)
STM32G431     10000  41.64 sec  24.0 MIPS  STM32G431  170 MHz -O3
-------- ---------- ----------  ---------  ---------------------------------

A documentação pode ser vista em

https://github.com/WeActStudio/WeActStudio.STM32G431CoreBoard.


Veredito: Com um preço (no momento) na faixa de US$4 (na loja oficial na AliExpress), esta é uma placa com uma ótima relação custo/desempenho. O conector vai dificultar um pouco o uso e o tamanho da memória desaconselha o uso de MicroPython, mas além da IDE do Arduino existem as ferramentas da própria ST.

2 comentários:

João Pedro disse...

Interessante, adquiri um há pouco tempo, fiz o flash do firmware manualmente mas não consigo acessar a UART pela porta USB, gostaria de visualizar o monitor serial, você conseguiu?

Daniel Quadros disse...

João Pedro, a USB não está ligada à UART. No Arduino existe a opção de incluir o suporte ao modo CDC da USB e usar ele para o objeto Serial. Se você quiser usar a UART vai ter que colocar um conversor serial USB externo.