Utilizando o Arduino com o STM32

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.

Arduino_e_STM32.jpg

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.

STM32_e_USB.jpg

            O diagrama de ligações entre os dois módulos pode ser visto logo em seguida.

STM32_e_USB_sch.jpg

     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.

1.png

Instalando a biblioteca do Arduino Zero.

4.png

           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.

5.png

      Rode novamente a IDE Arduino e selecione Ferramentas -> Placa:.. -> Generic STM32F103C series.

6.png

        Selecione novamente Ferramentas -> Variant:… -> STM32F103C8 (20k RAM, 64k Flash).

7.png

          Selecione Ferramentas -> CPU Speed(MHz):… -> 72Mhz (Normal).

8.png

      Selecione Ferramentas -> Upload method:… -> Serial. Assim será possível comunicar a IDE com o módulo USB a ser utilizado.

9.png

          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.

10.png

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.

11.png

          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.

12.png

             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.

13.png

          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.

14.png

       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

Esse post foi publicado em Sem categoria. Bookmark o link permanente.

6 respostas para Utilizando o Arduino com o STM32

  1. robertocarlos disse:

    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

    Curtir

  2. 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:

    Curtir

Deixe um comentário