Professional Documents
Culture Documents
Laboratorio 4
Programación del UART (Universal Asynchronous Receiver\Transmitters)
Programación del temporizador del sistema (SysTick timer)
I. OBJETIVO
Comprender el funcionamiento del temporizador del sistema y del dispositivo de comunicación serial
que dispone el microcontrolador TM4C123GH6PM.
Programar correctamente utilizando sus registros de configuración que presentan ambos periféricos.
Una característica importante de todos los microcontroladores es la comunicación serial con otros
dispositivos. Se estudiará en el Laboratorio la programación del módulo serial UART del
microcontrolador TM4C123GH6PM.
Trama de una comunicación serial del UART, es programable:
Ejemplo:
Si el Reloj de UART fuese 8 Mhz entonces:
BRDI(Parte entera) + BRDF(Parte Fraccional) = 52.083333
La parte entera será BRDI = 52
La parte Fraccional es: 0.08333 y debe extraerse la parte entera de la siguiente operación INT(Fracc*64 + 0.5)
La parte Fraccional quedaría: BRDF = INT(5.83) = 5
Donde:
COUNT ENABLE
0; La cuenta no ha llegado a 0 0:SysTick desactivado
1: La cuenta ha llegado a 0 1: Systick activado
Secuencia de configuración
1. Desactivar el SysTick (ENABLE=0)
NVIC_ST_CTRL_R &= ~NVIC_ST_CTRL_ENABLE;
2. Programar valor de recarga (STRELOAD)
NVIC_ST_RELOAD_R
Considere:
TTEMP=TCLK_SYST(RELOAD + 1)
Si FSYS_CLK = 8 Mhz para temporizar cada 0.5 seg RELOAD = 3999999 =0X3D08FF
NVIC_ST_RELOAD_R |= 0x3D08FF;
3. Borrar valor actual (STCURRENT)
Escribir cualquier valor en NVIC_ST_CURRENT_R
4. Configurar SysTick (STCTRL)
Para conectar el módulo TIVA con el puerto serial de la PC, se emplea un software de comunicación serial,
en el laboratorio se empleará el Hyperterminal o el Putty, que se pueden descargar de una página web
confiable. La computadora personal solo servirá como un terminal, el CPU que procesa el programa es la
que corresponde al del microcontrolador TIVA y no al de la PC.
Pasos a seguir:
1. Ejecute el Hyperterminal, y abrir una nueva Conexión le pedirá un nombre de sesión, por ejemplo
escriba Tiva_serial, como se observa en la Figura 1.
Figura 1
2. Luego seleccione el puerto serial activo, en la Figura 2, se ha seleccionado el puerto de comunicaciones
COM42 de la PC, el cual está conectado al puerto serial del módulo LaunchPad TIVA (Puede ser
también otro dirección del Puerto diferente a COM42, revise en Administrador de dispositivos/Puertos,
ver la Figura 8, donde está activo el puerto COM6 )
Figura 3
Figura 2
3. Luego, ingrese los parámetros de transmisión serial, por ejemplo como se muestra en la Figura 3 con
los siguientes datos:
4. Finalmente, podrá ver el resultado de la programación en la pantalla virtual del Hyperterminal siempre
que el módulo Tiva esté ejecutando el código del programa.
PuTTY
Es otra aplicación portable que nos permite conectarnos entre dos computadoras, en este caso el Módulo
TIVA y la PC. Es gratuito y de código abierto de interfaz sencilla y manejable.
Pasos a seguir:
Figura 4
2. Crea una sesión de nombre Serial_Tiva, seleccione en Connection la pestaña Serial e ingrese los
parámetros de Transmisión serial del UART del TIVA y la PC, como se observa en las siguientes
figuras 5 y 6. En este ejemplo se ha seleccionado el puerto de comunicaciones COM6 de la PC, el
cual está conectado al puerto serial del módulo LaunchPad TIVA (Puede ser también otro dirección
del Puerto diferente a COM6, ver figura 8).
3. Luego, presione Open para ingresar a la pantalla virtual (Figura 7) donde se mostrarán nuestros
resultados del programa en ejecución, para ello la tarjeta Tiva debe estar ejecutando un programa.
Figura 5 Figura 6
Figura 7
Figura 8
ADMINISTRADOR DE DISPOSITIVOS
Estando conectado la tarjeta TIVA LaunchPad con la PC, para ver el puerto serial activo, ingrese a
Admistrador de dispositivos y presione la pestaña Puertos, como en la Figura 8, donde se observa que el
puerto activo es COM6, en su PC puede estar activo otro puerto.
Programa 1
Ejemplo con el UART0
Se utiliza el UART0 para realizar el programa ECO que significa que el microcontrolador ha recibido un
dato de la PC por su puerto serial (bit a bit) y lo transmite serialmente por el mismo puerto.
Ejemplo: Si se presiona la Tecla “H”, el microcontrolador recibe este carácter por su puerto serial, luego lo
retransmite, observando este carácter en la pantalla virtual de la PC denominado Hyperterminal. (También
se puede usar Putty).
Diagrama de Flujo
/***************************************************************************/
/***** Proyecto: Prog01_UART_ECO *****/
/***************************************************************************/
/***** Microcontrolador: TM4C123GH6PM *****/
/***** EvalBoard: Tiva C Series TM4C123G LaunchPad *****/
/***** Autor: Rolando Sánchez Ponce *****/
/***** Fecha: 2016-1 *****/
//***** Enunciado: *****/
/***** Se utiliza el UART0 para realizar ECO: dato recibido por el *****/
/***** puerto serial lo transmite por el mismo puerto. *****/
/***************************************************************************/
#include <stdint.h>
#include "tm4c123gh6pm.h"
void ConfiguraUART0(void){
// Habilitamos reloj para el UART0
SYSCTL_RCGC1_R |= SYSCTL_RCGC1_UART0;
// Habilitamos reloj para GPIOA
SYSCTL_RCGC2_R |= SYSCTL_RCGC2_GPIOA;
int main(void){
unsigned char datoRx;
ConfiguraUART0();
while(1){
// Esperamos mientras Buffer Rx esté vacío
while(UART0_FR_R & UART_FR_RXFE);
// Se lee el dato recibido
datoRx = UART0_DR_R;
// Esperamos mientras Buffer Tx esté lleno
while(UART0_FR_R & UART_FR_TXFF);
// Se escribe el dato para su transmisión
UART0_DR_R = datoRx;
} //Fin de while
} // Fin de main
Resultado
Diagrama de flujo
INICIO
Configuración de UART
Transmitir texto
¿aciertos < longitud de palabra[]?
No “Palabra correcta”
Sí
Recibir carácter
Sí No
aciertos ß aciertos + 1
Transmitir oculta[]
/* Proyecto: Palabra_Oculta
* Autor: Ing. Fedra Trujillano
* Semestre: 2016-1
* Descripcion:
* El programa recibe los caracteres ingresados por el teclado e
* identifica si pertenecen a una palabra oculta. Al inicio la
* palabra se muestra en pantalla como asteriscos y se reemplazan
* por el caracter correspondiente una vez acertado.
* Parámetros UART: 9600bps, 8 bits dedatos 1 bit de parada,
* sin paridad, habilitacióndel FIFO.
*/
#include"tm4c123gh6pm.h"
#include"stdint.h"
void main(void){
/*Mensajes a utilizar*/
uint8_t mInicio[]= "Ingrese letra\n\r";
uint8_t mFin[]= "Palabra correcta\n\r";
uint8_t oculta[]= "************\n\n\r"; // Arreglo para guardar las letras acertadas
uint8_t palabra[]= "TivaLauchpad";
uint8_t aciertos=0; // Contador de aciertos
uint8_t letra, i;
uint8_t longPalabra;
config_uart0(); // Se configura el UART
longPalabra = sizeof(palabra)-1; // Longitud de la palabra sin el caracter nulo
while(aciertos<longPalabra){ // Se esperan los aciertos de la
// longitud de la palabra
txmens_uart0(mInicio);
letra= rxcar_uart0();
for(i=0; i<longPalabra; i++){
if ((letra == palabra[i])&&(oculta[i]=='*')){
oculta[i]= letra;
aciertos++;
} // Se reemplazan los asteriscos por la letra correspondiente
} // y se incrementa el número de aciertos siempre que no hayan
// sido previamente reemplazados
txmens_uart0(oculta);
}
txmens_uart0(mFin); // Se transmite el mensaje de Fin
while (1);
}
Resultado
Se observa los resultados obtenidos, luego de ejecutar el programa con la aplicación hyperterminal.
Programa 3
Ejemplo con el Systick Timer
El programa hace parpadear el led D1 del módulo LaunchPad Tiva con distintos periodos de tiempo
obtenidos a partir de la programación del módulo Systick Timer del microcontrolador. Los periodos son
variados de manera cíclica al presionar y soltar el pulsador SW1 del módulo y son los siguientes:
0.5seg, 0.25seg, 0.125seg, 0.0625seg y 0.03125seg.
Diagrama de flujo:
Inicio
Configuración puertos,
configuración Systick
incrementar ß 0
Sí
¿Llegó a 0 el Conmutar Led
temporizador?
No Sí
¿incrementar =
No 0?
¿Se presionó y
soltó SW1?
Sí cuenta ß cuenta +1
incrementar ß incrementar +1
No
¿cuenta>=5?
Sí
cuenta ß 0
temporizador ß tiempo[cuenta]
incrementar ß 0
/* Proyecto: Temporizador
* Autor: Ing. Fedra Trujillano
* Semestre: 2016-1
* Descripción:
* El programa hace parpadear el led D1 del módulo Tiva Launchpad con distintos
* Periodos que son variados de manera cíclica al presionar y soltar el pulsador SW1.
* Los periodos son los siguientes:
* 0.5seg, 0.25seg, 0.125seg, 0.0625seg y 0.03125seg.
*/
#include "tm4c123gh6pm.h"
#include "stdint.h"
void config_pulsador_led(void) {
unsigned long temp;
int main(void) {
uint32_t temp;
uint8_t cuenta = 0;
uint8_t SwNoPresionado = 1; // Bandera que ayuda a determinar si
// el pulsador ya ha sido presionado
uint8_t incrementa = 0;
config_pulsador_led();
configSystick(cuenta); // Inicia con el parpadeo en 0.5 seg
while (1) {
// Se espera que la cuenta del Systick llegue a cero y se sondea
// durante la espera el pulsador SW1.
if (SwNoPresionado == 0) {
if (incrementa == 1) {
cuenta += 1;
if (cuenta == 5) {
cuenta = 0;
}
}
}
Programa 4
Ejemplo con el Systick Timer y UART
Desarrolle un programa, en base a la tarjeta de desarrollo Tiva Launchpad, que genere una cuenta
ascendente del 1 al 9 de forma continua, la cuenta se incrementará en intervalos de 0.5 seg; esta cuenta se
podrá visualizar en un emulador terminal por comunicación serial (Hyperterminal o PuTTY). Con el
pulsador SW1 podrá detener la cuenta, y esta se reanudará cuando vuelva a presionar y soltar el mismo
pulsador, cada vez que presione y suelte el SW2 podrá reiniciar la cuenta.
Los pulsador SW2 (PF0) y SW1 (PF4) son los que se encuentran en la tarjeta Tiva.
Configuración Serial del UART: 115.2k, 8bits, 1bit de parada, sin paridad.
Diagrama de Flujo
Inicio
Configuración Uart
Configuración de Systick
Configuración de puerto F
Inicialización variables
1
S N
I=I+1 í ¿Pasó 0.1seg? o
N
N N o
¿SW1 ¿SW2
Presionado?
o Presionado?
o I>5
S S S
í í í
N N I=0
¿SW1 o ¿SW2 o Actualizar Cuenta
Soltado? Soltado?
S Txcar_Uart(Cuenta)
í Cuenta = 1
N I=0
¿SW1 o
Presionado
y Soltado?
Sí
Txcar_Uart(Cuenta)
/* Proyecto: Contador_serial
* Autor: Ing. Jhonnell Fernandez
* Semestre: 2016-1
* Descripción:
Este programa genera una cuenta del 1 al 9 en intervalos de 0.5 seg.
Se podrá visualizar mediante un emulador de terminal serial.
El pulsador SW1 detiene la cuenta y el pulsador SW2 reinicia la cuenta
Uart Conf: 115.2K, 8bits, 1 bit de parada, sin paridad */
#include "tm4c123gh6pm.h"
#include "stdint.h"
int temp;
SYSCTL_RCGC1_R |= SYSCTL_RCGC1_UART0; // Se activa UART0
temp = SYSCTL_RCGC1_R;
temp = SYSCTL_RCGC2_R;
UART0_CTL_R &= ~UART_CTL_UARTEN; // Se recomienda deshabilitar el UART para
// cambiar los parametros
void main(void)
{
unsigned long j;
uint8_t i=0;
uint8_t cuenta=1;
config_uart0();
config_systick();
Config_puertoF();
while(1)
{
// Para generar mayor maniobrabilidad con los pulsadores se configuro intervalos de
// espera de 0.1s de forma que cuando ocurran 5 veces, la cuenta se incremente en
// una unidad
while( (NVIC_ST_CTRL_R & NVIC_ST_CTRL_COUNT)== 0);
i++;
}
else if((GPIO_PORTF_DATA_R&0x01)==0) // Revisa si se presiono SW2
{
for (j=0;j>500000;j++); // Retardo
Problemas Propuestos:
1. Se tiene el microcontrolador del módulo LaunchPad Tiva conectado a una PC en la que se está
ejecutando el Hyperterminal. Desarrollar un programa que divida dos números enteros positivos. Los
parámetros de comunicación son: 4800, 8, E, 2
2. Con respecto al manejo del módulo LaunchPad Tiva conectado con el puerto serial de la computadora
personal, implementar un programa que permita mediante el pulsador SW1, al presionar y soltarlo,
mostrar en la pantalla hyperterminal una lista de ocho números aleatorios de 3 cifras (entre 100 y 999).
Luego de mostrar ambas listas, el programa espera que el usuario presione otro pulsador del módulo
E/S Tiva para realizar una aplicación como se indica a continuación:
Si se presiona el pulsador SW2 se muestra la lista generada de aleatorios en orden descendente, si se
presiona SW3 o SW4 se muestra el menor y el mayor de la lista generada.
Para poder tener acceso al sistema debe ingresar una contraseña (se retransmite con asteriscos) que es
su apellido paterno en un tiempo de 5 segundos, de lo contrario indicará incorrecto.
Parámetros de Tx del UART: 4800, 8, e, 1
Conexiones:
SW1, SW2, SW3 Y SW4 conectados a PA4, PA3, PA2 y PA5 respectivamente. (Ver las conexiones
en el módulo E/S Tiva)
Ejemplo:
Guias_iee256_/2018-2/zcm/