Estoy trabajando en un diseño de cargador de arranque para un controlador Kinetis. Estoy usando esta aplicación Terminal ( https://sites.google.com/site/terminalbpp/ ). Puedo enviar textos como "Hola mundo" a través de mi puerto serie, depurando el código usando el depurador de enlaces J de Segger en mi placa.
Pero cuando trato de enviar el archivo de la aplicación después de programar la placa con mi código de cargador de arranque, la terminal no responde.
¿Es porque mi conexión en serie es semidúplex (RS 485) o porque hay algún error en mi código?
No sé si la conexión semidúplex sería una razón. Quería saber si ese sería el motivo. Si mi pregunta te suena tonta, por favor explícame la lógica.
Gracias por ayudar
Actualizar:
Este código proporciona la salida con éxito como se muestra en la imagen.
for(;;) { GPIO_PDD_TogglePortDataOutputMask(GPIOA_BASE_PTR, GPIO_PDD_PIN_21); CLS1_SendStr("Hello World!\r\n", CLS1_GetStdio()->stdOut); WAIT1_Waitms(1000); CLS1_SendStr("Welcome Ganesh!\r\n", CLS1_GetStdio()->stdOut); }
Pero este código
` static void ReadText(void) { uint8_t buffer[32], ch, i;
for(;;) {
GPIO_PDD_TogglePortDataOutputMask(GPIOA_BASE_PTR, GPIO_PDD_PIN_21);
CLS1_SendStr("Enter some text: ", CLS1_GetStdio()->stdOut);
GPIO_PDD_TogglePortDataOutputMask(GPIOA_BASE_PTR, GPIO_PDD_PIN_21);
buffer[0] = '\0';
i = 0;
do {
if (CLS1_KeyPressed()) {
CLS1_ReadChar(&ch); /* read the character */
if (ch!='\0') { /* received a character */
buffer[i++] = ch; /* store in buffer */
if (i>=sizeof(buffer)) { /* reached end of buffer? */
buffer[i] = '\0'; /* terminate string */
break; /* leave loop */
}
if (ch=='\n') { /* line end? */
buffer[i] = '\0'; /* terminate string */
break; /* leave loop */
}
}
}
} while(1);
GPIO_PDD_TogglePortDataOutputMask(GPIOA_BASE_PTR, GPIO_PDD_PIN_21);
CLS1_SendStr("You entered: ", CLS1_GetStdio()->stdOut);
CLS1_SendStr(buffer, CLS1_GetStdio()->stdOut);
CLS1_SendStr("\r\n", CLS1_GetStdio()->stdOut);
}
}`
Se depura en la placa sin ningún error, pero en la aplicación de terminal no hay cambios. GPIO_PDD_TogglePortDataOutputMask(GPIOA_BASE_PTR, GPIO_PDD_PIN_21);
Este fragmento de código habilita y deshabilita el transmisor mientras envía y recibe respectivamente. ¿Estoy cometiendo algún error al usar este fragmento de código?
Para RS485, debe implementar el protocolo de enlace de hardware mediante RTS. Cuando desea enviar caracteres a través de UART, el RTS habilita el transmisor, mientras que recibir el RTS desactiva el transmisor y cambia al modo de recepción. RS485 se usa generalmente en comunicaciones maestro/esclavo. donde el maestro envía una consulta: RTS ON->TX->RTS OFF->RX y el esclavo responde: RX->¿El maestro me consulta?->RTS ON->TX (respuesta)->RTS OFF->RX.
Definitivamente, es posible enviar archivos a través de enlaces semidúplex, pero deberá usar un protocolo semidúplex en el que el remitente detiene el envío cada vez que espera una respuesta del receptor.
Ganesh Ramachandran
Ganesh Ramachandran
Marko Bursic