我需要控制一个数字舵机,再给它发送数据的时候需要同时接收发送的数据,硬件上是直接把接收发送端口连到一起的(用杜邦线),但在发送接收的过程中发现有时候接收到的和发送的不一样,目前还在纠结什么原因?有没有知道的,谢谢啦
附上部分程序:
发送函数中:
for(bCount = 0; bCount < bPacketLength; bCount++)
{
TxRS485(TxBuffer[bCount]);//把TxBuffer[]中数据送给USART1,顺便送到RxBuffer[]存起来
}
CLEAR_BUFFER;//将数组指针清零方便下次存取 这个宏定义:#define CLEAR_BUFFER RxBufferReadPointer = RxBufferWritePointer=0
接收中断中:
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//读取接收完成中断标志位(接收寄存器满)
{
TranslatedData = USART_ReceiveData(USART1);
while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE) == 1)//软件读DR中的数据后自动清0 USART_FLAG_RXNE
{
uDelay(10);
if(ulCounter++ > RS485_TIMEOUT)
{
bTimeout = 1;
break;
}
}
RxInterruptBuffer[(RxBufferWritePointer)] = TranslatedData;
RxBufferWritePointer++;
中间那个是个对接收到的数据(字节)所用时间判断语句,测试发现根本没进入。这是另一个问题。
最后的结果就是接收发送有些数据不对
贴出一段接收发送的数据:
TxBuffer.1=255
RxInterruptBuffer.1=255
TxBuffer.2=1
RxInterruptBuffer.2=255
TxBuffer.3=5
RxInterruptBuffer.3=1
TxBuffer.4=3
RxInterruptBuffer.4=5
TxBuffer.5=8
RxInterruptBuffer.5=3
TxBuffer.6=255
RxInterruptBuffer.6=8
TxBuffer.7=3
RxInterruptBuffer.7=255
TxBuffer.8=236
RxInterruptBuffer.8=3
TxBuffer.0=255
RxInterruptBuffer.0=236 |