钓鱼大师 发表于 2025-5-5 15:31

printf重定向之后无法运行

参考 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屏蔽之后就能运行。

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

你是不是没清除标志位?

钓鱼大师 发表于 2025-5-7 18:03

xionghaoyun 发表于 2025-5-7 09:20
你是不是没清除标志位?

哪个标志位?

powerantone 发表于 2025-5-13 10:10

堆栈溢出或内存不足?

stormwind123 发表于 2025-5-13 10:11

中断冲突或优先级问题?

probedog 发表于 2025-5-13 14:00

关闭不必要的中断。

probedog 发表于 2025-5-13 18:00

查看编译日志。

classroom 发表于 2025-5-13 19:00

用轻量级输出函数。
页: [1]
查看完整版本: printf重定向之后无法运行