有没有人实践过将stm32串口接收的数据存进数组中 注意是数组 不是一个字符 有的话给我个能用的程序

2024-12-17 05:54:44
推荐回答(3个)
回答1:

如果你确定每一次对方返回的数据是固定长度的8个字节,那么你完全可以使用一个8个元素的数组。使用数组下标标识接收的数据量,每次接收中断将接收一个字节数据,然后数组下标变量自加1,当下标变量大于等于7的时候表明已经接收了8个字节,这时候置位接收结束标识(一个全局变量),也就5、6行代码。想提升就自已写一下嘛。

回答2:

用memcpy函数,你想复制什么类型的数据到数组里都行。

回答3:

/*******************************************************************************
*函数名 : 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;
}
}
}