crashdown 发表于 2016-4-23 21:53:30

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

xmshao 发表于 2016-4-24 18:43:40

或许你第一个数据就没发出来吧。
页: [1]
查看完整版本: STM32利用MAX485进行串口通信延迟一位