PLACA DE DESARROLLO STM32F103C8T6 He pedido varias placas chinas simil a las coreboard con el microcontrolador de STM32F103C8T6, son bastante bastante baratas y me gustan por que se pueden adapatar a cualquier circuito como si casi fueran un microcontrolador, pero de esta forma ya lleva incorporada la comunicacion serie y el regulador de tension asi como el cristal. El microcontrolador este es bastante potente y su d atasheet lo podemos encontrar en : http://www.st.com/resource/en/datasheet/stm32f103c8.pdf El PCBoard de esta placa con la descripcion de sus patillas seria:
El patillaje del encapsulado del microcontrolador seria:
Partiendo del tutorial en youtube de Santiago Torres me animo a mostrar este tambien tutorial aqui, ya que me parece muy interesante esta placa de desarrollo: Esta placa se puede programar de dos formas: Una mediate el ST-LInk que veremos mas adelante. Y la que vamos a ver que es la programacion serie, que la haremos mediante el FT232 segun se ve en la foto.
Para conexion del FT232 se debe conectar la patitas de la siguiente forma: FT232
STM32
RX —— PA9 TX —— PA10 FT232 en posicion de 3,3 V . En este caso la alimentacion de la placa se ha echo con la alimentacion que recibe del puerto mini-usb, pero se podria prescindir de ella y alimentarlo tambien con el FT232 de la siguiente forma. FT232 — STM232 VCC — 3,3 PIN
— cable rojo
GND — G PIN que es el GND. — cable negro No olvidarse nunca de poner el jumper del FT232 en posicion de 3,3 voltios. Bueno ahora de este forma ya esta preparado para ser programado, pero antes tenemos que configurar Arduino para pod er programar este tipo de placas, pero lo veremos en el siguiente post: https://misterelectronico.wordpress.com/2016/11/12/programacion-stm32 bajo-entorno-arduino/ El tutorial de Santiago Torres
PROGRAMACION STM32 BAJO ENTORNO ARDUINO Continuando con la placa mostrada en el post anterior. https://misterelectronico.wordpress.com/2016/11/12/placa-de-desarrollo-stm32f103c8t6/ Lo que vamos hacer es programar el microcontrolador bajo entorno Arduino, y para ello tenemos que hacer los siguientes procesos. 1) Bajarnos el siguiente paquete: Arduino_STM32-master.zip Desde el enlace: https://github.com/rogerclarkmelbourne/Arduino_STM32 Apretando el boton Clone Download. Segun el desarrollador de este paquete dice que la instalacion del mismo se debe hacer bajo Arduino 1.6.9 Yo la instale con esta version que me baje de: https://www.arduino.cc/en/Main/OldSoftwareReleases Pero pienso que a lo mejor funcione tambien con otras versiones. Bueno una vez bajado y instalado el Arduino lo que tenemos es que descomprimir el paquete: Arduino_STM32-master.zip El directorio que se nos crea debemos copiarlo o moverlo a la carpeta de ARduino:
Tal como vemos en la imagen debemos colocarla dentro de la carpeta arduino-1.6.9 y dentro de este directorio dentro de /harware y dentro de copiamos la carpeta Arduino_STM32-master. Una vez echo esto abrimos Arduino y ya podremos ver las placas STM32 . Se nos instalan varias placas pero la que mas nos interesa es la que estamos tratando o la ST32F103C8 y por lo tanto la seleccionamos. Dentro de las variantes de esta placa tenemos dos opciones, el microcontrolador con 20 K de Ram y 64K Flash y el de 20 K de Ram y 128 K Flash como el que yo tengo es el de 64 K de Flash yo elijo ese:
Como lo voy a programar por el puerto serie voy a menu que muestro y elejimos Serial:
Y ahora lo que tenemos que hacer es escoger el puerto serie al que se ha conectado nuestro convertidor USB-RS232, en mi caso es el FT232 y si me voy al directorio /dev de linux veo que se me ha conectado al ttyUSB0 (0 — es el numero cero). Por tanto lo seleccionamos en el menu:
Bueno ya esta echo todo lo necesario para la seleccion de la placa y la forma de programar y el puerto pero ahora si cargaramos un programa y lo compilaramos veriamos que no pasaria nada. Y esto es por que no estaria instalado el compilador gcc apropiado para estas placas.
Para solucionarlo hay que instalar la placa de Arduino Zero y para ello nos vamos al menu herramientas de nuevo a Placa:Generic STM32 > Gestor de tarjetas:
Damos Click al gestor de tarjetas y nos salen v arias opciones de instalacion pero picaremos sobre la que pone arduino zero :
De esta forma ya tenemos preparado el entorno Arduino para poder compilar los STM32. Hasta aqui todo lo que es la configuracion de Arduino para los STM32 el siguiente post sera programar un ejemplo: En el siguiente enlace vemos un primer ejemplo de programar esta placa bajo entorno arduino: https://misterelectronico.wordpress.com/2016/11/22/programacion-de-blink-sobre-placa-stm32/
PROGRAMACION DE BLINK SOBRE PLACA STM32 Antes de ver esta entrada ver las dos entradas anteriores necesarias para la preparacion de d e esta placa. Parte 1 https://misterelectronico.wordpress.com/2016/11/12/placa-de-desarrollo-stm32f103c8t6/ Parte2 https://misterelectronico.wordpress.com/2016/11/12/programacion-stm32-bajo-entorno-arduino/
Bueno continuando ya con la ultima parte de la programacion de la placa de desarrollo con el STM32F103C8T6, vamos a proceder a programar lo que se diria como programa “Hello world” o blink, que se trata de programar la placa para encender y apagar el diodo led de la placa asociado a la patita PC13. Para poder programar esta placa debemos hacer es conectar la alimentacion y la conexion serie como vimos en los post anteriores, pero ademas deberemos poner el primer jumper tal como se ve en la imagen en la posicion 1, y ademas una vez conectada a la alimentacion y encendida la placa deberemos apretar el boton de reset de la placa para que entre en modo boot o modo de programacion tal como vemos en la imagen.
Una vez echo esto podemos ya programarlo tal como hacemos normamente con nuestro programa de Arduino. El programa es muy simple y seria el siguiente: // CONFIGURACION PARA QUE SE ENCIENDA EL LED DE P LACA ASOCIADO A LA PATITIA PC13.
void setup() { // inicializar el pin PC13 como salida. pinMode(PC13, OUTPUT); } // Hacer un lazo infinito void loop() { digitalWrite(PC13, HIGH); // Encender el led de placa delay(1000); // Haz retardo 1 segundo digitalWrite(PC13, LOW); // Apaga el led de placa. delay(1000); // Haz un retardo de otro segundo. } Lo unico que hacemos es el pin PC13 lo definimos como salida, este led esta asociado al LED qu e esta en la placa, y luego hacemos un lazo infinito en el que pagamos y encendemos el Led dando en cada proceso un retardo de 1 segundo, delay(1000) = a 1000 msg = 1s. El proceso es igual al que hacemos en cualquier programacion de cualquier arduino, primero lo compilamos y luego lo subimos. Si la placa es programada correctamente debera aparecernos unos mensajes parecidos a este en la pantalla de mensajes del programa de arduino. (pantalla en negro abajo). Hacer click sobre imagen para ampliarla.
Si todo sale como se ve en la pantalla, ya veremos inmediatamente parpadear el led en nuestra placa.
Si queremo modificar algo o volver a meter cualquier otro programa lo unico que tenemos que hacer es volver a apretar el boton de reset y la placa entra otra vez en modo de programacion y metemos el programa que deseemos o las modificaciones que queramos. Alguna vez nos da mensaje de error y no sube el programa, se solucina deconectando la clavija de USB y volviendola a conectar de nuevo, y listo. Lo bueno de estas placas que como vemos se pueden programar muy facilmente de esta forma por programacion serie cosa que no se puede hacer en otras muchas placas. En una siguiente entrada veremos como programarla con STLINK que tambien es un programador muy economico. Animo a la gente a utilizar estas placas po lo economicas que son y lo potentes que son estos microcontroladores. En el siguiente enlace veremos como programar con el ST-Link. https://misterelectronico.wordpress.com/2016/11/23/programacion-placa-stm32-con-el-st-link/
PROGRAMACION PLACA STM32 CON EL ST-LINK En los anteriores post hemos visto como se programa la pala ca del microcontrolador stm32f103c8t6 con un simple convertidor usb-ttl a niveles (3,3v) tal como el barato FT232, podemos ver como se hace esto apartir del post: https://misterelectronico.wordpress.com/2016/11/12/placa-de-desarrollo-stm32f103c8t6/ Pero ahora vamos a programarlo con el programador ST-LINK que es una herramienta bastante economica y ademas de para programar nos servira para hacer debugging, la podemos ver en la imagen:
La seligrafia nos marca el conexionado de los pines que estan el conector del lado derecho, de esta forma conectaremos los terminales con la placa del stm32f103c8t6 de la siguiente forma: 3,3V con los 3,3 V GND con el GND SWCLK con el DCLK Y el conexionado quedaria como se muestra en la foto.
SWDIO con DIO
Tal como se ve en la placa los cables van conectados a la parte baja del ST-LINK y el amarillo corresponde al SWDIO que se conectaria con el DIO de la placa, el azul seria GND conectado con el GND de la placa, el verde seria el SWCLK que se conectaria con el DCLK de la placa y por ultimo el Naranja seria VCC a 3,3V que se conectaria con los 3,3V de la placa. Bueno ahora lo unico que tenemos que hacer es abrir el programa de Arduino y confirgurarlo para poderlo programar con el ST-LINK, para ello nos vamos a la barra de herramientas y dentro de upload method > elegimos ST-LINk tal como vemos en la foto:
Luego en esta misma barra de herramientas eligiremos el Puerto, que lo que h aremos es escoger el puerto que arduino nos da por defecto tal como vemos en la foto.
Si se nos presentaran mas puertos eligiriamos uno cualquiera y si no es ese pasariamos al siguiente hasta que consiguieramos programar el microcontrolador. Por supuesto en esta barra de herramientas tambien tenemos seleccionado como hicimos en en los post anteriores para la programacion serial la : Placa: “Generic STM32F103C series” Variant: “STM32F103C8 (20k RAM 64 K Flash)” Bueno y con esto ya tenemos preparado el programa Arduino para programar esta placa. Ahora si nos fijamos en los jumper de la placa del STM32F103, en la programacion serie uno de los jumper se ponia en posicion 1, pero para programarlo con el ST-LINK los dos jumper deben estar en posicion “0” tal como viene en la primera foto de este post. Bueno pues ya esta todo preparado para programar con el programa de Arduino, podemos ver el primer programa de comunicacion serie como el que escribo a continuacion, que podemos copiarlo con un copia y pega. /* ESTE EJERCICIO LO QUE HACE ES LEER UN DATO OR EL PUERTO SERIE Y RENVIARLO. */ int inByte; // Byte read from Serial1 void setup() { // Initialize Serial Serial.begin(9600); // Inicializa el puerto seria a 9600 Serial.begin(9600); } void loop() { // Detecta si el puerto serie recibe un caracter y lo renvia de nuevo por el TX del puerto. if (Serial.available()) {
inByte = Serial.read(); Serial.print(inByte, BYTE); } } Buen el programa es muy sencillo y lo que hace es que cualquier byte que recibe por el puerto serie por RX lo renvia de nuevo por el TX, asi si abrimos un Hiperterminal por Windows, o un minicom por Linux o cualquier otro programa de comunicacion, con el puerto adecuado en Windows un COMx y en Linux se suele abrir por /dev/ttyACM0 Decir que la comunicacion la hace atraves del cable Mini – USB que tenemos conectado a la placa del controlador y no atraves del ST-LINK. En linux a mi se me abre como /dev/ttyACM0 y bueno si abrimos cualquier programa de comunicacion veremos que cualquier caracter que escribamos en el teclado nos es devuelto de nuevo y lo veremos en la pantalla del terminal. Bueno y esto es todo con respecto ala programacion con ST-LINK. Un saludo nos vemos.