STM32F4: Primeros pasos con el entorno de desarrollo

En el tutorial que vamos a llevar a cabo hoy veremos como instalar todas las herramientas de desarrollo para poner en marcha la placa de desarrollo 32F411-DISCOVERY. Una vez tengamos todas las herramientas instaladas procederemos a compilar y ejecutar un programa que haga parpadear un led.

Unos de los entornos de desarrollo integrado (IDE) que nosotros usamos en el B105 es eclipse. Para trabajar y poder compilar de forma cruzada para los STM32 existe una versión de eclipse que contiene todos los plugins y librerias necesarias para trabajar con dispositivos de STM llamada System Workbench for STM32 (SW4STM32). Es una herramienta gratuita que debéis descargar e instalar en vuestro ordenador. Para poder descargarla tendréis que registraros en la web. Es posible, que si no lo tenéis instalado todavía, tengáis que instalar Java en vuestro ordenador.

eclpse

 

Ahora procedemos a descargar e instalar el software STM32CubeMX que no es más que un generador de código de inicialización para los microcontroladores y plataformas de desarrollo de ST. Con este software podremos crear el código inicial con las capas de abstracción hardware con las que queremos inicializar nuestra plataforma.

cubmxAl instalar SW4STM32 y CubeMX se nos deberían instalar los drivers correspondientes para poder usar el programador integrado en la placa Discovery para el STM-Link v2 o v2.1.

Proyecto Toggle Led

Abrimos CubeMX y creamos un nuevo proyecto. En la pestaña Board Selector elegimos nuestra placa STM32F411E-DISCO.

cubemx1

 

A través de este software se pueden activar y desactivar los periféricos y los middlewares disponibles en el microcontrolador STM32F411. Además se pueden asociar los periféricos y funciones a los pines, o asignar funciones alternativas a un pin tales como: GPIO de salida, entrada, de interrupción, analógico, de PWM, etc.

Antes de configurar nada del microcontrolador vamos a configurar el programa para que nos genere el código con la estructura correcta. Para ellos entraremos en Project Settings, pondremos un nombre a nuestro proyecto en Project Name, por ejemplo Toggle Led. En Toolchain/IDE seleccionaremos SW4STM32 y desactivamos el Generate Under Root.

Bajo la pestaña Code Generator seleccionamos Copy only the necessary library files, Generate peripheral initialization as a pair of ‘.c/.h’, Keep user code when re-generating y Delete previously generated files when not re-generated. Aceptamos la configuración.

Ahora nos fijaremos en el pin PD12, que está asociado al led verde. Comprobamos que está en modo GPIO_Output. Y ahora simplemente confiamos que el resto de configuraciones por defecto son correctas.

Generamos el código pulsando sobre Project -> Generate Code. El programa comenzará a generar todo el código y al finalizar, en el cuadro emergente pulsaremos sobre abrir proyecto. Esto nos debe abrir e incluir el proyecto en SW4STM32 (Eclipse).

Podemos ver como tenemos una estructura de directorios y ficheros que nos ha generado CubeMX con todos los drivers y librerias necesarias para nuestro sencillo proyecto. Si abrimos el main.c podemos ver que hay muchas líneas que dicen USER CODE BEGIN/END.

eclipse2

 

Es muy importante que todo el código que escribamos lo hagamos dentro del bloque BEGIN/END. De lo contrario, cuando volvamos a generar código CubeMX lo sobreescribirá y no lo conservará.

En la inicialización vemos que se hace la llamada a MX_GPIO_Init(), con eclipse si mantenemos pulsado la tecla Ctrl mientras hacemos click sobre las función, nos abrirá su definición. Si la leemos un poco podemos ver una sección donde se define la funcionalidad del LD4_Pin asociado al puerto GPIOD y pin GPIO_PIN_12 que en nuestro caso es el GPIO asociado al Led Verde.

Si ahora accedemos a la definición de HAL_GPIO_Init() nos abrirá el fichero stm32f4xx_hal_gpio.c donde podemos ver todas las funciones de la HAL que nos ha generado CubeMX, entre ellas las de Read, Write y Toggle de un GPIO.

En nuestro caso, dentro del while(1) del main() haremos uso de HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12) para hacer parpadear el led. Para que podamos visualizarlo tendremos que poner un HAL_Delay(500).

Solo nos falta compilar, y debuguear en Ac6 STM32 C/C++ Application. Si dado el caso os preguntan que interfaz deseas utilizar (JTAG o SWD), debéis seleccionar SWD para la correcta comunicación con la placa de desarrollo. Y con eso podremos ver parpadear nuestro led verde cada 0.5 segundos en nuestra plataforma de desarrollo.

The Twelve of B105: B105 Radar

Termina febrero y eso significa una nueva entrega de…

theTwelveOfB105

Esta vez nos hemos centrado en la tecnología radar, con la que llevamos ya varios años trabajando. En la actualidad, dentro del proyecto All-in-One, hemos desarrollado varios prototipos de sensores de bajo coste basados en radar.

Nuestro primer prototipo fue la placa RALPH, que nos permitió validar el diseño y desarrollar el grueso del software de procesado para la detección de la velocidad de los vehículos y su conteo. Incluso tuvimos estudiantes que se atrevieron a meterle mano a esta plataforma y mejorar algunos aspectos de la misma.

En una segunda aproximación, se llevó a cabo un esfuerzo importante para optimizar RALPH al máximo en tamaño, coste y utilización de recursos. Así fue como vio la luz ISHTAR, nuestro nodo sensor radar que, por cierto, utiliza YetiOS como soporte para todo el software. Esta plataforma ha sido probada y validada múltiples veces en entornos reales.

YetiRadar

 

 

Nuevamente nos despedimos con la esperanza de que nuestros twelve os entusiasmen tanto como a nosotros, y que os permitan conocer mejor todo lo que hacemos por si os interesa uniros y participar de ello. Pincha aquí si quieres ver otros meses.

Si encuentras interesante toda esta información, no dudes en seguirnos en las redes sociales para mantenerte informado.

¡Hasta el mes que viene!

Concedidos todos los Trabajos Fin de Titulación

Como siempre en el B105 apostamos fuerte por la docencia de calidad. Este año, una vez más, habéis confiado en nosotros y hemos cubierto TODAS las plazas de Trabajo Fin de Titulación ofertadas. Esperamos que cumpláis vuestras expectativas y recordad “Research to learn, learn to teach, teach to push society forward”.

Este curso somos:

Alumno – Tutor

Victor Garvin – Franscisco Tirado
Rosa Pita – Roberto Rodríguez
Óscar Iglesias – Ramiro Utrilla
Jaime Soler – José Martín
Javier Pomeda – Roberto Rodríguez
Javier González – Guillermo Jara
Iván Duque – Alvaro Araujo
Hector Carretero – Francisco Tirado
Carlos del Valle – Guillermo Jara
Ainhoa Seisdedos – Francisco Tirado
Agustín Riscos – Alba Rozas
Adrián Sánchez – Roberto Rodríguez
Ildefonso Áspera – Francisco Tirado/Roberto Rodríguez
David Gil – Alba Rozas
Raquel García – Guillermo Jara
Sezgin Ibramov – José Martín
Denica Dimitrova – Guillermo Jara
Yanqing Wang – Ramiro Utrilla

Alda Martín (Cátedra BQ) – Alvaro Araujo/Ramiro Utrilla
Guillermo Ojeda – Alvaro Araujo
Fernando Martínez – Alvaro Araujo
Jose Antonio Moral – Alvaro Araujo
Agoney Moreno (Cátedra Kairos) – Octavio Nieto-Taladriz

Gracias a todos por vuestro esfuerzo!

 

 

 

B105 Radar Sensor Developments: Software

 

The radar platform developed in B105 Electronic Systems Lab contains a microcontroller which process the I and Q signals adapted from the radar transceiver in order to obtain targets information -speed and distance-. The microcontroller used is a low-power STM32L496 that has a DSP module and enough RAM to perform processing tasks. It runs at 48 MHz and has low-power mode, which allows using our platform in battery-powered Wireless Sensor Networks applications.

The software developed in the microcontroller uses the YetiOS operating system which has also been developed in B105 Electronic Systems Lab and is based on well-known FreeRTOS. The architecture of the radar processing module is composed by two tasks:

  • Acquisition and Generation Task. This task is responsible of taking samples from the ADC and generating signals using the DAC synchronously. Both acquisition and generation is done using DMA, so other tasks -such as processing one- could run while taking samples.
  • Processing Task. This task provides the processed information -speed and distance of targets- to the final user. The acquired signal is filtered so the information in undesired frequency bands is eliminated. Besides, a Fast Fourier Transform (FFT) is performed in order to obtain the signals in the frequency domain. Then an OS-CFAR algorithm is applied to select the frequency peaks corresponding to targets, and the targets are selected based on signal levels and SNR ratio.

We have tested the complete radar system in real scenarios and we can process each 128 samples signal in 15 ms. That means that our radar sensor provides distance and speed information with a rate higher to 60 samples per second.

Finally, we have developed an user interface which allows us testing different configuration and the behaviour of the radar sensor on different scenarios.

 

Radar SW

B105 Radar Sensor Developments: Hardware

 

Low-cost radar transceivers such as RFbeam ones allows using radar sensors in several applications where cost is an important constraint. However they need a hardware platform to work properly. Therefore, in B105 Electronic Systems Lab we have designed and implemented a hardware platform that allows obtaining using radar sensors in Doppler operating mode and FMCW operating mode.

The platform developed is low-sized and resource-constraint which allows using it in Wireless Sensor Networks applications in battery powered nodes. The hardware modules of the designed system are described below:

  • Power Source. Probably one of the most importan parts of the system as it must provide power to the radar transceiver and to the analog adaptation modules. The power source must provide 12 V, 5 V and 3.3 V for proper radar operation, and these sources must be highly noiseless to enchance radar performance.
  • Radar Transceiver. The main component of the radar sensor is the transceiver which sends and receive radar signals. K-LC5 and K-LC6 radar transceivers from RFbeam may be used, providing I and Q IF signals, and a VCO pin for FMCW operation.
  • Signal Adaptation Module. Signal adaptation is necessary to process radar I and Q signals and obtain information from them. An amplification stage, a low-pass filter and a high-pass filter are used in this module. Besides, a single-ended to differential stage is also used to improve signal acquisition.
  • Signal Acquisition. An ADC is used to digitalize the analog signals so they can be processed. The ADC used can be sigma-delta or SAR, with the higher resolution possible (12 to 16 bits), and with speeds from 10 KHz to 1 MHz. In our platform, the acquisition is done by the main microcontroller.
  • Signal Generation.  A DAC is used to generate the signals to modulate the radar transceiver through its VCO pin. Besides, an adaptation stage is implemented to provide adequated modulation signals to the radar transceivers. The DAC used in our platform is integrated in the main microcontroller.
  • Processing Unit. A microcontroller is needed to process the acquired signals and obtain information from them. In our design a low-power STM32L496 microcontroller is used.

Radar HW