你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于USART中的getchar()函数的问题

[复制链接]
电小龙 提问时间:2016-9-21 09:52 /
在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的功能还是不能实现。不知道哪里有问题?有大神知道的吗,指点一二吧,在线等。。。


收藏 2 评论15 发布时间:2016-9-21 09:52

举报

15个回答
电小龙 回答时间:2016-9-21 09:59:24
不能沉啊,学STM32卡在这里了
电小龙 回答时间:2016-9-21 10:01:40
会不会是我初始化USART有问题,但是Printf函数能正常使用的。。。
废鱼 回答时间:2016-9-21 10:06:54
读取时把时间缩短一下,1秒的超时最好。读取的时候,要有数据发送过来,不然收不到数据。楼主这个应该是卡死在getchar里面了吧。
电小龙 回答时间:2016-9-21 10:13:46
安 发表于 2016-9-21 10:06
读取时把时间缩短一下,1秒的超时最好。读取的时候,要有数据发送过来,不然收不到数据。楼主这个应该是卡 ...

谢谢我试试,但是我看见硬石里面写的是这样的
int fputc(int ch, FILE *f)
{
  HAL_UART_Transmit(&husart_debug, (uint8_t *)&ch, 1, 0xffff);
  return ch;
}

/**
  * º¯Êý¹¦ÄÜ: Öض¨Ïòc¿âº¯Êýgetchar,scanfµ½DEBUG_USARTx
  * ÊäÈë²ÎÊý: ÎÞ
  * ·µ »Ø Öµ: ÎÞ
  * ˵    Ã÷£ºÎÞ
  */
int fgetc(FILE * f)
{
  uint8_t ch = 0;
  HAL_UART_Receive(&husart_debug,&ch, 1, 0xffff);
  return ch;
}
他也没有说把时间改小。卡死在getchar应该也不是,我在getchar下面写了printf函数,结果printf函数一直在发送数据
电小龙 回答时间:2016-9-21 10:18:38
安 发表于 2016-9-21 10:06
读取时把时间缩短一下,1秒的超时最好。读取的时候,要有数据发送过来,不然收不到数据。楼主这个应该是卡 ...

还有就是我把两个函数定义换成跟硬石里面一样的时候,发现printf函数也用不了了,我比较了不同的是第一个参数不同,我的地&huart1,硬石的是&huart_debug
电小龙 回答时间:2016-9-21 10:21:11
安 发表于 2016-9-21 10:06
读取时把时间缩短一下,1秒的超时最好。读取的时候,要有数据发送过来,不然收不到数据。楼主这个应该是卡 ...

大神我说错了,是在getchar卡死了,麻烦大神帮我分析一下可能是什么问题
废鱼 回答时间:2016-9-21 10:30:15
HAL_UART_Receive(&husart_debug,&ch, 1, 0xffff);
这个用你之前能printf的husart,后面的0xFFFF改为1000

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

电小龙 回答时间:2016-9-21 10:31:20
安 发表于 2016-9-21 10:06
读取时把时间缩短一下,1秒的超时最好。读取的时候,要有数据发送过来,不然收不到数据。楼主这个应该是卡 ...

问题已解决,非常感谢。正是你说的那样改短时间就好了,膜拜。。。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

电小龙 回答时间:2016-9-21 10:32:27
安 发表于 2016-9-21 10:30
HAL_UART_Receive(&husart_debug,&ch, 1, 0xffff);
这个用你之前能printf的husart,后面的0xFFFF改为1000 ...

谢谢,已经解决了,正是你说的那样
高二毛 回答时间:2016-9-21 10:35:59
学习了。其实关于printf和getchar你可以自己写一个,或者参考一下网上的例子做一个。这样就不用局限于系统提供的,并且想用什么借口print都可以,比如USB.
废鱼 回答时间:2016-9-21 11:46:35
不客气,有问题发帖即可。
电小龙 回答时间:2016-9-21 13:56:01
在这个平台学习STM32真的会事半功倍,里面有好多无私的大神。。。
zbber 回答时间:2016-9-22 07:24:56
好帖子顶一顶!感谢楼主
电小龙 回答时间:2016-9-22 07:31:45
zbber 发表于 2016-9-22 07:24
好帖子顶一顶!感谢楼主

共同学习,这个STM32学习平台真的很好,会让人迷上STM32的
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版