初学485通讯,遇到了些问题。。
之前用232调了个接收串口精灵发送的数据然后发送到串口精灵。。
是正常的。。见下图:
现在换成485,结果发现,数据接收是正常的。。
但是发送后,数据丢了两位。。
见下图:
程序的话也就中断中处理的,和232的程序没啥区别,就加了个485控制端。。
程序如下:
void USART2_IRQHandler(void)
{
if(USART_GetITStatus(USART2, USART_IT_RXNE) == SET) // 接收
中断有效 ;
{
/* Read one byte from the receive data register */
RxBuffer[RxCounter++] = USART_ReceiveData(USART2);//
(USART_ReceiveData(USART2) & 0x7F); // 返回USARTx最近接收到的数据 ;
/* Clear the USART2 Receive interrupt */
USART_ClearITPendingBit(USART2, USART_IT_RXNE); // 清除
USART2的接收中断 ;
if(RxCounter == RxBufferSize)
{
/* Disable the USART2 Receive interrupt */
USART_ITConfig(USART2, USART_IT_RXNE, DISABLE); // 失能
USART2的接收中断 ;
TX_EN_485;
//发送状态
USART_ITConfig(USART2, USART_IT_TXE, ENABLE);
// 使能指定的USART2发送中断 ;
RxCounter=0;
//接收计数标志清零
}
}
if(USART_GetITStatus(USART2, USART_IT_TXE) == SET)
// 发送中断有效 ;
{
/* Write one byte to the transmit data register */
USART_SendData(USART2, RxBuffer[TxCounter++]); // 发送
数据 ;
/* Clear the USART2 transmit interrupt */
USART_ClearITPendingBit(USART2, USART_IT_TXE); // 清除
USART2的发送中断 ;
if(TxCounter == RxBufferSize)
{
/* Disable the USART2 Transmit interrupt */
USART_ITConfig(USART2, USART_IT_TXE, DISABLE); // 失能
USART2的发送中断 ;
RX_EN_485;
//接收状态
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
//使能接收中断
TxCounter=0;
//接收计数标志清零
}
}
}
注:其中RxBufferSize=8;
各位帮忙分析下是啥原因。。 |