Table of Contents
Elaborado por: Luis Diego Villalobos Ulloa A96804
Parte 1
Objetivo General
Estudiar la funcionabilidad del microcontrolador STM32F429, al estudiar las aplicaciones y programarlo para dejarlo preparado para su uso básico.
Objetivos Específicos
• Estudiar el funcionamiento básico del microcontrolador STM32F429.
• Estudiar y explicar los puertos de comunicación de los periféricos de display y puntero. (Explicar los periféricos (hojas de fabricante de esos chips, una explicación de esos puertos y explicar los protocolos de los periféricos)
• Poner en funcionamiento un miniblink en el STM32F429 y asegurarse de realizar las configuraciones básicas correctas del microcontrolador (velocidad de procesador al máximo)
Justificación
El mundo está lleno de herramientas tecnológicas. Muchas de estas son muy avanzadas y tienen utilidades muy complejas. El único inconveniente es que entre más compleja es la tarea que hay que cumplir, más complejo será esta herramienta. Es ahí donde los microcontroladores hacen su trabajo. Estos son circuitos integrados que tienen la capacidad de ejecutar programas (u órdenes) grabados en su memoria interna. Este proyecto está orientado en el microcontrolador STM32F429, y aprender a explotar las capacidades de este (incluida la pantalla táctil), para utilizarlo como una de estas herramientas y facilitar alguna tarea en el futuro.
Metodología
El proyecto se divide en dos partes. La primera parte se enfocará en el funcionamiento básico del STM32. Para esto se pondrá en funcionamiento el programa de miniblink, para entender mejor el mismo. Además se estudiarán y se explicarán las especificaciones del microcontrolador, así como los componentes periféricos.
Desarrollo
El microcontrolador STM32 es un microcontrolador fabricado por la compañía ST. Este microcontrolador es caracterizado por tener un procesador ARM Cortex – M. Este procesador es el responsable del funcionamiento óptimo del microprocesador.
El STM32 tiene una familia bastante amplia. Esta se subdivide en las series F0, F1, F2, F3 y F4 entre otras. El microprocesador en el que se enfoca este trabajo es en el STM32F429. La serie F4 es caracterizada principalmente por tener una memoria flash de 2Mb, pero su componente principal y más llamativo es la pantalla táctil de LCD controlada por el ARM Cortex-M.
Periféricos e Interfaces
El STM32F429 tiene un número elevado de periféricos e interfaces, que utiliza para su óptimo funcionamiento. Algunos de estos periféricos e interfaces importantes son:
• I2C (Inter-Integrated Circuit): Esta es una interfaz gráfica que puede controlar el bus serial del microcontrolador. Además es el encargado de los temporizadores (o timers) y protocolos de secuencia.
• SPI (Serial Peripherial Interface): Esta interfaz tiene dos funciones principales. La primera es el de establecer comunicaciones half-duplex (una dirección a la vez) o full-duplex (ambas direcciones a la vez) con la conexión serial. En esta configuración el microcontrolador es el Maestro y controla otro dispositivo (el esclavo). La segunda configuración es cuando el SPI es esclavo del I2C. En esta configuración es el I2C el que establece las comunicaciones a través del SPI.
• USART (Universal synchronous asynchronous reciever transmitter): Este periférico es el responsable de la comunicación con los dispositivos externos utilizando un medio de comunicación serial y asíncrono. Al ser el encargado de la comunicación, es también el que se asegura de transmitir y recibir las señales con la información para trabajar correctamente.
• DMA (Direct memory access): Es el periférico encargado de la comunicación interna entre los periféricos y la memoria. La información es trasladada de un lugar a otro sin la necesidad de ser enviado al procesador. Esto causa que el procesador no sea saturado con tareas excesivas y pueda dedicarse a solamente procesar la información principal. El STM32F429 tiene dos controladores DMA con 8 canales cada uno.
• DAC (Digital to analog converter): Un convertidor de señales digitales a señales analógicas. Este periférico depende directamente del DMA.
• ADC (Analog to digital converter): Un convertidor de señales analógicas a señales digitales. Estas conversiones son muy importantes ya que de estas dependen muchas interpretaciones de información ya sea para transmitir o recibir.
• LCD-TFT controller: Este es el periférico más evidente en todo el microcontrolador. Este es la pantalla táctil de LCD.
Procedimiento
Ahora después de estudiar los periféricos se pondrá en funcionamiento el miniblink. Para esto primeramente se tuvo que buscar un tutorial. Se escogió el que fue publicado por el arcoslab. Asi que este fue el procedimiento que se siguió:
Instalar el ARM Toolchain.
Para este proceso primero se recomendaba instalar las librerías libftdi1, openocd y libusb-1.0-0-dev. Pero después de un poco de investigación se descubrió que estas librerías ya vienen como parte de la instalación de Debian, por lo que se pudo obviar este paso.
Ahora se necesitaba que Debian funcione con librerías de 32 bits y 64 bits. Para solucionar este problema se modifico la arquitectura del kernel y se le añadió la arquitectura i836. Asi que se bajo la arquitectura con el comando:
dpkg –add-architecture i386
Y se agregaron las dependencias en el archivo de Sources de la siguiente manera:
deb [arch=amd64,i386] http://mirrors.ucr.ac.cr/debian/ stable main non-free contrib deb [arch=amd64,i386] http://mirrors.ucr.ac.cr/debian/ testing main non-free contrib deb [arch=amd64,i386] http://mirrors.ucr.ac.cr/debian/ unstable main non-free contrib deb [arch=amd64,i386] http://mirrors.ucr.ac.cr/debian/ experimental main non-free contrib
Se agregó a cada una lo que está marcado con negrita en el archivo sources.list ubicado en /etc/apt/sources.list . Al finalizar este paso es preferible hacerle una actualizaciòn al sistema para que se actualicen las nuevas arquitecturas.
Sudo apt-get update
Después se instala una librería llamada libncurses5:i386 con todas las dependencias de la nueva arquitectura. A lo que le sigue bajar el GNU tools para el ARM.
cd ~/local/src wget https://launchpad.net/gcc-arm-embedded/4.9/4.9-2014-q4-major/+download/gcc-arm-none-eabi-4_9-2014q4-20141203-linux.tar.bz2 tar -xjf gcc-arm-none-eabi-4_9-2014q4-20141203-linux.tar.bz2
Instalación del Stlink
git clone https://github.com/texane/stlink
además se configura la instalación
./autogen.sh ./configure –prefix=/home/usuario/local/DIR/stlink
Se aplica xstow, porque es una instalación local, y se ponen las siguientes reglas en el directorio src/stlink
sudo cp 49-stlinkv1.rules /etc/udev/rules.d/ sudo cp 49-stlinkv2.rules /etc/udev/rules.d/ sudo /etc/init.d/udev restart
Librería Libopencm3
Por último se descarga la librería libopencm3 que es la librería con la que se programará el microcontrolador. Libopencm3 es una librería que utiliza software libre para crear firmware para los procesadores ARM (que está incluido en el STM32).
Así que para adquirir Libopencm3, construye la librería con los siguientes comandos:
cd ~/local/src/ git clone https://github.com/libopencm3/libopencm3-examples cd libopencm3-examples git submodule init git submodule update cd libopencm3 make
Y así ya el sistema está listo para instalar nuevos programas (o ejemplos) en el STM32F429.
Implementar Ejemplos
Los ejemplos que trae la librería son útiles para entender el lenguaje que se utiliza. Es por esto que además de implementarle el miniblink, he ido un poco más alla y combinado varios ejemplos para llegar a un código más complejo al que he llamado Double_blink. Double_blink es un programa que primero muestra dos LED parpadeando al mismo tiempo. Al apretar el botón de Usuario, este patrón cambia a parpadear uno despues del otro con la misma frecuencia. Apretar el botón de nuevo vuelve a sincronizar los LED. Ahora para poder cargar el programa en la memoria del STM32F429, dentro del directorio del ejemplo se introducen los siguientes comandos Make Make flash
Código Double_blink
A continuación está el código con algunos comentarios:
#include <libopencm3/stm32/rcc.h> #include <libopencm3/stm32/gpio.h>
uint16_t exti_line_state;
/* Set STM32 to 168 MHz. */ static void clock_setup(void) {
rcc_clock_setup_hse_3v3(&hse_8mhz_3v3[CLOCK_3V3_168MHZ]);
}
static void gpio_setup(void) {
/* Enable GPIOG clock. */
rcc_periph_clock_enable(RCC_GPIOG);
/* Set GPIO13 (in GPIO port G) to 'output push-pull'. */ gpio_mode_setup(GPIOG, GPIO_MODE_OUTPUT,GPIO_PUPD_NONE, GPIO13 | GPIO14);
}
static void wigwag(void) { /* Set GPIO13-14 (in GPIO port G) to 'output push-pull'. */
gpio_mode_setup(GPIOG, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO13 | GPIO14);
}
static void button_setup(void) { /* Enable GPIOA clock. */
rcc_periph_clock_enable(RCC_GPIOA);
/* Set GPIO0 (in GPIO port A) to 'input open-drain'. */
gpio_mode_setup(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO0);
}
int main(void) { int i; clock_setup(); button_setup(); gpio_setup(); wigwag();
/* Blink the LED (PD13) on the board. */
while (1) {
gpio_toggle(GPIOG, GPIO13); gpio_toggle(GPIOG, GPIO14);
/* Upon button press, blinks in different pattern. */
exti_line_state = GPIOA_IDR; if ((exti_line_state & (1 << 0)) != 0) { gpio_set(GPIOG, GPIO13);
/* Toggle LEDs. */
gpio_toggle(GPIOG, GPIO13 | GPIO14); for (i = 0; i < 900000; i++) { /* Wait a bit. */ __asm__("nop"); } } for (i = 0; i < 3000000; i++) { /* Wait a bit. */ __asm__("nop"); } }
return 0; }
Conclusión
Para trabajar con el microcontrolador STM32F429, se necesita conocer el funcionamiento básico del mismo. Es por esto que se estudiaron las especificaciones básicas del mismo. El aprender a utilizar el microcontrolador puede ser muy tedioso ya que tiene muchos otros periféricos que no hemos mencionado, al igual que interfaces. Es por esto que antes de comprar un microprocesador se necesita saber bien cuales van a ser sus tareas y escoger el que mejor se acerque a lo que se le vaya a pedir.
Las librerías de software libre son muy importantes a la hora de utilizar los microcontroladores. La razón principal es que no se necesita permiso del dueño de las patentes para poder hacer cambios que ayuden a las aplicaciones a completar sus tareas de una manera más optima, o en otro caso, que cumpla con los objetivos que el cliente necesita.
No hay que tener miedo a la hora de encarar un microprocesador. Es cierto que sus especificaciones, sus data sheets
, y sus manuales pueden ser intimidantes. Pero con este tutorial se espera introducir al principiante y guiarlo en lo básico del STM32F429.
Presentación microcontrolador_stm32f429_parte_1.pptx
Parte 2
Objetivos Específicos
• Elaborar un diagrama de bloques que ilustre la comunicación básica de los periféricos.
• Elaborar un diagrama de flujo de como se elabora dicha comunicación.
• Programar los bloques y elaborar un programa de prueba.
Desarrollo
Para la segunda parte del proyecto primero se desarrollaron los siguientes diagramas de bloques y de flujo. Primeramente se expone el siguiente diagrama.
En este diagrama se ilustra la comunicación que existe entre el STM32F4 con el touchscreen del mismo. Lo primero que hay que notar en este diagrama es que se utiliza el chip STMPE811. Este es un microcontrolador dedicado a la pantalla táctil. Primeramente es importante aclarar que la pantalla tactil es parte de la pantalla LCD. El objetivo de esta aclaración es que aunque los dos trabajan juntos, son periféricos diferentes.
Ahora para explicar la comunicación de estos primeramente se debe establecer la misma. El STM32F4 establece una comunicación con el controlador de la pantalla. Para esta comunicación utiliza el protocolo de I2C. El STMPE811 establece su comunicación de vuelta por medio de la interfaz USART. Para esta segunda comunicación se ha tenido que utilizar un módulo extra. Este módulo es el UMFT234XF.
Para poder habilitar este módulo primero se buscó en el Data Sheet del mismo los pines de TX y RX para poder conectarlos a los correspondientes en el microcontrolador. Se encontró con los pines P9 y P7, y estos van conectados a la unidad de USART1 (que es la que se ha dedicado para este protocolo) PA9 y PA10. Además para la seguridad de ambos dispositivos se conecta el tierra de ambos.
Por último el UMFT234XF se comunica con la computadora por medio del programa minicom. El programa minicom es parte del repositorio de Debian, por lo que con el siguiente comando es suficiente para instalarlo.
sudo apt-get install minicom
Ahora se configura el minicom de manera que se pueda recibir las señales del microcontrolador. Para esto se tiene que elegir una velocidad que concuerde con la velocidad de clock que utilice el programa del microcontrolador.
Ahora se muestra el diagrama de flujo para configurar el STMPE811.
Este diagrama ilustra el flujo de información que el microcontrolador utiliza para configurar el STMPE811. Primeramente se tiene que establecer la comunicación con el mismo. Esto se logra con el procedimiento que se explico en el diagrama 1. Cuando esta se crea, lo primero que va a hacer el STMPE811 es esperar por la información.
En el momento en el que se reciba información el chip debe identificar si la solicitud es de WRITE (escribir) o READ (leer). Si la solicitud es de WRITE, el microcontrolador enviará las configuraciones que el usuario ha establecido. Y estas quedaran escritas dentro del chip.
Si la información es de otro tipo, será utilizada para las funciones que se necesiten. Una función importante es la de READ, que lo que hace es solicitar información del Touch screen para ser procesada por el STM32F4.
Ahora el siguiente paso es el programa. Para esto se buscó en los ejemplos de libopencm3 alguno que utilizara el protocolo de I2C. Primero se encontró el ejemplo del STM32F3. Se obtó por estudiar los pines que utilizaran el I2C correspondientes. Se encontró que los pines PA8 y PC9, utilizando una alternate function 7, en el puerto I2C3, eran las configuraciones para establecer la comunicación del touch-panel con el microcontrolador.
Después se evaluaron los pines del USART. Para esto se siguió el mismo procedimiento para poder encontrar los pines del STM32F4 que se pudieran utilizar para conectarse con el UMFT234XF. Se encontraron los pines PA9 y PA10. Para poder hacer esta conexión se tiene que identificar cual es el RX y cual es el TX. Cuando se encontraron (PA9 RX y PA10 TX), se deben conectar al módulo de USART. Para esto se soldaron contactos en los pines de RX (PA7) y TX (PA10) para poder conectarse con los pines del STM32. Además se soldó un contacto para la tierra (GND) y se conectaron todos en un protoboard.
Después de analizar el ejemplo del F3 con las correciones establecidas para que la comunicación se diera, el programa empezó a caerse. El programa no se pudo compilar, por lo que se indagó más en el problema para resolverlo. Pero despúes de revisar la librería de libopencm3, se llegó a la conclusión de que el F3 y el F429 son tan diferentes, que no se puede utilizar este ejemplo.
Despúes de diferentes pruebas con el UMFT234XF, no se podía establecer la comunicacion. Es por eso que se hicieron algunas pruebas físicas con el osciloscopio. Se descubrió un desperfecto en el mismo que no permitía su buen funcionamiento. Esto se arregló soldando el jumper 5 de el chip.
Al arreglar el problema que se tenía con el puerto serial. Se obtó por hacer pruebas básicas para verificar que este pudiera comunicarse bien con la computadora.
El programa que se desarrollo en su mayoría fue inspirado en los ejemplos del F3. Por las razones anteriores, este no se pudo implementar en el microcontrolador F429. Aunque no se haya logrado utilizar el programa, durante la elaboración del proyecto se lograron alcanzar la mayoría de objetivos. Se ha programado un poco y también se ha aprendido acerca de los protocolos de comunicación. En su mayoría despues de implementar la mayoría de los ejemplos e investigar los pines que cada uno de estos utiliza, podemos llegar a la conclusión que se maneja un conocimiento básico sobre el uso de este microcontrolador. El proyecto continuará de modo que se le pueda dar soporte básico a la pantalla tactil (Touch-screen). Se recomienda que se tome en cuenta el protocolo SPI además del I2C. La razón principal de esta recomendación es que existen dos ejemplos que utilizan SPI como protocolo de comunicación.
Programa touch.txt
Presentación microcontrolador_stm32f429_parte_b_.pdf