Reciba datos a través de USART en Atmel SAMD20

0

Estoy tratando de recibir algunos datos a través de USART en Atmel SAMD20. Yo uso usart_read_wait() y usart_read_buffer_wait() pero regresan con un error: el primero con STATUS_BUSY y el segundo con STATUS_ERR_TIMEOUT . El envío funciona muy bien, recibo todos los bytes en Putty o minicom. Aquí está mi código:

#include <asf.h>

static struct usart_config usart_conf;
static struct usart_module usart_mod;

int
main (void)
{
  system_init();
  usart_get_config_defaults (&usart_conf);
  usart_conf.pinmux_pad0 = PINMUX_UNUSED;
  usart_conf.pinmux_pad1 = PINMUX_UNUSED;
  usart_conf.pinmux_pad2 = PINMUX_PA20D_SERCOM3_PAD2;
  usart_conf.pinmux_pad3 = PINMUX_PA21D_SERCOM3_PAD3;
  usart_init (&usart_mod, SERCOM3, &usart_conf);
  usart_enable (&usart_mod);
  stdio_serial_init (&usart_mod, SERCOM3, &usart_conf);

  uint8_t buf[8];
  enum status_code st = usart_read_buffer_wait (&usart_mod, buf, sizeof (buf));
  printf ("Code: %d\r\n", st);
}

El uC se conecta a la PC a través del adaptador serie USB a TTL. Sospecho que hice la configuración de pinmux de manera incorrecta. Realmente no entiendo qué son los pinmuxes y las almohadillas. Entonces, ¿cómo podría enviar algunos datos a la UC?

    
pregunta c_spk

1 respuesta

1

¿Arreglaste esto? Sería genial si pudiera incluir el código completo que está utilizando. En caso de que no lo hicieras, intenta poner tu inicialización de usart dentro de un ciclo de tiempo.

while (usart_init(&usart_instance,
            EDBG_CDC_MODULE, &config_usart) != STATUS_OK) {
    }

El usuario necesita algún tiempo para completar el proceso de inicialización, si no lo usa, siempre fallará en el primer intento. Recuerde reemplazar EDBG_CDC_MODULE con el SERCOM que está utilizando en su proyecto

    
respondido por el cventu

Lea otras preguntas en las etiquetas