本帖最后由 crashdown 于 2016-4-24 22:24 编辑 写了个程序,接受到缓存区内,并将整个缓存区发送回电脑,每次都返回前一次应该返回的数据,第一次发送不返回数据。 比方说缓存区为Buff[8]={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[j]); 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 |
或许你第一个数据就没发出来吧。 |