|
发表于 2013-3-31 16:21:48
|
显示全部楼层
humanking7 发表于 2013-3-31 00:36
还没有呢,这段时间忙的焦头烂额,研究成功了,一定会通知你的,谢谢您的关注 ...
请教一个问题呀:
我的STM32串口波特率设置的是115200
串口接受中断中用的是状态机来识别不同的帧头,比如我要识别AA 02 ......或者AA 01.... 我发现一个问题就是:通过电脑串口发送数据的时候,串口返回的数据比较慢,我在51上做的一个状态机,在同样的波特率的条件下,发送串口指令,返回的数据很快,我想知道是不是我的设计思想有问题部分代码如下:
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
c = USART_ReceiveData(USART1);
switch(recv_state)
{
case 0:
if(c == 0xaa)
{
recv_state=1;
}
else
{
recv_state=0;
//return 0
}
break;
case 1:
if(c == 0x01)
{
recv_state=2;
}
else if(c == 0x02)
{
recv_state=3;
}
else
{
recv_state=0;
// return 0
}
break;
case 2 :
if(k<3)
{
RXBUF1[k++] = USART_ReceiveData(USART1);
}
if(k>=3)
{
flag_1=1;
k=0;
USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);//关闭串口1的中断相应函数
}
break;
case 3 :
if(k<3)
{
RXBUF1[k++] = USART_ReceiveData(USART1);
}
if(k>=3)
{
flag_2=1;
k=0;
USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);//关闭串口1的中断相应函数
}
break;
}
}
在主程序中通过判断标志位 来确定相应的返回指令主程序部分函数如下所示:
if(flag_1 == 1)
{
flag_1 = 0;
k=0;
//USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);//打开串口1的中断相应函数
if((RXBUF1[0] == 0x00 ) && (RXBUF1[1] == 0x00 ) && (RXBUF1[2] == 0x00) )
{
USART_SendData(USART1,0x03);
//while( USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET );
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//打开串口1的中断相应函数
}
else
{
USART_SendData(USART1,0xff);
// while( USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET );
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//打开串口1的中断相应函数
}
}
if(flag_2 == 1)
{
flag_2 = 0;
k=0;
//USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);//打开串口1的中断相应函数
if((RXBUF1[0] == 0x00 ) && (RXBUF1[1] == 0x00 )&&(RXBUF1[2] == 0x00 ) )
{
USART_SendData(USART1,0x04);
while( USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET );
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//打开串口1的中断相应函数
}
else
{
USART_SendData(USART1,0xff);
while( USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET );
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//打开串口1的中断相应函数
}
}
可以正常的通讯 但是发现复位后发送第一个 AA 02 00 00 00的时候正常返回,然后马上再点击发送,返回就很慢,好像有延时,是不是我设置的有问题呀!求解中 谢谢,这种思想 我以前在51中用过反应很快的,AVR中也用过,反应也很快!请问是怎么回事???
|
|