Placa Franzininho C0, uma ARM Cortex M0+ Brasileira

Posted by

Olá pessoal, como vão? este é o primeiro artigo escrito inteiramente em 2024 para o blog FritzenLab; hoje vou falar sobre a Franzininho C0, uma placa de desenvolvimento nacional desenvolvida pelo Fábio Souza, que conta com ARM Cortex M0+ da ST (STM32C011F6P6).

franzininho C0
Franzininho C0

A ideia das placas Franzininho é empoderar os Brasileiros na área de programação de software embarcado, por meio de hardwares acessíveis (eu paguei R$70 nesta placa, mais frete). Eles tem diversas placas, inclusive com WiFi para você adquirir e usar.

O meu objetivo ao adquirir a Franzininho C0 foi aprender a programar os famosos Cortex M0+, que são o presente e o futuro do mundo embarcado. A ideia desta linha da ARM é substituir os antigos 8bit e 16bit, visto a grande eficiência energética e baixo custo dos Cortex M0+.

Sobre as especificações da Franzininho C0, temos:

  • Opera em 48Mhz
  • LED e botão de uso geral embarcados na placa
  • Memória Flash 32kB (mesma quantidade do Arduino UNO)
  • 13 entradas analógicas
  • RTC (relógio em tempo real)
  • 8 Timers/counters
  • 16 GPIO (pinos de entrada e saída)
  • Compatível com protoboard (veja imagem no início do artigo)
  • Programável via JTAG/serial wire debugging (SWD)

E como faz para programa-la?

Eu não encontrei um getting started (guia de início rápido) da Franzininho C0, então tive que colocar meus conhecimentos à prova. Na documentação do produto diz que é possível utilizar a IDE STM32CubeIDE (download aqui). Existem exemplos de código prontos para esta placa, no Github do projeto.

Como gravar o seu cógio na placa?

Eu lembrei que tenho em casa um gravador STlink-V2 que comprei no Aliexpress há vários anos; vi neste artigo que o programador funciona com STM32F103 (blue pill), enão deve funcionar com o C0.

Programador STlink-V2

O esquema de ligação do gravador é o seguinte:

Gravador Franzininho

3V3 — 3V3

GND — GND

SWDIO — SWIO

SWCLK – SWCLK

Baixe do Github indicado acima o projeto exemplo de sua escolha e descompacte em um local conhecido do seu computador. Ao abrir o software STM32Cube IDE, vá em “File > New > STM32 Project from an existing STM32CubeMX configuration file (.ioc)” e selecione o arquivo “.ioc” no local onde você deixou os arquivos baixados do Github, assim todos os arquivos do projeto serão importados para o ambiente.

Eu começei pelo exemplo “02-exemplo-blinky-int”, que faz piscar o LED onboard da Franzininho C0. No readme.md deste exemplo consta:

## Exemplo Blinky Int  

Pisca o LED1(PB6) duas vezes por segundo, usando interrupção do timer para temporizar as trocas de estado do LED.  

Foram configurados os seguintes periféricos:  

- GPIO:  PB6 - OUTPUT (LED1)  
- TIMER:  Timer 17
- Clock do sistema: interno 48 MHz  
  
Cálculo do timer para gerar a interrupção a cada 0,25s (250ms):  

- Intervalo = Contador * Prescaler / Master Clock  
- Master Clock: 48 MHz = 48.000.000 Hz  
- Prescaler: 48.000  
- Contador: 250  

## Software  
  
STM32CubeIDE Version: 1.13.0

Como bom engenheiro que sou, fui logo atrás de modificar o tempo (período) de piscada do LED. Descobri que não havia nada a mexer no arquivo main.c, achei o lugar secreto no arquivo tim.c (que é o arquivo dos timers). Na linha

htim17.Init.Period = (500 - 1);

que é onde define o perído do temporizador tim 17, alterei o valor 500 (em milissegundos) e funcionou, alterou o período de piscada (exemplos logo abaixo).

Para fazer a programação deste código no microcontrolador é necessário configurar o mesmo na STM32Cube IDE, fazendo assim:

No menu “Project” vá em “Properties; á esquerda clique em “Run/Debug settings”; clique em “New” e selecione “STM32 C/C++ application”. Na aba “Debugger” deixe marcado “Autostart local GDB server”, no dropdown selecione “ST-LINK (ST-LINK GDB SERVER)”.

Em “Interface” marque “SWD”; “frequency (kHz)” deixe em “Auto”, em “Access port” deixe em “0- Cortex – M0Plus”. Clique em “Apply” e depois “OK”.

Agora para compilar e gravar

Vá em “Project > Build All” e veja se não ficou nenhum erro (no console na parte de baixo da tela. A resposta positiva que obtive ao escrever este artigo foi:

15:11:53 Build Finished. 0 errors, 0 warnings. (took 4s.710ms)

Agora com a Franzininho já conectada ao STlink-V2 e ao computador, no menu superior clique em “Run > Run”. Após alguns segundos o console na parte inferior da tela vai ter algo parecido com isso, indicando sucesso.

-------------------------------------------------------------------
                       STM32CubeProgrammer v2.15.0                  
      -------------------------------------------------------------------



Log output file:   C:\Users\Clovisf\AppData\Local\Temp\STM32CubeProgrammer_a03280.log
ST-LINK SN  : 57FF71064880565370360987
ST-LINK FW  : V2J43S7
Board       : --
Voltage     : 3.22V
SWD freq    : 4000 KHz
Connect mode: Under Reset
Reset mode  : Hardware reset
Device ID   : 0x443
Revision ID : Rev A
Device name : STM32C01x
Flash size  : 32 KBytes (default)
Device type : MCU
Device CPU  : Cortex-M0+
BL Version  : 0x51



Memory Programming ...
Opening and parsing file: ST-LINK_GDB_server_a03280.srec
  File          : ST-LINK_GDB_server_a03280.srec
  Size          : 5.71 KB 
  Address       : 0x08000000 


Erasing memory corresponding to segment 0:
Erasing internal memory sectors [0 2]
Download in Progress:


File download complete
Time elapsed during download operation: 00:00:00.296



Verifying ...




Download verified successfully 


Shutting down...
Exit.

Agora você já pode ver o LED onboard da Franzininho C0 piscando!.

Piscada 100mS
Piscada 500mS

Diferente do mundo dos 8bit, os microcontroladores 32bit tem mais configurações e coisas para mexer, haja visto a quantidade de arquivos que vem para funcionar o código de piscar um LED. Eu lhe indico explorar um pouco mais cada arquivo, ver o que faz e o que acontece se mudar alguma coisa em cada um.

No GitHub do projeto há um total de 15 exemplos, desde o blink até ADC, PWM, encoder e teclado matricial, explore!.

Parabenizo ao Fábio Sousa por desenvolver esta ferramentas (e ao portal embarcados por divulgar). Lhe convido à pesquisar os outros artigos que escrevi aqui no blog, use a lupa na parte superior da página para pesquisar.

3 respostas

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *