STM32
直播中

h1654155275.5753

8年用户 1178经验值
私信 关注
[问答]

stm32f103rct6 prinrf可以正常使用,但是无法使用getchar和scanf函数,为什么?

已使用如下代码重定向,prinrf可以正常使用,但是无法使用getchar和scanf函数,求大佬解答
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#define GETCHAR_PROTOTYPE int __io_getchar(FILE *f)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#define GETCHAR_PROTOTYPE int fgetc(FILE *f)
#endif /* __GNUC__ */
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit( huart1, (uint8_t *) ch, 1, HAL_MAX_DELAY);
return ch;
}


GETCHAR_PROTOTYPE
{
uint8_t ch = 0; HAL_UART_Receive( huart1, ch, 1, 1000);
return ch;
}


main函数中:
while(1)
{
ch = getchar();
printf("输入的是:%c", ch);
}

回帖(1)

挽你何用

2024-4-9 18:07:45
T_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY); return ch;}

按照你提供的代码,我发现有个地方写错了,GETCHAR_PROTOTYPE函数中的HAL_UAR T_Transmit()应该是HAL_UART_Receive(),而且函数中的参数也需要修改一下,应该是(uint8_t *)&ch,不然会有警告提示,你可以尝试一下以下修改后的代码:

#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#define GETCHAR_PROTOTYPE int __io_getchar(FILE *f)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#define GETCHAR_PROTOTYPE int fgetc(FILE *f)
#endif /* __GNUC__ */

PUTCHAR_PROTOTYPE
{
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
  return ch;
}

GETCHAR_PROTOTYPE
{
  uint8_t ch = 0;
  HAL_UART_Receive(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
  return ch;
}

这样应该就可以正常使用getchar和scanf函数了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分