打印
[CW32F003系列]

printf重定向之后无法运行

[复制链接]
769|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
钓鱼大师|  楼主 | 2025-5-5 15:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
参考 CW32F003_StandardPeripheralLib_V1.6\Examples\UART\UART_Printf  ,在代码中添加了#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)
#else
  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */


PUTCHAR_PROTOTYPE
{
  USART_SendData_8bit(DEBUG_USARTx, (uint8_t)ch);

  while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET);

  return ch;
}
在代码中添加printf之后进入调试模式点击RUN按钮是不能运行的。把print屏蔽之后就能运行。

使用特权

评论回复
评论
cooldog123pp 2025-5-7 09:56 回复TA
你看下你重定向的串口是不是你配置对应的那个? 
沙发
pssyx| | 2025-5-6 10:22 | 只看该作者
1、建议直接在CW32 MCU StartKit上运行Printf例程试试。
2、检查DEBUG_USARTx,以及各复用GPIO定义是否与实际硬件匹配?

使用特权

评论回复
板凳
钓鱼大师|  楼主 | 2025-5-6 10:29 | 只看该作者
pssyx 发表于 2025-5-6 10:22
1、建议直接在CW32 MCU StartKit上运行Printf例程试试。
2、检查DEBUG_USARTx,以及各复用GPIO定义是否与实 ...

我这边是自己做的板子,两个UART功能都是正常的。我原先用 USART_SendString(DEBUG_USARTx, str);
void USART_SendString(UART_TypeDef* USARTx, char *String)
{
  while(*String != '\0')
  {
    USART_SendData_8bit(USARTx, *String);
    while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);
    String++;
  }
  while(USART_GetFlagStatus(USARTx, USART_FLAG_TXBUSY) == SET);
}
发送字符串到电脑是正常的。说明硬件是没问题的。

使用特权

评论回复
地板
xionghaoyun| | 2025-5-7 09:20 | 只看该作者
你是不是没清除标志位?

使用特权

评论回复
5
钓鱼大师|  楼主 | 2025-5-7 18:03 | 只看该作者
xionghaoyun 发表于 2025-5-7 09:20
你是不是没清除标志位?

哪个标志位?

使用特权

评论回复
6
powerantone| | 2025-5-13 10:10 | 只看该作者
堆栈溢出或内存不足?

使用特权

评论回复
7
stormwind123| | 2025-5-13 10:11 | 只看该作者
中断冲突或优先级问题?

使用特权

评论回复
8
probedog| | 2025-5-13 14:00 | 只看该作者
关闭不必要的中断。

使用特权

评论回复
9
probedog| | 2025-5-13 18:00 | 只看该作者
查看编译日志。

使用特权

评论回复
10
classroom| | 2025-5-13 19:00 | 只看该作者
用轻量级输出函数。

使用特权

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

本版积分规则

63

主题

284

帖子

0

粉丝