打印

STM32串口中断里使用printf输出信息导致接收错误

[复制链接]
4586|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rtgchym|  楼主 | 2013-9-8 15:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在串口中断程序里用printf输出了一些提示信息,结果导致接收数据出现异常,删掉这些printf后一切就正常了。。这事怎么回事。。求指导啊
沙发
rtgchym|  楼主 | 2013-9-9 09:10 | 只看该作者
额。。没分的话大家都不屑回答吗。。。

使用特权

评论回复
板凳
3htech| | 2013-9-9 16:43 | 只看该作者
printf()函数,你不知道是怎么实现的,出问题是正常的。

我现在都不敢用这些函数。

使用特权

评论回复
地板
rtgchym|  楼主 | 2013-9-9 22:00 | 只看该作者
#ifdef __GNUC__
  #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE
{
  /* Place your implementation of fputc here */
  /* e.g. write a character to the USART */
  USART_SendData(USART2, (uint8_t) ch);
  /* Loop until the end of transmission */
  while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET)
  {}

  return ch;
}

就是这么重定向的fputs,然后加载了微库调用的printf

使用特权

评论回复
5
rtgchym|  楼主 | 2013-9-9 22:02 | 只看该作者
3htech 发表于 2013-9-9 16:43
printf()函数,你不知道是怎么实现的,出问题是正常的。

我现在都不敢用这些函数。 ...


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

PUTCHAR_PROTOTYPE
{
  /* Place your implementation of fputc here */
  /* e.g. write a character to the USART */
  USART_SendData(USART2, (uint8_t) ch);
  /* Loop until the end of transmission */
  while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET)
  {}

  return ch;
}

就是这么重定向的fputs,然后加载了微库调用的printf,现在就是放在串口中断程序里会导致串口接收出现异常。。这个是怎么回事?

使用特权

评论回复
6
wushulu| | 2016-12-14 13:42 | 只看该作者
printf();函数使用串口中断发送数据的,你在串口中断中使用printf()函数== 你在串口中嵌入串口中断 这样是不能实现的 我目前也遇到这种问题了

使用特权

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

本版积分规则

个人签名:永远相信美好的事情即将发生 --欢迎加入单片机与嵌入式技术交流群 157230413~~

4

主题

211

帖子

1

粉丝