// 输入函数,用于从USART接收字符
char USART_GetChar(void)
{
char c;
HAL_StatusTypeDef status;
status = HAL_UART_Receive(&huart1, (uint8_t*)&c, 1, HAL_MAX_DELAY);
if (status != HAL_OK)
{
// 错误处理
}
return c;
}
// 自定义scanf函数
int scanf(const char *format, ...)
{
va_list args;
char input[128]; // 假设输入缓冲区大小
int len = 0;
int pos = 0;
va_start(args, format);
while (*format && pos < sizeof(input) - 1)
{
if (*format == '%')
{
format++; // 跳过'%'
switch (*format)
{
case 'd':
// 读取整数
while (isdigit((c = USART_GetChar())))
{
input[pos++] = c;
}
sscanf(input, "%d", va_arg(args, int *));
break;
case 's':
// 读取字符串
while ((c = USART_GetChar()) != '\n' && c != EOF)
{
input[pos++] = c;
}
input[pos] = '\0';
va_arg(args, char *);
break;
default:
// 忽略未知格式符
break;
}
}
else
{
// 普通字符
input[pos++] = USART_GetChar();
}
format++;
}
input[pos] = '\0';
va_end(args);
return pos;
}
|