Placa STM32 barata + IDE Arduino UPD 17/08/2017

image

Deseja atualizar seus projetos do Arduino? Faça com que eles trabalhem mais rapidamente, faça medições e ajustes mais precisos e adicione bugs (eles são inevitáveis ​​com novos dispositivos). Então este artigo é para você.

O tema Arduino captura cada vez mais as mentes da humanidade, mas mais cedo ou mais tarde nos deparamos com o fato de que estamos perdendo algo, por exemplo, orçamento / tamanhos / pinos de portas / capacidade de bits / desempenho ... Como uma pessoa sábia disse - “Quem quiser, ele procura oportunidades quem não quer está procurando por razões. ”

As pessoas boas entendem isso e lentamente começam a anexar o STM32 ao tema do arduino , porque os microcontroladores AVR de oito bits, nos quais muitas placas de arduino são baseadas, nem sempre conseguem lidar com as tarefas.

Um resumo deste artigo em formato de vídeo:



Ok, menos letras e mais perto do tópico. Neste artigo, considerarei uma placa de depuração barata, baseada no microcontrolador STM32F103C8T6 :

image

Primeiro, vamos comparar os principais parâmetros da placa STM32 e seu preço análogo - Arduino Nano V3.0:

  • Freqüência de operação 72 MHz, versus 16 para arduino;
  • A quantidade de memória Flash é de 64 Kbytes, contra 32;
  • RAM, é RAM (onde as variáveis ​​estão armazenadas), o STM32 tem até 20 Kbytes, o arduinka tem apenas 2;
  • ADC rápido de 12 bits, enquanto as placas Arduino que usam microcontroladores AVR (geralmente a maioria) usam 10 bits. Isso significa que, no caso do STM32, a função é analogRead (*); retornará 0..4095 versus 0..1023, o que no primeiro caso leva a medições mais precisas;
  • 16- , 8- Arduino , , analogWrite(*);pwmWrite(*); 0..65535, 0..255. , , ;
  • USB, Arduino 2 ;
  • — 2 3.6( 2 AA ), 2.7...5 ;
  • — 1.9 1.8().

Obviamente, a placa de depuração baseada no STM32 supera o Arduino Nano em todos os aspectos, exceto pelo preço, mas concorda que 10 centavos é um bom preço para um ótimo desempenho, mas sobre os periféricos com os quais o STM32 está cheio, fico completamente em silêncio quanto ao valor do DMA ou relógios em tempo real integrados no microcontrolador.

image

Tudo isso torna essa placa extremamente atraente em tudo, exceto em uma coisa - para um iniciante, como eu, o tema STM32 parece muito demorado, existem sites inteiros dedicados à programação desses microcontroladores. Mas se você fizer o STM32 amigo do IDE do Arduino, o limite de entrada cairá para um nível extremamente baixo. Embora, como se costuma dizer, "em cada barril de mel exista uma mosca na pomada", mas mais sobre isso abaixo.

Vamos começar a preparar o quadro para trabalhar com o Arduino IDE. A primeira coisa que precisa ser feita é fazer o upload de um carregador de inicialização especial para o microcontrolador, o que permitirá que você atualize a placa via USB de hardware e diretamente do ambiente de desenvolvimento. Para fazer isso, mova o jumper superior (também conhecido como "BOOT0"), para a posição "1":

image

Para que servem os jumpers BOOT0 e BOOT1?
, STM32 , (system memory), , USB to UART , ST-Link V2.

image


Em seguida, precisamos de um adaptador de USB para UART. Vale lembrar que o STM32 é lógico de 3,3V , a compatibilidade com 5V não é garantida, por isso é recomendável usar o USB para UART, que tem a capacidade de selecionar modos de operação com lógica de 3,3 / 5V. Usei um adaptador barato baseado no CH340G:

image
* como você pode ver, o fabricante não se virou com uma lavagem de fluxo, é claro, isso não afeta o trabalho.

Conectei a placa ao adaptador USB para UART da seguinte maneira:

G <-> GND;
5V <-> 5V;
PA10 <-> TXD;
PA9 <-> RXD.

image
* O PA10 / PA9 na placa é simplesmente assinado como A10 / A9 - essas portas são o primeiro hardware USART, há 3 delas na placa, também existem 2 I2Cs de hardware e 2 SPIs.

Por uma questão de conveniência, liguei a placa de 5 V; para a alimentação de 3,3 V, há um pino "3,3" na placa. Atenção, 5 V pode desativar facilmente o microcontrolador ; portanto, preste a devida atenção à conexão.

Faça o download, instale e execute o Flash Loader Demonstrator (disponível no arquivo do artigo):

image

selecione o número da porta COM do nosso adaptador, no meu caso é COM43 e clique em "Avançar":

image

como tenho um novo microcontrolador, a mosca ainda não parouninguém escreveu nada para ele (é claro, exceto o próprio fabricante); então, por padrão, há proteção contra leitura, o programa nos avisa que se você clicar no botão "Remover proteção", a memória Flash será limpa, ou seja, se houver algum tipo de firmware - ela vai se aposentar. No meu caso, não há nada útil lá, então pressiono com ousadia. A seguir, vejo o seguinte:

image

Clique em "OK":

image

Como minha placa de depuração é baseada no microcontrolador STM32F103 C8 - há 64 Kbytes de memória Flash, também há um microcontrolador STM32F103 CB , onde há o dobro de Flash.

Depois clique em “Next”:

image

Novamente, “Next”, e vemos a seguinte janela:

image

Selecione “Download to device” e clique em “...”:

image

Altere o tipo de arquivo para * .bin e abra o arquivo "generic_boot20_pc13.bin" (também presente no arquivo morto ), que pode ser obtido no projeto STM32duino-bootloader .

Em seguida, clicamos no botão “Next”, após o firmware do carregador de inicialização, vemos uma luz verde:

image

precisamos baixar, para o ambiente de desenvolvimento do Arduino IDE, um kernel STM32 especial (também está no arquivo do artigo). Há uma nuance aqui, no momento da redação deste artigo, o kernel não funciona em versões do ambiente de desenvolvimento acima da 1.6.5 , tenho o 1.6.5-r5 que baixei aqui .
O kernel foi testado para funcionar no Arduino IDE versão 1.6.9 .

Em seguida, descompacte o conteúdo em Meus Documentos \ Arduino \ hardware:

image

No meu caso, o caminho completo se parece com isso - "C: \ Usuários \ RSK \ Documents \ Arduino \ hardware"

É claro que o sistema não pode determinar o sistema do dispositivo, então você ainda precisa instalar os drivers na placa. Vamos para a pasta "Meus documentos \ Arduino \ hardware \ Arduino_STM32 \ drivers \ win" (ou "drivers \ win", no caso de um arquivo no artigo), e executamos o arquivo "install_drivers.bat" como administrador:

image

depois disso, o jumper superior (que que “BOOT0”), coloque-o na posição “0” e conecte a placa ao computador via cabo microUSB:

image

deve ser definido no gerenciador de dispositivos como “Maple DFU” ou “Maple Serial (COM *)”:

image

não está claro por que, após a primeira conexão Como a placa é definida de maneira diferente em computadores diferentes, mas não é o ponto, continuamos a configurar o Arduino IDE.

Lançamos o ambiente de desenvolvimento e, em seguida, Ferramentas ->

image

Placa -> Gerenciador de placas: Aqui você precisa instalar o kernel para a placa Arduino Due. Selecione a versão mais recente e clique em “Instalar”:

image

Ferramentas -> Placa -> “STM32F103C genérico” e depois Variante: “STM32F103C8 (20k RAM. 64k Flash)”, Método de Upload: “STM32duino bootloader”, Número da porta COM da placa - porta , em geral, tudo é como na captura de tela:

image

Tudo, a placa está pronta para firmware e programação no ambiente de desenvolvimento do Arduino IDE. Vamos costurar alguns esboços dos exemplos que são "costurados" no kernel, vá em Arquivo -> Pasta com esboços -> hardware -> Arduino_STM32 -> STM32F1 -> bibliotecas -> A_STM32_Examples -> Digital -> Blink:

image

clássico "Hello World" no mundo dos microcontroladores. Mudamos PB1 para PC13, já que o LED na placaconectado a esta porta:

image
* A propósito, ele acende em um nível baixo na perna do PC13.

Pressionamos o botão “Download”, após o firmware, o ambiente de desenvolvimento exibirá algo como:

image

“Concluído!
Redefinindo o USB para retornar ao modo de tempo de execução
Erro ao redefinir após o download: usb_reset: não foi possível redefinir o dispositivo, erro de vitória: Não foi possível encontrar o arquivo especificado. "

Mas o firmware foi carregado com sucesso, embora nem sempre seja o caso, às vezes o IDE do Arduino envia outras mensagens.

Não foi possível encontrar o dispositivo DFU
, :

image

«dfu-util — © 2007-2008 by OpenMoko Inc.
Couldn't find the DFU device: [1EAF:0003]
This program is Free Software and has ABSOLUTELY NO WARRANTY»

, .


Procurando pelo dispositivo DFU [1EAF: 0003] ...
:

image

«Searching for DFU device [1EAF:0003]…
Assuming the board is in perpetual bootloader mode and continuing to attempt dfu programming...»

, . Arduino Pro Mini.


E agora sobre a "mosca na pomada", sobre a qual escrevi no começo do artigo, por algum motivo, nem sempre é possível exibir a placa no ambiente de desenvolvimento, mais ainda, nem sempre é determinado pelo computador. Decidi isso da seguinte maneira: antes de baixar o firmware (antes de clicar no botão "Download"), clique em "Redefinir" no quadro e, após o firmware, reinicializo o quadro novamente. Nesse caso, a porcentagem de probabilidade de que o conselho seja costurado é de 99%. Não está claro por que funciona dessa maneira, mas é um fato. Acho que mais cedo ou mais tarde esse batente será corrigido e tudo será reiniciado automaticamente conforme necessário. E, para corrigir isso mais rapidamente, é necessário que a comunidade dessa maravilhosa placa de depuração do STM32 cresça; portanto, compartilhe este artigo com amigos, especialmente amigos de programadores.

Sobre a pinagem:

Clicável
, ( ):

image
() www.stm32duino.com/viewtopic.php?p=11137

, :

digitalWrite(PB0, LOW);
analogWrite(PA8, 65535);pwmWrite(PA8, 65535);
analogRead(PA0);
LiquidCrystal lcd(PB0, PA7, PA6, PA5, PA4, PA3);


docs.leaflabs.com/docs.leaflabs.com/index.html Arduino IDE, .

, :
Documents\Arduino\hardware\Arduino_STM32\STM32F1\variants\generic_stm32f103c\board.cpp

, :
  • , analogWrite();pwmWrite(); — PB0, PA7, PA6, PA3, PA2, PA1, PA0, PB7, PB6, PA10, PA9, PA8, , ;
  • , analogRead(); — PB0, PA7, PA6, PA5, PA4, PA3, PA2, PA1, PA0.


. , 1.9 .

, PA12/PA11 D+/D- USB, , , 2- , .


A placa de circuito:



Bem, por último:

image

Olá geektimes.ru
//https://github.com/mk90/LiquidCrystalRus

//STM32  !

#include <LiquidCrystalRus.h>

LiquidCrystalRus lcd(PB9, PB8, PB7, PB6, PB5, PB4);

void setup() {
  lcd.begin(16, 2);
  lcd.print("");
  lcd.setCursor(0, 1);
  lcd.print("geektimes.ru");
}

void loop() {
  lcd.setCursor(14, 1);
  lcd.print(millis() / 1000);
}



Links:
Arquivo para o artigo ;
Portal de um amigo de Roger Clark dedicado a portar STM32 , perguntas / sugestões / obrigado, tudo lá;
https://github.com/rogerclarkmelbourne/Arduino_STM32 ;
http://docs.leaflabs.com/docs.leaflabs.com/index.html - foi esse projeto que Roger tomou como base, portanto, existem muitas coisas úteis, embora em inglês;
A versão 1.6.5-r5 do Arduino IDE pode ser baixada aqui ;
Meu artigo, até certo ponto, cruza com o amigo " STM32 vs Arduino " @RaJa ;
Folha de dados no STM32F103C8T6 ;
Todas as minhas publicações sobre geektimes .

UPD 15/07/2016
O kernel foi testado para funcionar na versão 1.6.9 do Arduino IDE:
geektimes.ru/post/277928/#comment_9532576

PS
O que mais se esqueceu
:

image

, .

, microUSB :

image

, , .

Source: https://habr.com/ru/post/pt395577/


All Articles