Tutorial 10-A. Manejo de la pantalla TFT-ST7735 en Microcontrolador de la serie STM32F4.

El objetivo de este tutorial es mostrar como configurar nuestra tarjeta de desarrollo Ophyra-TFT para hacer uso de su pantalla TFT-ST7735. Para demostrar su funcionamiento realizaremos un ejemplo donde se desplegarán caracteres alfanuméricos y se realizarán efectos de movimiento.

Primeramente deberás descargarte la librería  para controlar la pantalla TFT-ST7735 de Ophyra haciendo clik sobre el siguiente enlace:

DESCARGAR: Libreria TFT_Ophyra_1_0.zip

Configurar Hardware usando STM32CubeMX.

Lo primero a realizar será la correspondiente configuración de los recursos de nuestra tarjeta en STM32CubeMX de la siguiente manera:

Creamos un proyecto nuevo (Imagen 1) y seleccionamos el microcontrolador STN32F407VG, como ya sabemos, que es el correspondiente a nuestra tarjeta Ophyra.

Imagen 1. Nuevo Proyecto en STM32CubeMX.

Imagen 2. Selección del microcontrolador.

El siguiente paso es activar los pines de control de la pantalla TFT. Para ello buscamos en la parte izquierda de la ventana “Pinout” el recurso “SPI1”, damos click sobre este para que se despliegue, y seleccioneamos la opción: “Transmit Only Master”. En la parte derecha de la ventana sobre el diagrama del chip se observarán la activación de los pines PA7 (SPI1_MOSI) y PA5 (SPI1_SCK), estos pines deben ser cambiados por los Pines PB5 y PB3, como se observa en la imagen 3. Posteriormente se deben activar como GPIO_Output los pines PD7, PD6, PA15 y PA7. Estos últimos son pines de control de la pantalla TFT y deben ser renombrados como se muestran en la imagen 3 (es importante recalcar que los nombres deben respetarse tal y como se observa en la imagen, de lo contrario la librería no funcionará correctamente).

En resumen son 6 pines los que controlan la pantalla  TFT de Ophyra:

  • PB5 = SPI1_MOSI (pin de transmisión de datos hacia la pantalla TFT).
  • PB3 = SPI1_SCK   (pin de la señal de reloj para la sincronización de datos).
  • PD7 = TFT_Reset (pin de control de reinicio de la pantalla TFT).
  • PD6 = TFT_RS (pin de control de Lectura/Escritura de la pantalla TFT).
  • PA15 = SPI_CS (pin de control de selección de la pantalla TFT).
  • PA7 = TFT_BckLight (pin de control de iluminación de la pantalla TFT).

Nota: Como observación adicional, el pin que controla la iluminación puede configurarse para que controle la intensidad de iluminación de la pantalla. Para ello debe activarse el timer 1 y ponerlo en modo PWM al igual que el pin PA7 debe ser configurado como  canal 1 del timer 1 (TIM1_CH1).

Imagen 3. Habilitación del puerto SPI1 y de los pines de control de la pantalla TFT.

A continuación damos click sobre la pestaña de “Configuration” y entramos a las ventanas de configuración del recurso activado (ver la imagen 4). En la imagen 5 se observa la ventana de configuración del puerto serial SPI1.
En la pestaña de configuración encontramos en conectividad “Conecctivity” el puerto SPI1. Accionando sobre este botón se muestran algunas configuraciones:

  • Frame Format: Formato o protocolo de transmisión utilizado (Motorola/ TI).
  • Data Size: Cantidad de bits a enviaren una sola transmisión (8/16bits).
  • First Bit: Modo de transmisión del primer bit (MSB Fisrt/LSB First).
  • Baud Rate: Indicador de la velocidad de transmisión configurada actual.
  • Clock Polarity:  Control de polaridad del reloj (Low/High).
  • Clock Phase: Control de captura de datos. 1 Edge significa que durante la primera transición del del reloj, corresponderá al inicio de captura del dato o bit. 2 Edge  significa que durante la segunda transición del del reloj, corresponderá al inicio de captura del dato o bit.
  • CRC Calculation: Habilita la generación del Código de Redundancia Cíclicla.

Nos cercioramos que las configuraciones estén debidamente activadas y damos en el botón de aceptar.

Imagen 4. Botones a seleccionar.

Imagen 5. Parámetros del puerto SPI1.

Ahora podemos proceder a generar el código, haciendo click sobre el icono de “Generate Source Code…“, como se muestra en la imagen 6, ubicado en la parte superior de la ventana principal, donde se desplegará la ventana que se muestra en la imagen 7.

Imagen 6. Generación de código.

Imagen 7. Ventana de Proyect settings.

Una vez en esta ventana procedemos a configurar los siguientes parámetros:

  1. En Project Name , se coloca un nombre para el proyecto, que en nuestro caso será “Tutorial_TFT_A”.

  2. En Project Location, en este campo solo debes asegurarte que se encuentre la dirección donde se ubica tu Workspace para Atollic TrueSTUDIO, en nuestro ejemplo el Wokspace se encuentra en C:\Users\Fernando\Atollic\TrueSTUDIO\ARM_workspace_7.1. Una vez seleccionada la ubicación automáticamente la sección “Toolchain Folder Location” se llenará.

  3. En  Toolchain / IDE  debemos seleccionar nuestro software que utilizaremos para programar, que por ser un Software libre, nosotros usaremos Atollic TrueSTUDIO, por lo tanto seleccionamos TrueSTUDIO.

  4. Seleccionamos la pestaña Code Generator y damos click sobre la opción que se muestra en la imagen.

  5. Al darle click sobre esta opción configuramos el STM32 CubeMX para que nos genere los archivos de configuración separados del archivo “main”. Este paso es opcional y depende de la preferencia del programador.

Finalmente damos clic en “OK”, y a continuación se desplegará la ventana que muestra la generación del proyecto, en la cual vamos a dar clic en“Open Project”.

Agregar la librería TFT_Ophyra en Atollic TrueSTUDIO.

Una vez que STM32CubeMx nos abre TrueStudio, es momento de agregar la librería TFT_Ophyra a nuestro proyecto. Nos dirigimos al explorador de proyectos de Atollic y desplegamos la carpeta de nuestro proyecto, que para nuestro caso se llama Tutorial_TFT_A. 

Ahora en tu computadora ubica el archivo de la librería TFT_Ophyra que descargaste y descomprimela.  Entra a la carpeta SRC, a dentro de esta carpeta, encontrarás dos archivos: TFT_Ophyra.c  y libST7735_Driver.a Copia estos archivo directamente sobre la carpeta Src de tu proyecto, haciendo clic derecho sobre este y seleccionando la opción “Pegar”, como se observa en la figura 9.

Imagen 9. Agregando los archivos de la librería TFT_Ophyra en la carpeta Src.

Ahora entra a la carpeta INC, a dentro de esta carpeta, encontrarás tres archivos: TFT_Ophyra.hST7735_Driver.hInstec_Std_Types.h. Copia los tres archivos directamente sobre la carpeta Inc de tu proyecto, haciendo clic derecho sobre este y seleccionando la opción Pegar, como se observa en la figura 10.

Imagen 10. Agregando los archivos de la librería TFT_Ophyra en la carpeta Inc.

Ahora debemos configurar las propiedades del proyecto para que AtollicTRUEStudio incluya los archivos de la librería y la compilación se realice correctamente. Para ello hacer clic derecho sobre la carpeta principal del proyecto y a continuación hacer clic sobre la opción “Properties”. Inmediatamente se desplegará la ventana de propiedades, en ella debemos llegar a la siguiente ubicación: C/C++Build -> Settings -> (pestaña)Tool Settings -> Libraries -> (ventana) Libraries. En la venta Libraries dar un clic sobre el icono de agregar, esto desplegará una ventana de texto, en la ventana, agregar manualmente lo siguiente: :libST7735_Driver.a  y presionar el botón de OK. Ahora en la ventana Library search path dar un click sobre el icono de agregar y en la ventana que se despliega agregar los siguiente: “${workspace_loc:/${ProjName}/Src} y presionar el botón de OK. Por último dar clic en aceptar, con este procedimiento le hemos dicho a Atollic que cuando compile el programa busque los archivos de la librería y los agregue al proyecto. Este procedimiento se muestra en la imagen siguiente.

Imagen 11. Configuración de Atollic-TRUEStudio para incluir las librerías de la TFT_Ophyra.

Realizar programa en Atollic TrueSTUDIO.

En el directorio “Src” de nuestro proyecto buscamos el archivo “main.c” y le damos doble click para que se despliegue en la ventana de texto. Dentro de la sección de “USER CODE BEGIN Includes” agregamos las siguientes directivas:

#include “Intesc_Stdr_Types.h”
#include “ST7735_Driver.h”
#include “TFT_Ophyra.h”

Nota: Estas líneas y las instrucciones anteriores, también se encuentran repetidas dentro el archivo TFT_Ophyra.h, para que puedas copiar y pegar dentro el archivo “main.c”.

En la imagen 12 se muestra el procedimiento anterior. Cabe señalar que además se ha incluido la libreria “stidio.h” que es una librería estándar de C para la manipulación de caracteres.

Imagen 12. Apertura del archivo “main” y agregar de directivas.

En este punto ya se puede hacer uso de las instrucciones disponibles de la librería para controlar la pantalla.

A continuación, realizaremos un paréntesis en el desarrollo del tutorial, para  presentar una breve descripción de cada sentencia disponible de la librería.

Ahora que hemos visto las funciones disponibles de la librería, continuaremos con el desarrollo del proyecto.

Dentro del archivo “main.c” escribe las siguientes instrucciones que se muestran en la imagen 13, a dentro de la sección que se indica en la imagen.

Imagen 13. Variables y secciones de configuración del sensor.

A continuación describiremos cada una de las secciones resaltadas con flechas y números en color rojo.

La sección marcada con el número 1, define en las variables (de tipo sin signo de 32 bit) los colores de las letras que se imprimirán en la pantalla. Es así que el color definido como ColorLetra = 0xFFFFFF corresponde a un blanco en formato (RGB-8bits). La variable ColorLetra2=0xAAD7EB corresponde a un color azul cielo. Y la variable ColorFondo=0x000000 corresponde a un color negro. Cabe mencionar que dentro de la librería TFT_OPhyra, se define la palabra constante: Transparent = 0x000001 que se utiliza para indicarle a la libreria si las letras se imprimirán con el fondo de color o con el fondo transparente. Por ultimo se define un arreglo (de 30 bytes de tipo char) llamado bufer que servirá como repositorio temporal de caracteres a imprimir en la pantalla.

La sección 2 inicializa la pantalla configurando la posición de esta (0=posición horizontal, 1=posición vertical) mediante la instrucción TFT_Init( ). Para este tutorial la pantalla la hemos inicializado en posición horizontal. La instrucción TFT_BackLight( ) enciende o apaga la pantalla (0= apagada, 1=encendida). La instrucción TFT_ClearDisplay( ) rellena completamente la pantalla al color que se le indique.

La sección 3 escribe la leyenda: INTESC SISTEMA OPHYRA en color azul cielo y el fondo en color negro. Los primeros dos parámetros corresponden a la posición de las letras dentro de la pantalla en unidades de pixeles. Toma en cuenta que la pantalla es de 128×160 pixeles. La disposición de las coordenadas de cada pixel se muestran en la imagen 14.

Imagen 14. Coordenadas de los pixeles en la pantalla según la posición de inicialización.

La sección 4 utiliza la instrucción TFT_PrintLine( ) para formar un rectángulo con las líneas de color blanco (ColorLetra=0xFFFFFF). En nuestro ejemplo este recuadro servirá para remarcar la leyenda que se imprimió anteriormente.

Las sección 5 hace uso de un ciclo finito (for) para realizar la animación de la leyenda “HOLA MUNDO” desplazándola horizontalmente; anima una línea recta que rota sobre su eje; e imprime la progresión del conteo del ciclo for. Esta animación fue agregada al ejemplo, para que el usuario identifique las capacidades de la librería. Es importante notar que cuando se desea imprimir valores numéricos de variables, se debe utilizar la instrucción sprintf  en combinación con la instrucción TFT_PrintStr de la librería de Ophyra. Ya que sprintf convierte las variables numéricas a caracteres de texto y las combina con texto preestablecido para formar una cadena de caracteres. En el ejemplo del tutorial podemos ver:

sprintf(bufer, “PRUEBA DE CONTEO: %d  “, i);

La instrucción convierte el valor numérico de la variable a caracteres de texto decimal y los combina con el texto que está como segundo argumento. Por último el resultado lo guarda en la variable bufer (que es un arreglo de 30 caracteres o CHAR). Es entonces que si queremos visualizar el resultado en la pantalla TFT, se utiliza la instrucción TFT_PrintStr. Pero en lugar de imprimir un texto constante, se manda a imprimir el arreglo bufer. Por lo tanto se escribe:

TFT_PrintStr(10, 30, bufer, ColorLetra, ColorFondo);

Como resultado observaremos en la pantalla TFT de Ophyra lo siguiente:

PRUEBA DE CONTEO: 32

El número 32 sería el valor que en ese momento tendría la variable i.

Cargar programa a nuestra tarjeta de Desarrollo Ophyra.

El último paso es programar tu tarjeta Ophyra. Si nunca lo has hecho, sigue los pasos del 6 al 12 de esta GUÍA.

Después de cargar el programa a la tarjeta Ophyra, la pantalla TFT de Ophyra encenderá y se observará la animación de la misma correr continuamente. En la imagen 15 se puede observar una animación de la práctica.

Imagen 15. Utilización de la pantalla TFT de Ophyra.

Acelerando la animación de la práctica.

Cabe mencionar que por defecto Ophyra se configura a una frecuencia de reloj de 16MHz. Esta velocidad resulta muy pobre a la hora de utilizar la pantalla, lo que provoca que la animación se vea lenta. Por lo anterior, hemos decido mejorar este aspecto y te diremos como configurar la frecuencia de reloj del procesador para que responda mas rápido y puedas desplegar animaciones con fluidez. Sigue los siguientes pasos:

Paso 1. Abre el STM32CubeMx con tu proyecto cargado y ubica el recurso RCC. Despliega el recurso y en High Speed Clock (HSE) activa la opción: Crystal /Ceramic Resonator, como se muestra en la imgen 16.

Imagen 16. Activacion de High Speed Clock.

Paso 2.  Dirigirte a la pestaña de Clock Configuration. En esta ventana observarás la siguiente imagen.

Imagen 17. Entorno de configuración del reloj del procesador.

Paso 3. Guiándote de la imagen 17, comienza a modificar los parámetros que se resaltan en los recuadros rojos y en el orden de numeración que se muestra. El primer parámetro a modificar es el marcado en rojo con el número 1; este parámetro corresponde a la frecuencia (8MHz) del cristal que viene con Ophyra. Para ello hay que dar un clic sobre el recuadro azul e introducir el número 8. Ahora da clic sobre el radio-botón identificado con el número 2.  Continua con las modificaciones según el orden de numeración de la imagen. Al final cuando ya hallas terminado, observarás en el extremo derecho de la ventana (los recuadros azules) como los valores numéricos habrán cambiado a 168MHz (frecuencia del CUP), 42MHz y 84MHz (frecuencia de trabajo de los periféricos).

Paso 4. Ahora dale clic al botón de generar proyecto, para que se reconstruya y actualice tu práctica, como se muestra en la imagen 17. El programa automáticamente te pedirá abrir de nuevo el proyecto, presiona en Open Project para que te recargue el código con las nuevas configuraciones realizadas. Con esto STM32CubeMX a configurado solamente las configuraciones del reloj, sin modificar tu código.

Imagen 18. Reconstruyendo la práctica de la TFT Ophyra. 

Paso 5. Estando en Atollic TRUESTUDIO ubica tu programa main.c y vuelve a compilarlo. Descarga el el programa a Ophyra y observa la diferencia en la velocidad de desplegado de los caracteres y animaciones.

Visualizando números decimales (variables de tipo flotante).

Cuando trabajamos con números decimales de tipo flotante de 32 bits (float32) y deseamos que en la pantalla TFT de Ophyra se muestren estos números; es importante cambiar la configuración de Atollic que por defecto tiene. Atollic por defecto maneja la librería llamada: Newlib-nano, esta librería, está optimizada para ocupar la menor cantidad de instrucciones posible, pensando en el espacio de memoria limitado de un microcontrolador. Por lo tanto genera un código compacto y depurado, sin embargo, dicha librería no soporta el manejo de operaciones matemáticas y despliegue de información de números flotantes. Es por ello que cuando se manda a imprimir un número flotante a la TFT, esta no mostrará dicho valor, a menos que cambiemos la configuración del compilador. Debemos reemplazar la librería Newlib-nano por la librería Newlib-standard. Para realizar el cambio sigue los pasos que se muestran en la imagen 19.

Imagen 19. Cambiando la librería Newlib-nano por Newlib-standard en Atollic. 

Como observas en la imagen, primero debes entrar a las propiedades de tu proyecto. Seguidamente selecciona: C/C++ build -> Settings. En la ventana de Tool Settings  selecciona: C Linker -> General. En la opción de la derecha llamada: Runtime Library selecciona la opción de Newlib-standard. Da clic sobre el botón de OK y listo, has cambiado la configuración de Atollic.

Por último, debes compilar tu programa nuevamente y programar de nuevo a Ophyra. Verás que ahora los números decimales de tipo flotante, aparecerán en la pantalla. Sin embargo, también podrás notar que el tamaño del archivo .HEX se incrementó aproximadamente 3 veces. Esto debes de tenerlo en cuenta a la hora de desarrollar tus proyectos, para que no te genere un conflicto de espacio.

Conclusiones.

Hemos configurado y programado en Ophyra la pantalla TFT_ST7735 mediante la librería TFT_Ophyra especialmente desarrollada para nuestra plataforma. Así mismo aprendimos a configurar la velocidad del reloj de Ophyra, para acelerar la comunicación con la pantalla TFT y permitir el despliegue de información más fluido.

Si tienes alguna consulta o duda sobre este tutorial o referente a cualquier otro tema de Ophyra, contáctanos a nuestro Foro.

Menú