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

imagen

¿Quieres actualizar tus proyectos Arduino? Haga que funcionen más rápido, haga mediciones y ajustes más precisos y agregue errores (son inevitables con los nuevos dispositivos). Entonces este artículo es para ti.

El tema Arduino captura cada vez más las mentes de la humanidad, pero tarde o temprano nos enfrentamos con el hecho de que nos falta algo, por ejemplo, presupuesto / tamaños / pines de puerto / capacidad de bits / rendimiento ... Como dijo una persona sabia : "Quien quiera, busca oportunidades quien no quiere está buscando razones ".

Las buenas personas entienden esto y lentamente comienzan a adjuntar STM32 al tema arduino , porque los microcontroladores AVR de ocho bits, en los que se basan muchas placas arduino, no siempre pueden hacer frente a las tareas.

Un resumen de este artículo en formato de video:



De acuerdo, menos letras y más cerca del tema. En este artículo, consideraré una placa de depuración barata, que se basa en el microcontrolador STM32F103C8T6 :

imagen

para empezar, comparemos los parámetros principales de la placa STM32 y su precio análogo: Arduino Nano V3.0:

  • Frecuencia de operación 72 MHz, versus 16 para arduino;
  • La cantidad de memoria Flash es de 64 Kbytes, contra 32;
  • RAM, es RAM (donde se almacenan las variables), el STM32 tiene hasta 20 Kbytes, el arduinka tiene solo 2;
  • ADC rápido de 12 bits, mientras que las placas Arduino que usan microcontroladores AVR (generalmente es la mayoría) usan 10 bits. Esto significa que en el caso de STM32, la función es analogRead (*); devolverá 0..4095 versus 0..1023, lo que en el primer caso conduce a mediciones más 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, la placa de depuración basada en STM32 supera al Arduino Nano en todos los aspectos, excepto por el precio, pero estoy de acuerdo con que 10 centavos es un buen precio para un gran rendimiento, pero sobre los periféricos con los que está relleno el STM32, estoy completamente en silencio sobre lo que vale DMA o relojes integrados en tiempo real en el microcontrolador.

imagen

Todo esto hace que esta placa sea extremadamente atractiva en todo, excepto en una cosa: para un principiante, como yo, el tema STM32 parece demasiado lento, hay sitios enteros dedicados a la programación de estos microcontroladores. Pero si se hace amigo de STM32 con el IDE de Arduino, entonces el umbral de entrada cae a un nivel extremadamente bajo. Aunque, como dicen, "en cada barril de miel, hay una mosca en la pomada", pero más sobre eso a continuación.

Comencemos a preparar la placa para trabajar con Arduino IDE. Lo primero que debe hacerse es cargar un cargador de arranque especial en el microcontrolador, lo que le permitirá actualizar la placa a través del hardware USB y directamente desde el entorno de desarrollo. Para hacer esto, mueva el puente superior (también conocido como "BOOT0"), a la posición "1":

imagen

¿Para qué sirven los puentes BOOT0 y BOOT1?
, STM32 , (system memory), , USB to UART , ST-Link V2.

image


A continuación, necesitamos un adaptador de USB a UART. Vale la pena recordar que STM32 tiene una lógica de 3.3V , no se garantiza la compatibilidad con 5V, por lo que se recomienda utilizar USB a UART, que tiene la capacidad de seleccionar modos de operación con lógica de 3.3 / 5V. Utilicé un adaptador barato basado en CH340G:

imagen
* como puede ver, el fabricante no se dio la vuelta con un lavado de fundente, por supuesto, no afecta el trabajo.

Conecté la placa al adaptador USB a UART de la siguiente manera:

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

imagen
* PA10 / PA9 en la placa simplemente se firma como A10 / A9: estos puertos son el primer hardware USART, hay 3 de ellos en la placa, también hay 2 I2C de hardware y 2 SPI.

En aras de la conveniencia, alimente la placa desde 5 V, para la alimentación desde 3.3 V hay un pin "3.3" en la placa. Atención, 5 V pueden desactivar fácilmente el microcontrolador , así que preste la debida atención a la conexión.

Descargue, instale y ejecute Flash Loader Demonstrator (disponible en el archivo del artículo):

imagen

seleccione el número de puerto COM de nuestro adaptador, en mi caso es COM43, luego haga clic en "Siguiente":

imagen

ya que tengo un nuevo microcontrolador, la mosca todavía no se sentónadie le escribió nada (por supuesto, excepto el propio fabricante), entonces, de forma predeterminada, hay protección contra lectura, el programa nos advierte que si hace clic en el botón "Eliminar protección", la memoria Flash se borrará, es decir, si hubiera algún tipo de firmware - Ella se retirará. En mi caso, no hay nada útil allí, así que presiono audazmente. Luego veo lo siguiente:

imagen

Haga clic en "Aceptar":

imagen

dado que mi placa de depuración se basa en el microcontrolador STM32F103 C8 : hay 64 Kbytes de memoria Flash, también hay un microcontrolador STM32F103 CB , donde hay el doble de Flash.

Luego haga clic en "Siguiente":

imagen

Nuevamente, "Siguiente", y veremos la siguiente ventana:

imagen

Seleccione "Descargar al dispositivo" y haga clic en "...":

imagen

Cambie el tipo de archivo a * .bin y abra el archivo "generic_boot20_pc13.bin" (también presente en el archivo) que puede tomarse del proyecto STM32duino-bootloader .

Luego hacemos clic en el botón "Siguiente", después del firmware del gestor de arranque veremos una luz verde:

imagen

luego necesitamos descargar, para el entorno de desarrollo Arduino IDE, un núcleo STM32 especial (también está en el archivo del artículo). Hay un matiz aquí, al momento de escribir, el kernel no funciona en versiones del entorno de desarrollo sobre 1.6.5 , tengo 1.6.5-r5 que descargué aquí .
El kernel fue probado para funcionar en Arduino IDE versión 1.6.9 .

A continuación, descomprima el contenido en Mis documentos \ Arduino \ hardware:

imagen

En mi caso, la ruta completa se ve así: "C: \ Users \ RSK \ Documents \ Arduino \ hardware"

Por supuesto, el sistema no podrá identificar el dispositivo, por lo que aún necesita instalar los controladores en la placa. Vamos a la carpeta "Mis documentos \ Arduino \ hardware \ Arduino_STM32 \ drivers \ win" (o "drivers \ win", en el caso de un archivo para el artículo), y ejecutamos el archivo "install_drivers.bat" como administrador:

imagen

después de eso, el puente superior (que ese "BOOT0"), colóquelo en la posición "0" y conecte la placa a la computadora a través de un cable microUSB:

imagen

debe definirse en el administrador de dispositivos como "Maple DFU" o "Maple Serial (COM *)":

imagen

no está claro por qué después de la primera conexión la placa se define de manera diferente en diferentes computadoras, pero no es el punto, procedemos a configurar el IDE de Arduino.

Lanzamos el entorno de desarrollo, luego Herramientas ->

imagen

Tablero -> Administrador de Tableros: Aquí debe instalar el núcleo para el tablero Arduino Due. Seleccione la última versión y haga clic en "Instalar":

imagen

luego Herramientas -> Placa -> "STM32F103C genérico", luego Variante: "STM32F103C8 (20k RAM. 64k Flash)", Método de carga: "STM32duino bootloader", Puerto - número de puerto COM de la placa , en general, todo es como en la captura de pantalla:

imagen

todo, la placa está lista para el firmware y la programación en el entorno de desarrollo Arduino IDE. Cosemos un boceto de los ejemplos que están "cosidos" en el núcleo, vaya a Archivo -> Carpeta con bocetos -> hardware -> Arduino_STM32 -> STM32F1 -> bibliotecas -> A_STM32_Examples -> Digital -> Blink:

imagen

Classic "Hello World" en el mundo de los microcontroladores. Cambiamos PB1 a PC13, ya que el LED en el tableroconectado a este puerto:

imagen
* Por cierto, se ilumina a un nivel bajo en la pata PC13.

Presionamos el botón "Descargar", después del firmware, el entorno de desarrollo mostrará algo como:

imagen

"¡Listo!
Restablecimiento del USB para volver al modo de tiempo de ejecución.
Error al restablecer después de la descarga: usb_reset: no se pudo restablecer el dispositivo, error al ganar: no se puede encontrar el archivo especificado ".

Pero el firmware se cargó con éxito, aunque no siempre es así, a veces el IDE de Arduino da otros mensajes.

No se pudo encontrar el 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»

, .


Buscando el 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.


Y ahora, sobre la "mosca en la pomada", sobre la cual escribí al principio del artículo, por alguna razón no siempre es posible mostrar la pizarra en el entorno de desarrollo, aún más, no siempre está determinada por la computadora. Decidí esto por mí mismo de la siguiente manera, antes de descargar el firmware (antes de hacer clic en el botón "Descargar"), hago clic en "Restablecer" en la placa, y después del firmware, reinicio la placa nuevamente. En este caso, el porcentaje de probabilidad de coser el tablero es del 99%. No está claro por qué funciona de esa manera, pero es un hecho. Creo que tarde o temprano esta jamba se corregirá y todo se reiniciará automáticamente según sea necesario. Y para solucionar esto más rápido, es necesario que la comunidad de esta maravillosa placa de depuración STM32 crezca, así que comparta este artículo con amigos, especialmente amigos programadores.

Sobre el pinout:

Clickable
, ( ):

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- , .


La placa de circuito:



Bueno, por último:

imagen

Hola 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);
}



Enlaces:
Archivo del artículo ;
Portal de un amigo de Roger Clark dedicado a portar STM32 , preguntas / sugerencias / gracias, todo allí;
https://github.com/rogerclarkmelbourne/Arduino_STM32 ;
http://docs.leaflabs.com/docs.leaflabs.com/index.html : fue este proyecto el que Roger tomó como base, por lo que hay muchas cosas útiles, aunque en inglés;
Arduino IDE versión 1.6.5-r5 se puede descargar aquí ;
Mi artículo, hasta cierto punto, se cruza con el amigo " STM32 vs Arduino " @RaJa ;
Hoja de datos sobre STM32F103C8T6 ;
Todas mis publicaciones en geektimes .

UPD 15/07/2016
El kernel se probó para funcionar en Arduino IDE versión 1.6.9:
geektimes.ru/post/277928/#comment_9532576

PS
¿Qué más olvidé?
:

image

, .

, microUSB :

image

, , .

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


All Articles