串口打印重定向卡死

场景:

串口1串口3加入DMA后将重定向至串口1的printf重定向到串口3


问题描述

重定向是串口1时,程序正常,将打印重定向至串口3后,启动程序,单片机直接卡死,仿真调试时会卡死fputc中,USART->SR寄存器一直为0

int fputc(int ch, FILE *f)
{
    while((USART3->SR & 0X40) == 0); //卡死在这
    USART3->DR = (u8) ch;
    return ch;
}


原因分析:

最开始分析是串口3的DMA没有配置好,查阅相关类似问题有串口的时钟树配置错误。


解决方案:

1.DMA配置检查,在不重定向打印时直接使用USART_SendData(USART3,0x03)来查看串口信息打印,是正常的,DMA配置正确。
2.时钟树检查也是正确的。
3.最后的检查是在串口初始化之前执行了打印,导致程序卡死了。情况类似于原因里面的第二种,排查浪费了一些不必要的时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值