STM32利用MAX485进行串口通信延迟一位
本帖最后由 crashdown 于 2016-4-24 22:24 编辑写了个程序,接受到缓存区内,并将整个缓存区发送回电脑,每次都返回前一次应该返回的数据,第一次发送不返回数据。
比方说缓存区为Buff={0};
第一次发送01;无返回;
第二次发送01;返回 01 00 00 00 00 00 00 00;
第三次发送01;返回01 01 00 00 00 00 00 00;
感觉像是有个缓存器回先缓存一个字符,第二个字符来了才会将数据给STM32。
有没有大神解答一下,实在想不通。
源码:
void USART2_IRQHandler(void)
{
u8 j;
if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET)
{
USART_ClearITPendingBit(USART2,USART_IT_RXNE);
if(i>7)
i=0;
temp=USART_ReceiveData(USART2);
while(USART_GetFlagStatus(USART2,USART_FLAG_RXNE)==RESET);
// mDelay(Modbus_Delay);
Modbus_Transmit;
mDelay(1);
for(j=0;j<8;j++)
{
USART_SendData(USART2,temp);
while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);
}
USART_SendData(USART2,'\n');
while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);
mDelay(2);
Modbus_Receive;
i++;
}
}
电脑端只是简单每次发送一位数据 01,先进行一个简单的测试,测试结果:
发送:01
发送:01
接收:01000000000000000A
发送:01
接收:01010000000000000A
发送:01
接收:01010100000000000A
发送:01
接收:01010101000000000A
发送:01
接收:01010101010000000A
发送:01
接收:01010101010100000A
发送:01
接收:01010101010101000A
发送:02
接收:01010101010101010A
发送:02
接收:02010101010101010A
或许你第一个数据就没发出来吧。
页:
[1]