STM32 - RS485请求 - 响应

时间:2018-04-20 15:07:37

标签: stm32 uart rs485

我正在尝试向测量设备发送请求,并使用带中断的UART接收它的响应。但是,沟通不稳定,我收到不完整或损坏的回复。我不确定,但我认为这是因为切换驱动器使能信号。你能看看我的代码并给我一些建议我做错了吗?

这是我的代码:

int main(void){

HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART3_UART_Init();  

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);               //RS 485 transmit mode

while (1)
{

        if(HAL_UART_Transmit_IT(&huart3, (uint8_t*)aTxBuffer, 2) != HAL_OK)
        {
            while(1);
        }
        while (UartReady != SET);
        UartReady = RESET;
        if(HAL_UART_Receive_IT(&huart3, (uint8_t*)aRxBuffer, 4) != HAL_OK)
        {
            while(1);
        }
        while (UartReady != RESET);
        //do somethink with received data
          }
}

以下是我的回调函数:

void HAL_UART_TxCpltCallback(UART_HandleTypeDef *UartHandle)
{
/* Set transmission flag: transfer complete */
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);     //RS 485 receive mode
//DataRecieved = 0;
UartReady = SET;
}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
/* Set transmission flag: transfer complete */
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);       //RS 485 transmit mode
//DataRecieved = 1;
UartReady = SET;
}

非常感谢

2 个答案:

答案 0 :(得分:0)

您传输的数据是否也出现在您的RX缓冲区中,而您希望它不会出现?

答案 1 :(得分:0)

  

我收到的回复不完整或已损坏。我不确定,但我   认为这是因为切换驱动器使能信号。你能看一下吗?   我的代码并给我一些建议我做错了什么?

不确定,但也许有助于切换DE引脚而不是中断回调函数,而是切换到"发送模式"在调用HAL_UART_Transmit_IT()之前,然后在传输之后切换回接收模式,或者甚至在调用HAL_UART_Receive_IT()之后,确保它将捕获传入的字节。微小的延迟有时很重要:

if-else