Primeiros passos com a Placa STM32F0 Discovery

STM32F0 Discovery

A placa STM32F0 Discovery é um produto da empresa franco-italiana STMicroelectronic, composta por um circuito debugger/gravador, o microcontrolador alvo STM32F51R8T6 (ARM Cortex-M0), um circuito periférico com duas chaves tact-switch (uma para propósitos gerais e uma para RESET) e dois LEDs (um verde e outro azul), além das barras de pinos laterais, as quais estendem o acesso a todos os pinos do microcontrolador, conforme exibido na figura 1:

 

STM32F0 Discovery: placa
Figura 1 - STM32F0 Discovery.

 

A STMicroelectronics tem um formato padrão dos kits Discovery, assim como os kits STM32F334 Discovery, STM32F3 Discovery, STM32F4 Discovery, entre outros, já apresentados respectivamente por Felipe Neves, Thiago Lima e André Curvello.

 

 

Objetivo

 

O propósito da apresentação deste kit é induzir iniciantes e profissionais a conhecer essa linha de microcontroladores da ST, assim como a percepção da facilidade em iniciar um projeto com esse hardware seja com o MDK-ARM, IAR Embedded Workbench for ARM, Atollic TrueSTUDIO ou Cocoox, e a possibilidade de embarcar um Real Time Operation System (Sistema Operacional de Tempo Real) da própria Keil (RTX). Assim, iremos dar alguns detalhes do microcontrolador, do circuito periférico disponível ao usuário e também a inicialização de um projeto básico (startup).

 

 

O Microcontrolador

 

A seguir listamos algumas características relevantes do microcontrolador STM32F051R8T6 que compõe a placa:

  • Core: ARM® 32-bit Cortex®-M0 CPU, cuja frequência vai até 48 MHz;
  • Memória: 64KB de Flash e 8KB de SRAM;
  • Gerenciador de Power e Reset: Power ON/Power Down Reset (POR/PDR), Detector de Tensão Programável (PVD), modos de baixo consumo (Sleep, Stop, Standby) e Vbat (pino 1 do microcontrolador) como fonte de alimentação para o RTC (Real Time Clock) e backup de registradores;
  • Clock: cristal oscilador de 4 até 32MHz (HSE - High-Speed External), cristal oscilador de 32kHz (LSE - Low-Speed External) para RTC, RC interno de 8MHz com opção de PLLx6 e outro RC interno de 40kHz;
  • I/O: até 55 fast I/Os sendo que 36 são tolerantes a 5Vdc;
  • Controlador DMA (Direct Memory Acess - Acesso Direto à Memória) de 5 canais;
  • Um ADC (Analog to Digital Converter - Conversor Analógico para Digital) de 12 bits cuja faixa de conversão é de 0 até 3,6Vdc e com fonte analógica separada;
  • Até 18 canais com sensoriamento capacitivo (chave, linear e rotatório);
  • 11 Timers;
  • 2 USARTs, suportando SPI síncrono master, LIN e IrDA;
  • 2 SPI (18Mbits/s) com 4 até 16 bit frame programável, uma com interface multiplexada I²S.

 

 

Circuito Periférico

 

O circuito periférico para propósito geral (usuário) é visto a seguir na figura 2:

 

STM32F0 Discovery: circuito periférico
Figura 2 - Circuito Periférico.

 

Percebe-se que ele é muito simples, nada de displays, acelerômetros, etc, mas já é o suficiente, inicialmente, para aprendermos como é feita a configuração dos GPIOs e do clock do core e fazer o LED piscar, ou seja, o “Hello World” embarcado.

 

Para aplicações ou projetos que utilizarão como uma unidade de controle, controlando um driver de motor, por exemplo, os LEDs poderão ser úteis para indicar que o código está rodando, ou seja, piscando a uma frequência conhecida pelo desenvolvedor, ou para passar alguma indicação de “erro”, assim assumindo um comportamento diferenciado.

 

Além deste circuito que é destinado ao usuário, o kit também dispõe de um debugger/gravador, o qual depura o código “step-by-step” (passo a passo) e também pode funcionar como um gravador para produtos já concebidos, apenas modificando dois “jumpers” e também um cabo customizado, exibidos na figura 3.

 

STM32F0 Discovery: jumpers st-link
Figura 3 - Jumpers ST-LINK.

 

 

“Hello World” STM32F0 Discovery

 

Para este projeto será utilizado como ferramenta de desenvolvimento o MDK-ARM da Keil, o qual pode ser baixado do site da empresa. Esta versão compila projetos de até 32KB, mas acredite, pode-se fazer muita coisa com isso! Além disso, é importante que seja instalado o driver para utilizarmos o ST-LINK debugger.

 

A escolha desta ferramenta foi subjetiva, sinta-se livre para usar outras que for mais conveniente, pois a configuração do hardware e o resultado final serão os mesmos.

 

A ST dispõe de muito conteúdo para auxiliar o desenvolvimento e aprendizado, principalmente com os kits Discovery, assim, baixe o STM32F0 Discovery kit firmware package”, pois além de projetos exemplos, neste pacote estão os arquivos system_stm32f0xx.c, system_stm32f0xx.h e o startup_stm32f0xx.s que serão utilizados.

 

Para iniciar um projeto no MDK-ARM, sugiro que seja lido o User Manual 1523, pois nesse manual é feito o passo a passo, além de ser ilustrado.

 

Lido o manual, inicializado o projeto no MDK-ARM e instalado o driver, sugiro que a árvore do projeto seja feita da seguinte forma, a fim de ser organizado:

 

STM32F0 Discovery: árvore do projeto
Figura 4 - Árvore do projeto.

 

Importante: lembre-se que os arquivos mencionados acima, arquivos-fonte “main.c” e  “.uvproj”, deverão estar na mesma pasta.

 

O diretório “Projeto Pisca LED” é composto pelos subdiretórios “CMSIS” e “Aplicação”. Em CMSIS estão os arquivos das rotinas de reset e configuração dos registradores do RCC (Reset and Clock Control), ou seja, configuração do clock do core, memória Flash e barramentos, além do arquivo “startup” constituído pelo mapa de vetores e também pela configuração do Stack Pointer, Heap e também qual instrução inicial que o Program Counter carregará após o reset, vide figura 5.

 

STM32F0 Discovery: Mapa dos vetores e Reset Handler
Figura 5 - Mapa de vetores e Reset Handler.

 

Pode-se visualizar na figura acima que no “Reset Handler” será chamada a rotina “SystemInit()” que fará o reset dos registradores de configuração do clock e ainda chamará a rotina que configurará o HSE (SetSysClock()”) vide figura 6. Porém, se o usuário for usar outra fonte de clock (High Speed Internal por exemplo), isto realizará um trabalho desnecessário, fazendo duas configurações uma sobrepondo a outra. Assim para este projeto, colocaremos esta rotina de configuração do HSE no arquivo “main” e comentaremos “SetSysClock()” em “SystemInit()”, porém se o usuário quiser manter a configuração do arquivo original, fique à vontade, apenas lembre-se da localização para modificações.

 

Assim sendo, o código fonte do “Pisca_LED” está a seguir:

 

 

Neste arquivo estão: “vSystemCoreClockSetHSE()” que realiza a configuração o clock como já dito, “vLEDs_Init()” que configura os GPIOs dos LEDs, as rotinas “vLED_Liga()” e “vLED_Desliga()” e a rotina de “vDelay()”. Na função main() é feito o pisca-pisca.

 

Para os profissionais mais experientes, a codificação do “pisca-pisca” é bem simples e não demanda conhecimentos extras, é claro, mas mostrará para quem não trabalhou com esta arquitetura ou fabricante, uma idéia de como funciona e para aqueles que são iniciantes, uma oportunidade em dedicar tempo para aprender e fazer algo novo.

 

É claro que não houve nenhuma preocupação quanto ao uso do “WatchDog”, “Power Voltage Detector (PVD)”, entre outros circuitos de monitoramento distintos, pois o ponto principal é dar um suporte básico para o “ponta-pé” inicial.

 

STM32F0 Discovery: Rotina SystemInit
Figura 6 - Rotina “SystemInit”.

 

 

Conclusão

 

Diante do apresentado neste artigo, ou seja, as características principais, as opções de funcionamento (fontes de clock, GPIOs, Flash, etc) e o que há de disponível para usufruir do kit STM32F0 Discovery, é possível realizar um projeto básico como o “pisca-pisca” e condicionar o usuário, mediante a esforços para agregar mais conhecimentos, projetos mais complexos.

 

Portando, é possível realizar um “Hello World” embarcado com este conteúdo e também fornecer conhecimentos básicos necessários para introduzirmos um RTOS futuramente.

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

22
Deixe um comentário

avatar
 
9 Comment threads
13 Thread replies
1 Followers
 
Most reacted comment
Hottest comment thread
10 Comment authors
DiegoCiro PeixotoJoão Vitor Lansoni BarbosaOliveira FaustoGlauber Sanches Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Diego
Visitante
Diego

Amigos bom dia.

Eu tenho uma placa STM32F0 e STM32F100...

Gostaria de ajuda pra entender como controlar um servo motor...

Alguma dica ou material por ai na comunidade?

Obrigado pela atenção.

Ernani Castro
Visitante
Ernani Castro

onde encontro placas como essa no Brasil? só acho versões muito básicas com stm32

Ciro Peixoto
Visitante
Ciro Peixoto

Belo artigo Eder!!! Parabens!!!

Eder Tadeu
Visitante
Eder Tadeu

Obrigado Ciro!

João Vitor Lansoni Barbosa
Visitante
João Vitor

Muito bacana! Gosto de estudar novas arquitetura as com o códigos e funções abertos ao programador, pois quando comecei me frustrava em usar ex: adc_Read(x) pois chaveamento do periférico é escondido. Gostei do seu post, Parabéns!

Eder Tadeu
Visitante
Eder Tadeu

Obrigado João!
Sempre há as duas formas de configuração ou uso de algum periférico do uC: configuração ou elaboração da rotina "escovando o bit" ou o uso da biblioteca do fabricante. Este úlitmo, tratando-se da ST, é muito confiável, ao menos nunca tive problemas com ela! 🙂

Oliveira Fausto
Visitante
Oliveira Fausto

A mikroElektronika disponibilizar versão demo que compila projetos de até 8KB, do mikroC PRO for ARM, mikroBasic PRO for ARM e mikroPascal PRO for ARM. De fácil aprendizado e o custo de aquisição é bem em conta, quando comparado com algumas outras opções.

Examples for STM32F051 line with STM32F0Discovery development board:

http://www.libstock.com/projects/view/803/stm32f0discovery-examples

Eder Tadeu
Visitante
Eder Tadeu

Bacana Oliveira! Mais uma opção de ferramenta para o desenvolvedor de ARM. Apenas gostaria de dar uma sugestão: tente usar àquelas que dispõe compiladores para C/C++, pois estas linguagens estão entre as mais utilizadas em embedded systems, ok? E obrigado pelo comentário, sempre é útil! 🙂

Glauber Sanches
Visitante
Glauber Sanches

Maior orgulho!

Eder Tadeu
Visitante
Eder Tadeu

Valeu brother!

Diego Moreno
Visitante
Diego Mendes Moreno

Muito legal!

Agora falando mais de gosto, eu gosto mais de trabalhar com o CubeMX (inicializador de código) como o Rafael Dias comentou. Acho ele bem simples para iniciantes.

E sobre o Keil, a ST tem um acordo com eles e para Cortex M0 (STM32F0xx) e Cortex M0+ (STM32L0xx), eles distribuem uma licença full gratuita. É via esse link: http://www.keil.com/mdk-st

Eder Tadeu
Visitante
Eder Tadeu

Que bacana Diego Mendes!!! Essa licença com certeza atrairá muitos desenvolvedores em início de projeto!

Gilvan Santana
Visitante
Gilvan Santana

Parabéns!

Eder Tadeu
Visitante
Eder Tadeu

Obrigado Gil!

Rafael Dias
Visitante
Rafael Dias

Vale ressaltar que os projetos para o Atollic podem ser carregados no eclipse + launchpad GCC

Eder Tadeu
Visitante
Eder Tadeu

Legal Rafael!

Rafael Dias
Visitante
Rafael Dias

acho que outro aspecto interessante a cobrir em algum artigo é o uso da STM32Cube (http://www.st.com/web/en/catalog/tools/FM146/CL2167/SC2004)

Eder Tadeu
Visitante
Eder Tadeu

Ah sim! O STM32 Cube eu já usei em projetos, na verdade apenas para configuração de GPIO e não para elaboração da árvore do projeto. É uma boa sugestão!

Rafael Dias
Visitante
Rafael Dias

eu usei ele como muleta para ver como se configurava algumas coisas... Na verdade, ainda uso.

Eder Tadeu
Visitante
Eder Tadeu

Rafael, esses dias que eu consegui lembrar o antecessor do STM32Cube: o MicroXplorer! A IDE era praticamente a mesma, mas com menos recursos. Você conheceu? Chegou a mexer?

Rafael Dias
Visitante
Rafael Dias

Não cheguei a usar pois Na época eu tinha um pouco de aversão a usar esses geradores de código, até o dia que apanhei muito para acertar a configuração de um oscilador para um projeto que estava tocando... Desde então eu uso para algumas coisas.

Eder Tadeu
Visitante
Eder Tadeu

Eu também tinha até o momento que eu tinha que configurar um STM32F407 (Cortex M4) com 144 pinos!