一原因:
原因是因为485相比串口多了一个发送接收控制。
二解决方法:
将发送/接收控制放到freeModbus中让FreeModbus自己控制发送接收,主要在​​​vMBPortSerialEnable​​这个函数中修改,具体如下:

void
vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )
{
/* If xRXEnable enable serial receive interrupts. If xTxENable enable
* transmitter empty interrupts.
*/
if(xRxEnable == TRUE)
{
modbus_receive_en(); //开接收中断的时候接收使能
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
}
else
{
USART_ITConfig(USART2, USART_IT_RXNE, DISABLE);
}

if(xTxEnable == TRUE)
{
modbus_send_en(); //开发送中断的时候发送使能
USART_ITConfig(USART2, USART_IT_TC, ENABLE);
}
else
{
USART_ITConfig(USART2, USART_IT_TC, DISABLE);
}
}