stm32 USART应用:上位机发送一段字符串给stm32并接受返回相同字符串程序出现的问题
[复制链接]
最近学习stm32 USART,自己编了个小程序,经实验在主函数中发送字符或字符串,电脑接収没问题;但电脑经串口调试工具发送一字符时(由stm32接受并返回),却需要两次发送上位机才能接受到,也就是发送数是接受数的2倍,很是疑惑;同样上位机发送字符串时,接受到的字符串顺序颠倒,但内容是发出的内容,这个也有疑惑。请各路大神抽一点时间帮小弟看看,不胜感激!
int main(void)
{
RCC_Configration();
GPIO_Configration();
NVIC_Configration();
USART_Configuration();
while(1);
}
...
...
...
void send_char(unsigned char i)
{
USART_SendData(USART1, i); //发送一位数据
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); //等待发送完毕
USART_ClearITPendingBit(USART1,USART_IT_TXE);
}
unsigned char receive_char(void)
{
unsigned char i;
i=USART_ReceiveData(USART1); //接受一个字节
while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET); //等待接收完毕
USART_ClearFlag(USART1,USART_FLAG_RXNE);
return i;
}
void send_str(unsigned char *p)
{
while(*p!='\0') //循环逐字输出,到结束字'\0'
{send_char(*p);p++; } //发送字符
}
void USART1_IRQHandler(void) //串口1中断
{
unsigned char RX_dat; //定义字符变量
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //判断发生接收中断
{
RX_dat=receive_char();
//USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志
send_char(RX_dat);
}
|