申明下:我发的字符串格式是这样的: “F0AF” 两个‘F’是用来判断数据的正确性的 ‘A’这个数据就是我需要的。求人帮忙!!!谢谢!! void USART1_IRQHandler(void) //串口1中断服务程序 { int i=0; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是‘F’,'F'结尾) { USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志 USART_RX_BUF[Usart1_Rx_Num]=USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据 Usart1_Rx_Num++;} //判断数据的正确性 if((USART_RX_BUF[0]==0x46)&&(USART_RX_BUF[Usart1_Rx_Num-1]==0x46)) //数据时'F' 'F'开头与结尾 例如'F0AF' USART_RX_STA=1;//接收标志位 if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)==SET)//清除溢出错误标志位 { USART_ClearFlag(USART1,USART_FLAG_ORE);//清除 USART_ReceiveData(USART2);//读DR } if(USART_RX_STA) { switch (USART_RX_BUF[2]) { case 0x41:run();break; case 0x42:right();break; case 0x43:left();break; case 0x44:back();break; } for(;i |
RE:求帮忙,stm32接收一段字符串的问题。各位帮我看看我的代码有没什么问题!
回复:求帮忙,stm32接收一段字符串的问题。各位帮我看看我的代码有没什么问题!
RE:求帮忙,stm32接收一段字符串的问题。各位帮我看看我的代码有没什么问题!
回复:求帮忙,stm32接收一段字符串的问题。各位帮我看看我的代码有没什么问题!
你先在 USART_RX_STA=1;//接收标志位设一个断点看看,程序会不会进来,如果不进来,那就把后面的注释掉,然后把进来的数据直接放到数组里面看看,确保你的接收数据是没问题的。
我不知道怎么断点调试T T
回复:求帮忙,stm32接收一段字符串的问题。各位帮我看看我的代码有没什么问题!
Usart1_Rx_Num=1时就有问题了.
怎么说?
回复:求帮忙,stm32接收一段字符串的问题。各位帮我看看我的代码有没什么问题!
回复:求帮忙,stm32接收一段字符串的问题。各位帮我看看我的代码有没什么问题!
RE:求帮忙,stm32接收一段字符串的问题。各位帮我看看我的代码有没什么问题!
if ((USART_RX_BUF[0] == 0x46) && (USART_RX_BUF[Usart1_Rx_Num - 1] == 0x46)) //数据时'F' 'F'开头与结尾 例如'F0AF'
{
USART_RX_STA = 1; //接收标志位
}
修改为
//判断数据的正确性
if (Usart1_Rx_Num > 2)
{
if ((USART_RX_BUF[0] == 0x46) && (USART_RX_BUF[Usart1_Rx_Num - 1] == 0x46)) //数据时'F' 'F'开头与结尾 例如'F0AF'
{
USART_RX_STA = 1; //接收标志位
}
}
RE:求帮忙,stm32接收一段字符串的问题。各位帮我看看我的代码有没什么问题!
你可以连上仿真器设个断点看看,能不能收到数据,数据个数对不对,然后在考虑后面的比较问题
RE:求帮忙,stm32接收一段字符串的问题。各位帮我看看我的代码有没什么问题!
USART_RX_BUF[Usart1_Rx_Num]=USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据
这个语句是返回的16位数值,你得进行数据转换,要不然你接收的数据时错误的。
修改为:
USART_RX_BUF[Usart1_Rx_Num]=(unsigned char)USART_ReceiveData(USART1);
你这个功能很容易实现,最好把字符判断的放在while()中进行。
RE:求帮忙,stm32接收一段字符串的问题。各位帮我看看我的代码有没什么问题!
USART_ReceiveData(USART2);//读DR
楼主你使用的USART1,读的怎么是USART2的数据