======Introducción al microcontrolador STM32F429====== ===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 #include 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.