Tutorial 7. Comunicación RS232 en Microcontrolador de la serie STM32F4.

El objetivo de este tutorial es mostrar como configurar nuestra tarjeta de desarrollo Ophyra para poder realizar comunicación RS232. Por lo tanto, para demostrar su funcionamiento realizaremos un ejemplo donde mandaremos datos y estos mismos serán recibidos para ser comparados y encender un LED si el valor recibido (en decimal) es mayor o igual a 100.

Configurar Hardware usando STM32CubeMX.

Lo primero que vamos 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 que vamos a utilizar, que como ya sabemos el correspondiente a nuestra tarjeta Ophyra es un Microcontrolador ARM STM32F407VGTx, lo seleccionamos y damos doble click, posteriormente podremos observar como nos aparece el microcontrolador con sus respectivos recursos (Imagen 3), por lo cual ahora si podemos proceder a configurarlos.

Imagen 1. Nuevo Proyecto en STM32CubeMX.

Imagen 2. Elección del microcontrolador.

Imagen 3. Ventana “Pinout” en STM32CubeMX.

Como ya se mencionó anteriormente lo que realizaremos será comunicación RS232, por lo que utilizaremos el recurso “USART 3”, asi que lo buscamos en la parte izquierda de la ventana “Pinout”, lo seleccionamos y lo habilitamos y en la parte donde dice “Modo” seleccionamos la opción de “Asynchronous”, y en el apartado que dice “Hardware Flow Control (RS232)” lo dejamos en la opción “Disable”, es decir deshabilitado, y como podremos observar los pines correspondientes a “TX” y a “RX”, es decir los pines correspondientes para transmitir y para recibir son habilitados y puestos de color verde como se puede apreciar en la imagen 4.

Imagen 4. Recurso USART3 habilitado en modo asíncrono.

Ahora bien, pasamos a la pestaña llamada “Configuration” para poder configurar nuestro recurso, así que seleccionamos “USART3” (Imagen 5) y una vez que nos aparezca la ventana de “USART3 Configuration” nos aseguraremos de que la ventana correspondiente a “Parameter Settings” tenga la configuración mostrada en la imagen 6.

Imagen 5. Pestaña “Configuration”.

Imagen 6. Ventana “Parameter Settings” del USART3 Configuration.

En cuanto a las pestañas de “User Constant”, “NVIC Settings”, “DMA Settings” y “GPIO Settings” no tendrán ninguna configuración, tal como se muestra en la imagen 7, así que procedemos a darle click en OK.

Imagen 7. Ninguna configuración en las pestañas: “User Constants”, “NVIC Settings”, “DMA Settings”, ”GPIO Settings”

Ahora procedemos a configurar el pin del LED correspondiente que se encenderá o se apagará de cuerdo a nuestra condición. Para ello nos regresamos a la pestaña de “Pinout”, seleccionamos el pin PE2, el cual según las especificaciones de Ophyra corresponde al LED Azul del LED-RGB. Hacemos click en el pin y seleccionamos “GPIO_Output” y asignamos un nombre a nuestro pin, en nuestro caso lo nombramos “Azul”, tal como se muestra en la imagen 8, a continuación:

Imagen 8. Selección de Pin para LED azul.

Posteriormente pasamos a la pestaña de “Configurations”, y damos click sobre el boton “GPIO” donde haremos las configuraciones correspondientes para nuestro LED, que como ya lo hemos hecho anteriormente son las siguientes que se muestran a continuación (Imagen 9):

Imagen 9. Configuraciones para LED azul.

Una vez configurado damos click en “Apply” y posteriormente en “Ok”. Ahora podemos proceder a generar el código, haciendo click sobre el icono de “Generate Source Code…“, ubicado en la parte superior de la ventana principal, donde se desplegará la siguiente ventana:

Imagen 10. Ventana “Project Settings”.

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

  1. Project Name”, se coloca un nombre para el proyecto, que en nuestro caso será “RS232”. 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á.

  2. En la “Toolchain / IDE”, aquí debemos seleccionar nuestro software que utilizaremos para programar, que por ser un Software libre, nosotros usaremos Atollic TrueSTUDIO, por lo tanto seleccionamos TrueSTUDIO.
  3. Seleccionamos la pestaña “Code Generator” y damos click sobre la opción que se muestra en la imagen como paso 4.
  4. 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. 
  5. Finalmente damos click en “OK”, y a continuación se desplegará la ventana que se muestra en la Imagen 11, en la cual vamos a dar click en“Open Project”.

 

Imagen 11. Ventana generado el proyecto.

Realizar programa en Atollic TrueSTUDIO.

Como podemos notar al haber seleccionado “Open Project” automáticamente nuestro proyecto se importa y se abre en Atollic TrueSTUDIO, abriéndose al mismo tiempo el archivo “main.c” por lo que podemos proceder a crear nuestro programa. Para esto lo primero que vamos a realizar será importar las bibliotecas necesarias para que nuestro programa funcione, puesto que como lo hemos mencionado antes, el ejemplo consistirá en mandar la leyenda “Hola Mundo” y al mismo tiempo recibir un dato carácter para crear una condición. Esta condición verifica si el carácter recibido es la letra mayúscula “E” el LED Azul será encendido y si se recibe una letra “A” será apagado. 

Lo primero que haremos es incluir las siguiente librerías de C, como se muestra en la Imagen 12, también  crearemos nuestras variables locales a utilizar.

Imagen 12. Inclusión de librerías y creación de variables.

Posteriormente procedemos a desarrollar nuestro código dentro del While infinito, para que siempre se este ejecutando. Ahora como se muestra en la Imagen 13,  escribimos el fragmento de programa  dentro del ciclo “while” que se encarga de enviar y de recibir datos por el puerto serial.

Imagen 13. Sección de programa a incluir dentro del “While”.

La primera sección resaltada con la flecha negra se encarga de recibir un dato por el puerto serial y compara si es una carácter valido. Como se mencionó anteriormente, si se recibe una letra “E” se enciende el LED Azul, si se recibe una letra “A” se apaga.  La sección resaltada con la flecha roja se encarga de enviar una cadena de caracteres por el puerto, en este caso se envía la leyenda “Hola Mundo” seguido del carácter especial correspondiente al Enter.

Las nuevas funciones exploradas en este tutorial se describen a continuación: 

HAL_UART_Receive(&huart3, DatoRecibido,(uint16_t)1,(uint32_t)100). Esta función se encarga de recuperar los datos provenientes del puerto serial y los guarda en una variable o arreglo, en este caso el dato recibido lo guarda en la variable DatoRecibido. Los parámetros que acepta la función se describen a continuación: 

  1. &huart3: puntero a la estructura UART_HandleTypeDef que contiene la información de configuración para el módulo UART (puerto utilizado) especificado.
  2. DatoRecibido: variable o apuntador que contendrá los datos provenientes del puerto, estos tienen que ser de tipo uint8_t.
  3. 1: Cantidad de datos a recibir de tipo uint16_t.
  4. 100: tiempo de espera (ms), este dato tiene que se de tipo uint32_t.

HAL_UART_Transmit(&huart3, (uint8_t*)bufer, (unit16_t)strlen(bufer), (uint32_t)100). Esta función se encarga de enviar los datos provenientes de una variable o arreglo, hacia el puerto serial en este caso los datos enviados están en un arreglo llamado bufer. Los parámetros que acepta la función se describen a continuación: 

  1. &huart3: puntero a la estructura UART_HandleTypeDef que contiene la información de configuración para el módulo UART (puerto utilizado) especificado.
  2. (uint8_t*)bufer: variable o apuntador que contiene los datos a ser enviados, estos tienen que ser de tipo uint8_t.
  3. (unit16_t)strlen(bufer): El tercer parámetro debe ser cantidad de datos a enviar de tipo uint16_t. la función strlen calcula la cantidad de caracteres contenidos en el arreglo bufer y devuelve ese valor.
  4. 100: tiempo de espera del puerto (ms), este dato tiene que se de tipo uint32_t.

La función sprintf permite enviar una cadena de datos o una variable hacia un buffer o arreglo de tipo char. Esta función es estándar de C y soporta todos los parámetros habituales de ella misma.

Finalmente compilamos nuestro programa para generar el archivo *.HEX y descargarlo a nuestra tarjeta. Para ello seguir los pasos del 1 al 5  de esta GUÍA.

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.

Conclusiones.

Después de cargar el programa a la tarjeta Ophyra, abriremos la terminal del puerto serial que viene integrada en Atollic TRUESTUDIO. En la imagen 14 se muestra el botón que debemos presionar para que se nos habrá la terminal. Nota: Este botón puede variar de ubicación según la configuración de tu programa, por ello es necesario que lo identifiques bien.

Imagen 14. Botón para abrir la terminal serial de Atollic.

 Al dar clik sobre el botón, se abrira una ventana de configuración como la que se muestra en la imagen 15.

Imagen 15. Ventana de configuración de la terminal serial de Atollic.

Seleccionamos el puerto COM correspondiente a nuestra tarjeta Ophyra, los demás parámetros no se modifican ya que así fue configurado por defecto el puerto serial de Ophyra; por último damos click en OK. Atollic abrirá una ventana en la parte inferior de la ventana, junto a la consola. En esta ventana observaremos los datos enviados por Ophyra, que para este ejemplo se observará la leyenda “Hola Mundo” desplegada muchas veces, como se muestra en la imagen 16.

También podemos enviar datos por el puerto, simplemente presionando las teclas de nuestro teclado. Note que si presionamos la letra “e”, nada ocurrirá, pero si presionamos la letra “e” con las mayúsculas activadas, estaremos enviando la letra “E”, y el LED color Azul encenderá. De igual forma si enviamos la letra “A” el LED Azul se pagará. 

Para terminar o cerrar la comunicación con el puerto serial, debemos presionar el botón que se resalta en rojo en la misma imagen 16.

Imagen 16. Terminal serial de Atollic activada.

Hemos configurado y programado en Ophyra el puerto serial disponible, enviando y recibiendo datos por el mismo.

Te sugerimos hacer ejercicios como la recepción de datos más largos y el despliegue de datos numéricos por la terminal.

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

Menú