1 votos

Comunicación UART con PuTTY

Estoy luchando para entender cómo trabajar con la interfaz UART entre microcontroladores. No se si esto ocurre porque no consigo entender como funciona o porque lo manipulo de forma incorrecta. En cualquier caso,intento ser práctico,intentando entender como funciona rápidamente y cogerle el gusto pero hasta ahora no lo consigo.He leído varios tutoriales sobre la "teoría" pero me cuesta ser práctico.

Esto es lo que intento hacer: Tengo un MCU (CC1310 en un launchpad) con un puerto UART. Intento ver si puedo hacer que este MCU hable con mi PC primero enviando algunos datos. Después necesito hacer que este MCU hable con otro MCU.

En primer lugar, tengo que mencionar que este launchpad tiene un depurador XDS 1100 conectado al ordenador a través de USB.Hay algunos puentes en la placa con RX TX así que supongo que esto permite que el XDS110 para actuar como FTDI convertidor USB a UART directamente a través de un puerto USB (también tengo un cable especial de Prolific para sondear las señales sin pasar por el depurador).

En Code Composer Studio, he importado y construido un proyecto llamado uart_echo para el CC1310. Encontré este ejemplo en Ti Resources Explorer. Conseguí construir el proyecto (ya que no cambié nada y este código fue escrito por Texas Instruments) y cargarlo en el chip usando el botón de depuración.

El código de este archivo es el siguiente:

    /*
 * Copyright (c) 2015-2016, Texas Instruments Incorporated
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * *  Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * *  Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * *  Neither the name of Texas Instruments Incorporated nor the names of
 *    its contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/*
 *  ======== uartecho.c ========
 */

/* XDCtools Header files */
#include <xdc/std.h>
#include <xdc/runtime/System.h>

/* BIOS Header files */
#include <ti/sysbios/BIOS.h>
#include <ti/sysbios/knl/Task.h>

/* TI-RTOS Header files */
#include <ti/drivers/PIN.h>
#include <ti/drivers/UART.h>

/* Example/Board Header files */
#include "Board.h"

#include <stdint.h>

#define TASKSTACKSIZE     768

Task_Struct task0Struct;
Char task0Stack[TASKSTACKSIZE];

/* Global memory storage for a PIN_Config table */
static PIN_State ledPinState;

/*
 * Application LED pin configuration table:
 *   - All LEDs board LEDs are off.
 */
PIN_Config ledPinTable[] = {
    Board_LED1 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
    Board_LED2 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
    PIN_TERMINATE
};

/*
 *  ======== echoFxn ========
 *  Task for this function is created statically. See the project's .cfg file.
 */
Void echoFxn(UArg arg0, UArg arg1)
{
    char input;
    UART_Handle uart;
    UART_Params uartParams;
    const char echoPrompt[] = "\fEchoing characters:\r\n";

    /* Create a UART with data processing off. */
    UART_Params_init(&uartParams);
    uartParams.writeDataMode = UART_DATA_BINARY;
    uartParams.readDataMode = UART_DATA_BINARY;
    uartParams.readReturnMode = UART_RETURN_FULL;
    uartParams.readEcho = UART_ECHO_OFF;
    uartParams.baudRate = 9600;
    uart = UART_open(Board_UART0, &uartParams);

    if (uart == NULL) {
        System_abort("Error opening the UART");
    }

    UART_write(uart, echoPrompt, sizeof(echoPrompt));

    /* Loop forever echoing */
    while (1) {
        UART_read(uart, &input, 1);
        UART_write(uart, &input, 1);
    }
}

/*
 *  ======== main ========
 */
int main(void)
{
    PIN_Handle ledPinHandle;
    Task_Params taskParams;

    /* Call board init functions */
    Board_initGeneral();
    Board_initUART();

    /* Construct BIOS objects */
    Task_Params_init(&taskParams);
    taskParams.stackSize = TASKSTACKSIZE;
    taskParams.stack = &task0Stack;
    Task_construct(&task0Struct, (Task_FuncPtr)echoFxn, &taskParams, NULL);

    /* Open LED pins */
    ledPinHandle = PIN_open(&ledPinState, ledPinTable);
    if(!ledPinHandle) {
        System_abort("Error initializing board LED pins\n");
    }

    PIN_setOutputValue(ledPinHandle, Board_LED1, 1);

    /* This example has logging and many other debug capabilities enabled */
    System_printf("This example does not attempt to minimize code or data "
                  "footprint\n");
    System_flush();

    System_printf("Starting the UART Echo example\nSystem provider is set to "
                  "SysMin. Halt the target to view any SysMin contents in "
                  "ROV.\n");
    /* SysMin will only print to the console when you call flush or exit */
    System_flush();

    /* Start BIOS */
    BIOS_start();

    return (0);
}

Luego utilicé PuTTY. Miré mi puerto COM en Windows y descubrí :

Clase Aplicación / USUARIO UART : COM 10 Clase Datos Auxiliares: COM 9

Abrí PuTTY y seleccioné Comunicación serie, COM 10 / COM 9 e introduje 9600 en la tasa de baudios.

Abrió la consola PuTTY pero no había nada dentro. Ni siquiera podía escribir nada.

¿Qué estoy haciendo mal?

2voto

thegreatjedi Puntos 194

Ok, estoy haciendo lo mismo, con la misma placa y Putty. Lo que tienes que hacer es:

  1. Enchufe el cable USB en el PC y conéctelo al Launchpad.
  2. Compruebe en el Panel de Control de Windows, habrá dos puertos listados - XDS110 Class Application/User UART (COM##) y XDS110 Class Auxilliary Data Port (COM##).
  3. Abra Putty y utilice el número de puerto COM para la UART de aplicación/usuario de clase XDS110.
  4. Ajuste el BAUD a 9600. 5) Ahora debería poder teclear un carácter en PUTTY y recibir un eco de vuelta.

De hecho, cambié de Putty a RealTerm porque me pareció mucho más fácil de usar.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X