打印
[其他ST产品]

USART中的getchar()函数功能不能实现

[复制链接]
1013|33
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
stormwind123|  楼主 | 2023-7-26 10:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在STM32中是不是只要初始化了USART之后,然后再加上#ifdef __GNUC__/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
   set to 'Yes') calls __io_putchar() */
#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
{
  /* Place your implementation of fputc here */
  /* e.g. write a character to the USART1 and Loop until the end of transmission */
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);

  return ch;
}

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

就可以用getchar 和printf到串口助手上去了啊?目前我可以实现printf的功能,但是getchar的功能还是不能实现。不知道哪里有问题?有大神知道的吗,指点一二吧,在线等。。。

使用特权

评论回复
沙发
香水城| | 2023-7-26 10:11 | 只看该作者
你先试试你的 HAL_UART_Receive(&huart1,&ch, 1, 0xffff);能否正常运行吧,即能否收到数据。

使用特权

评论回复
板凳
一只眠羊| | 2023-8-13 21:43 | 只看该作者
你能printf打印,但是不能getchar是吧

使用特权

评论回复
地板
Undshing| | 2023-8-13 23:19 | 只看该作者
只有getchar()不能用吗?

使用特权

评论回复
5
失物招領| | 2023-8-14 01:12 | 只看该作者
不如直接串口中断接收函数来的实在

使用特权

评论回复
6
她已醉| | 2023-8-14 03:25 | 只看该作者
你能发送,能接收吗?然后再看看是否使用getchar

使用特权

评论回复
7
春日负喧| | 2023-8-14 05:23 | 只看该作者
可能是因为你收不到数据,所以getchar也不对

使用特权

评论回复
8
温室雏菊| | 2023-8-14 07:26 | 只看该作者
你仿真跟踪一下看看程序咋运行的呗

使用特权

评论回复
9
白马过平川| | 2023-8-14 09:11 | 只看该作者
getchar() 函数通常是阻塞的,即如果没有可用的输入字符,它会等待用户输入

使用特权

评论回复
10
风凉| | 2023-8-14 11:54 | 只看该作者
这个一般单片机用getchar的多么?

使用特权

评论回复
11
风凉| | 2023-8-14 15:28 | 只看该作者
为啥不直接用串口接收函数获取数据呢?

使用特权

评论回复
12
西洲| | 2023-8-14 18:13 | 只看该作者
话说,getchar是干啥的?有什么作用?

使用特权

评论回复
13
捧一束彼岸花| | 2023-8-14 23:14 | 只看该作者
Getchar好像有专门的例程吧,你网上找找呗

使用特权

评论回复
14
mattlincoln| | 2023-9-7 10:12 | 只看该作者
接收缓冲区没有溢出。如果需要,可以增加缓冲区的大小。

使用特权

评论回复
15
modesty3jonah| | 2023-9-7 10:45 | 只看该作者
在程序中调用getchar()函数,即可从串口接收缓冲区中读取一个字符。

使用特权

评论回复
16
cashrwood| | 2023-9-7 11:43 | 只看该作者
USART 中的 getchar() 函数是用于从串行端口接收字符的函数。

使用特权

评论回复
17
pixhw| | 2023-9-7 12:55 | 只看该作者
通过配置USART为接收模式,并使能接收中断(接收寄存器非空中断),在接收到字符后将其保存到全局变量rxData中。然后,您可以通过调用getcharUSART()函数来获取接收到的字符。

使用特权

评论回复
18
mmbs| | 2023-9-7 14:05 | 只看该作者
在需要读取字符的地方调用getchar()函数,该函数将尝试从USART接收数据并将其存储到接收缓冲区中。

使用特权

评论回复
19
bartonalfred| | 2023-9-7 15:00 | 只看该作者
int getchar(void) {  
    while (USART_RxBufferIsEmpty()) {  // 检查接收缓冲区是否为空  
        // 等待接收中断  
    }  
    return USART_RxBufferGet();  // 从接收缓冲区中获取字符并返回  
}

使用特权

评论回复
20
pentruman| | 2023-9-7 15:11 | 只看该作者
用于从串口接收缓冲区中读取一个字符。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

416

主题

2134

帖子

2

粉丝