用的CPU是STM32F103ZET6,usart3, full remap, 工作在同步方式下,tx和rx接成loopback,程序如下: USART_ClockInitStructure.USART_Clock = USART_CLOCK_ENABLE; cpol=1 cpha=1 baudrate=115200 wordlength=8 stopbit=1 no parity no hw flow control enable rx, enable tx
while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET); USART_SendData(USART3, 0z55); // <<<<<<<<<<<<<<<<<<<< 1 while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET); USART_SendData(USART3, 0zAA); // <<<<<<<<<<<<<<<<<<<< 2 while(USART_GetFlagStatus(USART3, USART_FLAG_RXNE) != RESET) { x = USART_ReceiveData(USART3); // <<<<<<<<<<<<<<<<<<<< 3 }
按我的想法,前面发送了两个字节,即使没有及时Receive,也应该接收到两个字节,一个在RDR,一个在Receive Shift Register,结果3处的循环只跑了1次,就是说只接收到一个字节(0x55). 即使在循环后再读一次,还是0x55, 第二次发送的0xaa丢失了?
本来是用中断做的,接spi外设,full duplex,结果发现接收数据有丢数现象。接成loopback用查询方式做测试,发现上述问题。程序问题乎?bug乎?盼解答。 |