Forma correcta de desactivar UART RX

2

Estoy realizando la comunicación UART a través de un solo cable utilizando la modulación de voltaje y corriente con un STM32F0. El problema que tengo es que cuando transmito, se reenvía a mi circuito Rx y recibo un montón de basura.

Me gustaría desactivar el Rx UART completamente mientras estoy transmitiendo, luego restablecer mi circuito analógico Tx (estado de flip flop) y luego volver a habilitar el Rx.

Actualmente, cuando intento hacer esto, cualquier retraso que inserto parece interrumpir el flujo de firmware y me quedo atascado en un bucle de interrupción de UART.

/* Disable Rx UART during message transmission */
USART_ITConfig(PMIC_COM1, USART_IT_RXNE, DISABLE);

/* Reply over CCIF if message 0x28 is received, reply is enabled and 
current state is LiIon */
//TODO: Reply Enable might not be necessary if checking for this in LiIon STate
if (replyEnable == 1 && currentState == STATE_LIION)
{
    CCIF_Send_Reply();
}

/* Reset Flip Flops */
PMIC_Output_On(FF_RESET);

Delay(5); 

PMIC_Output_Off(FF_RESET);

/* Enable Rx UART */
USART_ITConfig(PMIC_COM1, USART_IT_RXNE, ENABLE);  


void CCIF_Send_Reply(void)
{
  TxBuffer[0] = 0x55;
  TxBuffer[1] = 0x66;
  TxBuffer[3] = 0xFF;
  TxBuffer[4] = '
/* Disable Rx UART during message transmission */
USART_ITConfig(PMIC_COM1, USART_IT_RXNE, DISABLE);

/* Reply over CCIF if message 0x28 is received, reply is enabled and 
current state is LiIon */
//TODO: Reply Enable might not be necessary if checking for this in LiIon STate
if (replyEnable == 1 && currentState == STATE_LIION)
{
    CCIF_Send_Reply();
}

/* Reset Flip Flops */
PMIC_Output_On(FF_RESET);

Delay(5); 

PMIC_Output_Off(FF_RESET);

/* Enable Rx UART */
USART_ITConfig(PMIC_COM1, USART_IT_RXNE, ENABLE);  


void CCIF_Send_Reply(void)
{
  TxBuffer[0] = 0x55;
  TxBuffer[1] = 0x66;
  TxBuffer[3] = 0xFF;
  TxBuffer[4] = '%pre%';
  USART_ITConfig(PMIC_COM1, USART_IT_TXE, ENABLE);
}
'; USART_ITConfig(PMIC_COM1, USART_IT_TXE, ENABLE); }
    
pregunta spizzak

1 respuesta

1

Deshabilitar solo Habilitar Habilitar: USART_DirectionModeCmd (COM1, USART_Mode_Rx, DISABLE);

Deshabilitar todo UART: USART_Cmd (PMIC_COM1, DESACTIVAR);

    
respondido por el spizzak

Lea otras preguntas en las etiquetas