如果你确定每一次对方返回的数据是固定长度的8个字节,那么你完全可以使用一个8个元素的数组。使用数组下标标识接收的数据量,每次接收中断将接收一个字节数据,然后数组下标变量自加1,当下标变量大于等于7的时候表明已经接收了8个字节,这时候置位接收结束标识(一个全局变量),也就5、6行代码。想提升就自已写一下嘛。
用memcpy函数,你想复制什么类型的数据到数组里都行。
/*******************************************************************************
*函数名 : USART1_IRQHandler *
*参数 : 无 *
*返回值 : 无 *
*功能 : 串口1中断服务函数 *
*******************************************************************************/
void USART1_IRQHandler( void )
{
u8 res;
RII = USART1->SR;
if( ( RII & USART1_ORE ) == USART1_ORE )
{
Dummy_Byte = USART1->DR; //过载中断,清中断标识位
}
if( ( RII & USART1_RXNE ) == USART1_RXNE ) //接收到数据
{
res = USART1->DR;
if( USART1_RX_STAT == 0x01 )
{
//在接收中
USART1_RX_BUF[USART1_RX_COUNT++] = res;
if( res == 0x0A )
{
USART1_RX_STAT = 0x02; //结果应该是0x02
}
}
else if( USART1_RX_STAT == 0x00 )
{
if( res == '&' )
{
USART1_RX_STAT = 0x01;
}
// USART1_RX_BUF[0] = res; //不记录'&'
USART1_RX_COUNT = 0;
}
else if( USART1_RX_STAT == 0x02 )
{
//数据收完未处理
}
else
{
USART1_RX_STAT = 0x00;
}
}
}