24 de junio de 2015

STM32F4 Discovery

Hace ya varios años que tengo una placa programable de STMicroelectronics que conseguí gratis gracias a un amigo, la STM32 Value Line Discovery,



la cual ofrecían para participar en un concurso. Por entonces no tenía ni idea de como se usaba, así que tras adquirir experiencia durante la carrera, comencé a programar sobre esta, hasta que de ultimo decidí pasarme, a la que he denominado la hermana mayor, la STM32F4 Discovery, y dado que es una placa con mucho que contar, me he propuesto realizar algunos ejemplos de uso de esta.

En esta ocasión me dedicaré simplemente a ver los detalles mas importantes de esta placa, y algunos de los programas que usaré para interactuar con dicho dispositivo (STM32F4 Discovery MB997C).



Las características principales de esta placa son (sacadas del manual de usuario):
  • Microcontrolador STM32F407VGT6.
  • Programador/depurador ST-LINK V2 (conector USB mini A) y conector SWD.
  • Acelerómetro LIS3DSH de tres ejes.
  • Micrófono digital omnidireccional MP45DT02.
  • Decodificador de audio (DAC) de 24 bits CS43L22.
  • Cuatro leds y un botón de usuario.
  • USB OTG (conector USB micro AB).
  • Extensión de entradas y salidas para conexión rápida.
Las características principales del microcontrolador STM32F407VGT6 son (observar imagen, aquí se nombran las que se usarán principalmente):


  • Núcleo ARM Cortex M4 de 32 bits a 168 MHz (210 DMIPS) con 1 MB Flash y 192 KB RAM.
  • USB OTG FS.
  • Entradas/salidas: 8 puertos de 16 bits + 1 puerto de 12 bits con función alternativa.
  • 14 timers, 6 USART, 3 SPI, 3 I2C, 3 ADC, 2 DAC, 2 CAN ...
Para el desarrollo del código usé Atollic True Studio (lo tuve que dejar debido a la limitación de los 32 KB de programa) y Eclipse (las librerías por defecto eran las HAL y estoy acostumbrado a las Standard, ademas de que es mas engorrosa la generación de nuevos proyectos), pero finalmente me decanté por una opción completamente libre y que permite escoger que librerías quieres, se trata del IDE SW4STM32. Para conseguirlo simplemente hay que registrarse en el enlace anterior.

También he recurrido en ocasiones al software STM32CubeMX, para obtener unas configuraciones rápidas de los periféricos, pero dado que también hace uso de las librerías HAL, no me centrare apenas en este.

Finalmente, y dado que es un aspecto muy interesante, también hago amplio uso del software LabView para el desarrollo de aplicaciones que permitan monitorizar y controlar en tiempo real los periféricos programados en la placa. En ocasiones se usara también un monitor de interfaz serie para estos aspectos.

La instalación de estos programas es muy sencilla, por lo que simplemente expondré unas capturas de la creación de proyectos y algunos aspectos relevantes de estos.

SW4STM32

File -> New -> C Project.


Damos nombre al proyecto y seleccionamos "Ac6 STM32 MCU Project".


Click en Next.


Seleccionamos la placa dentro de la serie SM32F4 (deseleccionar las mismas opciones para búsqueda mas rápida) y hacemos click en Next.


Seleccionamos "Standard Peripheral Library (StdPeriph)" y "As sources" (si no generará un segundo proyecto donde estarán dichas librerías) y en caso de que haga falta se añadirán también de "Additional drivers" o "Additional utilities and third-party utilities" y hacemos click en Finish.


El contenido final del proyecto se encuentra distribuido de la siguiente forma:


Así pues, tenemos la librería "StdPeriph_Driver" con los drivers de los periféricos; la carpeta "Utilities" para el manejo rápido de funciones del DAC de audio, el acelerómetro y el botón y leds de usuario; la carpeta "inc" para incluir nuestros propios header files; la carpeta "src" para nuestros source files; la carpeta "startup" que contiene la rutina de inicio de la placa (no os asoméis a ella, esta en ensamblador ... ;-)) y la carpeta "CMSIS" con las funciones propias del nucleo de nuestro microcontrolador.
Una vez escrito y compilado (icono del martillo) el código, nos vamos a la venta de depuración (icono de la cucaracha), momento en el que posiblemente aparezca esta ventana, donde seleccionaremos la primera opción.


Tras esto se nos presentará la siguiente ventana, y con ayuda de los botones play, pause y stop, ademas del uso de breakpoints, realizaremos la depuración del código.


Si en vez de realizar la depuración queremos directamente cargar el código en la placa, usamos el icono del play justo al lado de la cucaracha.

STM32CubeMX

New Project.


En la ventana que se nos abre seleccionamos nuestra placa y hacemos click en OK.


A continuación configuramos los periféricos que vayamos a necesitar (el stick en verde significa que esta programado, el warning significa que solo parte se puede programar debido a que otro periférico este usando alguna de las entradas/salidas del microcontrolador y la cruz en rojo significa que no se podrá usar a menos que se desconfigure el periférico que este usando la función alternativa que capa a este último).


Una vez realizada la configuración hacemos click en Project -> Generate Code, damos nombre al proyecto, seleccionamos el IDE, en mi caso "SW4STM32" y finalmente hacemos click en Ok.


LabView

Create Project.


Seleccionamos "Blank VI" y click en Finish.


Cuando generamos el proyecto nos aparecen dos ventanas, la de la izquierda, "Front Panel" será la interfaz de usuario final y la de la derecha, "Block Diagram" relaciona "eléctricamente" los elementos que aparecen en la primera.


Terminal v1.93b

Por último, muestro una captura del programa para monitorizar el puerto serial (para realizar una comprobación rápida de los datos que circulan por dicha interfaz), que sera la forma de comunicar la placa con el PC.


En unos días comenzaré a publicar algunos ejemplos de uso de los periféricos mas interesantes mientras disponga de herramientas o dispositivos para comprobar el correcto funcionamiento.

6 comentarios:

  1. Saludos, Por favor podrías subir algunas capturas de como cargar el programa a la memoria flash, pues cuando pongo me pongo en el icono "play" junto al icono de la cucaracha me sale una ventana con dos opciones escogí y me dió error y no puedo cargar el programa a la STM, o talvez hay que configurar algo previamente muchas gracias por tu ayuda.

    ResponderEliminar
    Respuestas
    1. Hola, te voy a adjuntar un pdf en el que te intento mostrar los pasos a seguir para evitar posibles fallos. Espero que te ayude: https://www.dropbox.com/s/qubrxhh4diqpipi/Cargar%20en%20flash.pdf?dl=0
      Saludos.

      Eliminar
  2. Respuestas
    1. Hola, perdona, lo tuve que borrar de la ubicación donde lo cargue. Te adjunto de nuevo el link que si será fijo.
      https://www.dropbox.com/s/dve1fq4r4vcjacu/Cargar%20en%20flash.pdf?dl=0
      Saludos y gracias por avisarlo.

      Eliminar
  3. Buenas, no me reconoce la interfaz el firmware, doy click en download que pasos puedo seguir para obtener el firmware, sin este no puedo seleccionar la opción "as source" agradezco su respuesta

    ResponderEliminar
    Respuestas
    1. Hola Felipe, gracias por tu comentario.

      Por desgracia, actualmente me encuentro estudiando y no dispongo de tiempo para tratar con la placa. En cualquier caso, no estoy seguro del todo a que te refieres, si cuando conectas la placa al ordenador o cuando estas en el programa.

      Saludos y perdón por no serte de mucha ayuda ahora mismo

      Eliminar