电路基本没做修改,我对程序做了一下修改(使用的是中断):
void USART2_IRQHandler(void)
{
//接收中断
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
QueueWrite((void *)RxBuffer, USART_ReceiveData(USART2));
Delay(100); //延时
USART_ITConfig(USART2, USART_IT_TXE, ENABLE);
}
if(USART_GetITStatus(USART2, USART_IT_TXE) != RESET)
{
if(QUEUE_OK == QueueRead(&TxChar_1, (void *)RxBuffer))
{
GPIO_SetBits(GPIOA, GPIO_Pin_11);
USART_SendData(USART2, TxChar_1);
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET)
{
}
Delay(100); //延时
GPIO_ResetBits(GPIOA, GPIO_Pin_11);
}
else
{
USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
}
}
}
上面加了两处延时,可以向上位机接收数据并且发送倒是上位机,但是当上位机向单片机发送数据一次超过两个时就会出现错误 |