我正在尝试使用 AS5600 编码器对直流电机进行位置控制,并将位置作为用户通过 UART 输入的位置,但我无法这样做。如果我给出 4 位数字输入,例如 1222,则只有 ASCII 值中的“1”存储在缓冲区数组中。
我尝试创建一个数组的数组来通过 for 循环存储输入的每个数字,这些数字作为 ASCII 值存储在数组中,然后将它们转换回十进制。
for (int j = 0; j < NUM_DIGITS; j++)
{
HAL_UART_Receive(&huart2, rxBuffer[i][j], 1, 1000);
intValue = (intValue * 10) + (rxBuffer[i][j] - '0');
}
如果
rxBuffer[i][j]
是一个二维数组,则意味着您没有阅读警告。如果是这种情况,您需要传递该元素的地址(即(uint8_t *)&rxBuffer[i][j]
)
您也不检查 HAL 函数的结果。
简单的行读取功能示例(:
HAL_StatusTypeDef getString(char *buff, size_t size)
{
size_t pos = 0;
HAL_StatusTypeDef result;
while(pos < size - 1 && (result = HAL_UART_Receive(huart, (uint8_t *)(buff + pos), 1)) == HAL_OK)
{
if(buff[pos++] == '\n') {pos--;break;}
}
buff[pos] = 0;
return result;
}