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).
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.
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!.
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.
Deixe um comentário