Por Yasser Issmail.
A plataforma Arduino
O Arduino é uma plataforma de código aberto de baixo custo muito utilizada por estudantes e hobbystas para o desenvolvimento de seus projetos, tanto acadêmicos quanto do tipo “faça você mesmo” (e com qualidade). É comum também atualmente encontrarmos desenvolvedores mais experientes utilizando o Arduino para agilizar o desenvolvimento de protótipos e conceitos de equipamentos, além de embarcá-los em seus produtos finais destinados à comercialização. Sua plataforma amigável é dividida em hardware, composta pela placa de desenvolvimento com um microcontrolador, e pelo software, composta pelo seu ambiente de desenvolvimento, onde é elaborado o programa ou sketch.
O projeto foi concebido por estudantes na Itália em 2005, com o intuito de proporcionar outra experiência, diferente das convencionais em relação ao estudo das arquiteturas dos microcontroladores e de suas linguagens de máquina. Desde então, abriu-se a possibilidade para que qualquer pessoa, com o mínimo de conhecimento na área, pudesse criar seus projetos e aplicá-los de acordo com suas necessidades. A facilidade em manipular os códigos, escritos em uma linguagem de programação padrão baseada em wirings, se assemelha muito à linguagem C e C++. E a grande quantidade de bibliotecas prontas facilita muito todo o trabalho de desenvolvimento.
O hardware do Arduino é composto por um microcontrolador e o lay out da placa possibilita o usuário ter acesso às portas de entrada e de saída digitais e analógicas, além de porta USB e outros recursos, que podem ser habilitados de acordo com o código utilizado. O microcontrolador mais usado nesta plataforma é o Atmel ATMega 328, com configuração de 8 bits, nem tão rápido e nem tão lento, mas com competência suficiente para executar boa parte das tarefas demandadas pelos usuários da plataforma. Com o passar do tempo, outros microcontroladores e dispositivos foram sendo adicionados à lista de modelos suportadas pela plataforma Arduino, aumentando a gama de possibilidades de aplicações e projetos. No site oficial do Arduino, www.arduino.cc, o suporte da plataforma para microcontroladores da família ARM Cortex M0, se direciona para o SAMD21 da Atmel, onde são oferecidas as placas Arduino e Genuíno ZERO, Arduino M0 e M0 PRO, e Arduino MKRZero. Para os microcontroladores da família ARM Cortex M3, o chip utilizado, também da Atmel, é o SAM3X8E, presente na placa Arduino Due.
Um projeto experimental desenvolvido pelo australiano Roger Clark possibilitou que a família de microcontroladores da ST Microelectronics, o STM32, pudesse ser utilizada a partir da plataforma Arduino, facilitando não só o aprendizado, mas também o desenvolvimento de protótipos com arquiteturas de 32 bits. Na figura abaixo podem ser visualizados o Arduino UNO e o STM32.
A Família STM32 e o Core ARM Cortex-M3
Na última década, boa parte dos fabricantes adotaram o ARM7 e o ARM9 como a CPU de suas linhas de microcontroladores, embarcando-os em uma gama de equipamentos, que vão desde simples relógios, passando por complexas máquinas de automação, e chegando até mesmo a serem utilizados em sofisticados equipamentos de uso médico e hospitalar.
O núcleo ARM Cortex-M3, presente na família de microcontroladores STM32 da ST Microelectronics, representa um avanço baseado na própria arquitetura ARM de 32 bits. O chip STM32 possui, além do core ARM Cortex-M3, uma quantidade de periféricos internos suficiente para dispensar a ligação externa da maioria dos itens comumente utilizados nos microcontroladores de 8 bits mais difundidos do mercado, e por um custo baixíssimo, onde podemos encontrar chips a partir de três dólares a unidade.
O modelo que iremos utilizar na plataforma Arduino é o STM32F103C8T6, com invólucro LQFP de 48 pinos e alimentação de 3,3 volts. No caso da alimentação, é possível alimentar a placa com 5,0 volts e um circuito regulador de tensão se incumbe de abaixá-la para os 3,3 volts. Além disso, a maioria dos pinos de entrada e saída são compatíveis com entrada de 5,0 volts sem perigo de “queimar” o indivíduo, mesmo a alimentação principal sendo de 3,3 volts.
As principais características deste microcontrolador estão relacionadas abaixo.
- Core Clock de até 72 MHz.
- Memória Flash de 64 Kbytes (dá um belo de um programa).
- Memória SRAM de 20 Kbytes (muitas variáveis e vetores podem acontecer aqui).
- Oscilador dedicado de 32 kHz, a partir de cristal externo, para uso em RTC (Real Time Clock – Relógio de Tempo Real).
- Bateria de backup para RTC e dados armazenados em registradores específicos.
- 10 canais para conversão A/D de até 1 microssegundo, com direito a sensor de temperatura interno.
- Acesso Direto à Memória (Direct Memory Access – DMA).
- 32 portas de Entrada e Saída de uso geral, sendo que dessas, 16 portas podem ser mapeadas e configuradas ao mesmo tempo como interrupção externa e com tensão máxima de tolerância de 5 volts.
- 7 timers
- Interfaces de comunicação disponíveis: 3 USARTs; 2 SPIs; 2 I2Cs; 1 CAN; 1 USB
As memórias Flash de 64 Kbytes e a SRAM de 20 Kbytes possibilitam a confecção de códigos mais elaborados, explorando bem os recursos oferecidos pelo fabricante, tanto a nível de core como de disponibilidade de periféricos e interfaces de comunicação. A utilização do DMA (Acesso Direto à Memória) funciona quase que como algo mágico. Imagine vários processos acontecendo dentro de um microcontrolador praticamente ao mesmo tempo! E isso dá um bom assunto para outro artigo.
Diante das características apresentadas acima, pode-se notar que a aplicação da família STM32 em novos projetos possibilita a utilização de vários recursos resumidos em um único chip. A utilização de mais de um tipo de comunicação diferente, sejam estas USART com USART, ou SPI com I2C e também USART, além do domínio da utilização do acesso direto à memória (DMA), fazem com que este microcontrolador proporcione novas experiências em matéria de desenvolvimento de sistemas embarcados, por um custo menor do que o equivalente às tecnologias anteriores, de 8 bits, com menos recursos de memória e periféricos.
O Passo a Passo para Utilizar o Arduino no STM32
O Hardware
Em primeiro lugar, é preciso entender como o STM32 faz comunicação com o computador. Na figura abaixo é possível visualizar a protoboard contendo a placa que utilizaremos do STM32 ligada à um módulo conversor USB x USART. Esta plaquinha pode ser adquirida através de algum site chinês, que levará um bom tempo para chegar, ou ser comprada por aqui mesmo, através do Mercado Livre , por exemplo. Por este último, é possível encontrá-la com preço inferior a R$ 20,00 a unidade. Basta digitar a palavra chave STM32F103 e várias ofertas irão aparecer.
O diagrama de ligações entre os dois módulos pode ser visto logo em seguida.
Neste caso, está sendo utilizado como conversor o FT232 da FTDI (www.ftdichip.com ), que tem como função converter o sinal TTL, tanto TX e RX de ambos os módulos, em descritores baseados no protocolo USB. A partir de um driver instalado no PC ou notebook, é possível criar uma COM virtual, operando de forma análoga a uma porta serial, só que pela USB.
O Software
Para iniciar, acesse a página principal do Arduino em: www.arduino.cc, e na sessão de downloads escolha a versão 1.6.9 para baixá-la. Rode a IDE e execute as seguintes etapas, conforme segue abaixo.
Selecione Ferramentas -> Placa:.. -> Gerenciar Bibliotecas e instale a biblioteca referente ao Arduino Zero.
Instalando a biblioteca do Arduino Zero.
Faça o download dos arquivos do STM32 aqui.
Feche a IDE Arduino e copie o conteúdo do arquivo zipado em arduino-1.6.9/hardware/. O caminho deverá ficar conforme mostrado na figura abaixo.
Rode novamente a IDE Arduino e selecione Ferramentas -> Placa:.. -> Generic STM32F103C series.
Selecione novamente Ferramentas -> Variant:… -> STM32F103C8 (20k RAM, 64k Flash).
Selecione Ferramentas -> CPU Speed(MHz):… -> 72Mhz (Normal).
Selecione Ferramentas -> Upload method:… -> Serial. Assim será possível comunicar a IDE com o módulo USB a ser utilizado.
Para finalizar a configuração da IDE do Arduino, a porta de comunicação deve ser escolhida. Para isso, feche a IDE e, caso o driver do módulo USB utilizado já tenha sido instalado, plugue o cabo USB e vá em Gerenciador de Dispositivos -> Portas (COM & LPT) e verifique em qual COM este módulo está referenciado. Feito isso, abra novamente a IDE do Arduino e selecione Ferramentas -> Porta e escolha a COM correspondente ao módulo USB.
Testando o Arduino com o STM32
Vamos realizar o primeiro teste iniciando por algo bem simples, que é fazer piscar o LED existente na placa. Para isso, vamos seguir os passos conforme descritos abaixo.
Iremos utilizar a própria biblioteca de exemplos do Arduino para gravar no microcontrolador. Selecione Arquivo -> Exemplos -> A_STM32_Examples -> Digital ->Blink.
Iremos modificar a posição do LED, que na placa utilizada está ligada na porta PC13. Então basta substituir onde estiver escrito PB1 por PC13. Para carregar o programa na memória flash do microcontrolador, um jumper da placa do STM32 deve ser alterado de posição.
Agora tecle no botão de RESET da placa e clique no ícone representado por uma seta para que o programa possa ser compilado e carregado na memória flash do microcontrolador.
Após carregado o programa, automaticamente a placa irá funcionar. Porém, é recomendável que o jumper de boot seja recolocado na posição, conforme mostrado na figura a seguir, pois caso a placa seja desligada e posteriormente realimentada, automaticamente o circuito de RESET será acionado e o programa, agora gravado na memória flash, irá rodar da forma desejada.
Para terminar, seguem algumas considerações importantes:
- A entrada USB da placa não funciona como porta de comunicação com a IDE do Arduino, devendo ser utilizado um módulo à parte conforme o diagrama de ligações mostrado anteriormente .
- Esta plaquinha encaixa perfeitamente em uma protoboard, possibilitando testes e prototipagens rápidas com outros dispositivos e circuitos externos.
- Por ser um projeto experimental do STM32 com a plataforma Arduino, algumas funções ainda podem não estar disponíveis. Recomendo seguir o link do Roger Clark para obter atualizações de bibliotecas e outras funcionalidades.
- Caso queiram se aprofundar no desenvolvimento utilizando o STM32, recomendo o site do fabricante, ST Microelectronics. Neste link é possível fazer o download do datasheet, e também de vários application notes com exemplos práticos de uso deste microcontrolador.
Referências
Parabéns excelente post,muito bem explicado. Já havia colocado uma desta no meu carrinho de compras do aliexpress,agora vejo com a sua explicação que vou conseguir fazer funcionar.
Obrigado
CurtirCurtir
Obrigado!
Com certeza o seu módulo irá funcionar! Abraços.
CurtirCurtir
oi.
Estou pesquisando sobre estes modulos, vc teria algo a dizer?
SAMD21 M0-Mini. 32-bit ARM Cortex M0 core. pinos UnSoldered. compatível com Arduino Zero, Arduino M0. forma Mini.
https://pt.aliexpress.com/item/SAMD21-M0-Mini-32-bit-ARM-Cortex-M0-core-Pins-UnSoldered-Compatible-with-Arduino-Zero-Arduino/32779722487.html?spm=a2g0s.13010208.99999999.297.ur8FVc
https://pt.aliexpress.com/item/STM32F103C8T6-ARM-Minisystem-Development-Board-STM32-Development-Core-Board-with-cable/32821192338.html?spm=a2g0s.9042311.0.0.iIgzsI
obrigado
CurtirCurtir
Boa tarde! Me parece que o SAMD21 M0 já funciona com o Arduino Zero e M0, disponível na plataforma Arduino. Na outra placa, STM32F103… basta seguir o tutorial do artigo. Caso venha utilizar o SAMD21, informe sua experiência por aqui. 😉
CurtirCurtir
Grande Roberto Carlos , parabéns pelo site muito bem explicado. Meu Stm32 esta funcionando com a IDE do Arduino, e o culpado foi você. Muito obrigado!!!
A gente tem um pouco de experiência com arduino e delphi. Veja meu projeto abaixo:
CurtirCurtir
Muito bom o seu projeto, Marcio! Parabéns!
Forte abraço,
Yasser Issmail.
CurtirCurtir