发送一串十六进制数【5A A5 06 83 12 00 01 00 02】到串口 32接收并保存到数组 但总是达不到想要的效果(通过识别最后的两位02 来控制灯的亮灭)求各位大神指点迷津 代码如下void USART1_IRQHandler(void) //串口3中断服务程序,用于和触摸屏通讯。
{
extern int STOP;
uint8_t Res;
static uint8_t US_STA = 0; //用于检测是否已经收到帧头,未收到为0,收到5a为1,收到a5为2。
static uint8_t buffer_num = 0;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
Res = USART_ReceiveData(USART1); //读取接收到的数据
if(!USART_RX_STA)
{
if(US_STA == 0)
{
if(Res == 0x5A) US_STA = 1; //接收到了0x5a,US_STA=1
}
else if(US_STA == 1)
{
if(Res == 0xA5)
{
US_STA = 2; //接收到了0xA5,US_STA=2
buffer_num = 0;
}
else US_STA = 0; //5A后面不是A5则全部重新接收。
}
else if(US_STA == 2)
{
USART_RX_BUF[buffer_num] = Res;
if(buffer_num++ == USART_RX_BUF[0])
{
buffer_num = 0;
USART_RX_STA = 1; //当接收数量等于缓存0位置时,则接收完成。
US_STA = 0;
STOP=1;
}
}
}
}
}
while(1)
{
if(STOP==1)
{
// printf("%x
",USART_RX_BUF);
switch(USART_RX_BUF[8])
{
case 0x02:
LED2_1; printf("OPEN
");printf("%x
",USART_RX_BUF[8]);memset(USART_RX_BUF,0,sizeof(USART_RX_BUF));USART_RX_STA=0;
break;
case 0x01:
LED2_0;
printf("CLOSE
");printf("%x
",USART_RX_BUF[8]);memset(USART_RX_BUF,0,sizeof(USART_RX_BUF));USART_RX_STA=0;
break;
default : break;
}
}
else
printf("DEFAULT
");
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>