STM32
直播中

李华

7年用户 1343经验值
私信 关注
[问答]

为什么用串口3 printf打印输出会调试失败呢

为什么用串口3 printf打印输出会调试失败呢?是什么原因呢?如何去解决呢?

回帖(1)

张玉

2021-11-30 09:56:00
问题描述:
      今天调试串口,首先用串口1 printf打印输出,调试成功,在串口1成功的基础上,准备改用串口3 printf结果一直不成功。
串口没有一点反应。
解决过程:
        1.时钟问题 : USART1 和 USART3 挂接的时钟不同
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE); //使能USART1,GPIOA时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);//使能GPIOB,USART3
     2.重定向函数 参考正点原子USART1

//加入代码,支持printf函数。并且不需要选择use MicroLIB
#if 1
#pragma import(__use_no_semihosting)            
//标准库需要支持的函数            
struct __FILE
{
        int handle;

};

FILE __stdout;      
//定义_sys_exit()以避免使用半主机模式
_sys_exit(int x)
{
        x = x;
}
//重定义fputc函数
int fputc(int ch, FILE *f)
{      
        while((USART3->SR&0X40)==0);
    USART3->DR = (u8) ch;      
        return ch;
}
#endif          
   3.一般情况下初始化配置没出错,就可以使用printf打印输出了
            4.本人在1和2都没有问题的情况下,串口调试助手还没有输出,最后检查发现问题是线接错了  

           之前一直使用的USAT1,STM32开发板可以使用u***线和PC通信,换成USART3之后就需要使用PB11和PB10与PC通信,USART3与COM3 在开发板上应该是用跳线帽短接的,所以可以通过USB转串口线进行两者之间的通信,或者去掉跳线帽使用USB转TTL直接接上PB11和PB10.
          5.实际今天遇到的问题是比较简单的,只是自己疏忽了,写出来提醒一下大家

举报

更多回帖

发帖
×
20
完善资料,
赚取积分