c -如何保存只有某些字节,我需要而不是所有在一个数组?



我通过UART通信每秒从传感器获得10个字节。但我不需要所有的字节,实际上只需要某些字节。现在我要做的是将所有字节保存到一个数组中,并创建两个新的uint8_t,并从我需要的缓冲区数组中为它们分配字节。

是否有一种方法只接收和保存我首先需要的字节,而不是所有10个?

uint8_t buffer[10];
HAL_UART_Receive_DMA(&huart4, (uint8_t*)buffer, 10)
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart4)
{
uint8_t value1 = buffer[4];
uint8_t value2 = buffer[5];
.
.
.
}

在DMA模式下,您需要提供完整大小的缓冲区。没有其他的方法,因为接收不是由核心控制的(它是在后台完成的),DMA控制器信号结束(如果你想要一半和错误条件)的事务只有

这是可能的,只有原始的中断处理,没有任何DMA和(大多数)没有花哨的HAL函数。

您必须为RXNE标志编写手动UART中断处理程序,这是在UART接收单个字符时设置的。读取它从DR寄存器和决定-保存或丢弃它。当然,现在由您来计算所有接收到的字节数并检测"消息结束"。条件。

如果您的代码在接收此消息期间无事可做,请使用

HAL_UART_Receive

逐字节读取消息