本帖最后由 thinkdream 于 2025-5-14 10:15 编辑
写个pelco-d的处理程序从USART2收数据判断执行,并通过USART1再输出。程序如下:
void USART2_Isr(void)
{
uint8_t receivedByte;
// 检查是否接收到数据
if (USART_ReadIntFlag(USART2, USART_INT_RXBNE))
{
receivedByte = (uint8_t)USART_RxData(USART2); // 读取接收到的数据,低8位
USART_TxData(USART1, receivedByte); // 将接收到的数据发送到 USART1
// 存储数据到缓冲区
if (pelcoIndex2 < PELCO_D_FRAME_SIZE)
{
pelcoBuffer2[pelcoIndex2++] = receivedByte;
// 检查是否接收到完整帧
if (pelcoIndex2 == PELCO_D_FRAME_SIZE)
{
pelcoIndex2 = 0; // 重置接收索引
// 调用 PELCO-D 数据帧处理函数
parse_pelcod_command(pelcoBuffer2);
}
}
USART_ClearIntFlag(USART2, USART_INT_RXBNE);
}
}

实际发送数据(HEX):ff 01 00 14 0f 0f 13

USART2实际收到(断点获取):ff 01 00 28 1f 1f 27

部分数据向左移动一位
USART1实际推出:ff c1 c0 d4 cf cf c3

部分数据高两位变为1
是什么问题?如何解决
|