英飞凌串口1只发不收

TLE9879QXA40,uart2收发没有问题,如下图

img

img


现在有个项目要用到两个串口,但是uart1我用像样的方法配置,只能发不能收

img

img


请各位瞅瞅,感激不尽

如果有可能,可以尝试连接另一个串口设备,看看是否仍然存在通信问题。这可以帮助确定是硬件问题还是软件问题。

可以先测一测设备有没有问题

先检查硬件,可以把正常的uart2收发接过来测试下,问题依旧的话再查软件问题

UART 接收过程中可能会发生缓冲区溢出,确保你的代码能够正确处理接收缓冲区的溢出情况

结合GPT给出回答如下请题主参考
首先,需要确认您的硬件连接是否正确。确保UART1的RX线和TX线正确连接,并且使用的电压和电平都符合TLE9879QXA40的规格要求。

如果硬件连接没有问题,那么可能是您的软件代码存在问题。以下是一些可能导致串口收发问题的常见问题和解决方法:

  1. 波特率设置错误。请确保在发送和接收数据之前,您已正确地设置了波特率,并且发送和接收方的波特率设置相同。

  2. 数据位、停止位、校验位设置错误。请确保在发送和接收数据之前,您已正确地设置了数据位、停止位和校验位,并且发送方和接收方的设置相同。

  3. 中断处理函数错误。如果您使用中断处理函数处理接收数据,那么请确认中断处理函数是否正确地读取了接收缓冲区中的数据,并且清除了接收中断标志位。

  4. 发送和接收缓冲区溢出。如果发送和接收缓冲区的容量不足以存储所有的数据,那么会发生缓冲区溢出。请确保您的缓冲区容量足够,并且在发送和接收数据时,仅将数据存储到缓冲区中。

您可以将您的代码贴出来,我们可以更具体地帮助您。

检查UART1的TXD、RXD、GND等连接是否正确,它们应该与对应的电路板引脚连接。
确保在配置UART1时设置的波特率与设备相匹配。检查在代码中设置的波特率是否正确。
确保在配置UART1时设置的校验位和停止位与设备相匹配。

检查UART1的TXD、RXD、GND等连接是否正确,它们应该与对应的电路板引脚连接。
确保在配置UART1时设置的波特率与设备相匹配。检查在代码中设置的波特率是否正确。
确保在配置UART1时设置的校验位和停止位与设备相匹配。

检查接收缓冲区是否正确配置和管理,如果接收缓冲区溢出,可能会导致无法接收数据

【相关推荐】



  • 这篇博客: 【串口发送中断】基于赛元单片机使用三合一串口的UART功能中的 中断服务函数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    /*************************************************************/
    /*函数名:uart1_isr
    /*输  入:无
    /*输  出:无
    /*功  能:串口1中断服务函数,以中断方式进行收发;
    /*************************************************************/
    void uart1_isr(void)	interrupt 7
    {
    	u8 temp_char = 0;
    	
    	if(SSCON0&0x02)    					//发送标志位判断
    	{
    		SSCON0 &= 0xFD;					//清中断
    
    		uart1_send_data();				//发送逻辑
    		
    	}
    	if((SSCON0&0x01))  					//接收标志位判断
    	{
    		SSCON0 &= 0xFE;					//清中断
    		
    		temp_char = SSDAT;
    		uart1_receive_data(temp_char);	//接收逻辑	
    	}
    }
    

    中断服务函数其实是很简洁的,这里不再介绍接收逻辑的编写,只说发送逻辑的函数,以中断方式发送数据的重点也在这里~


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

可以参考TLE9879 EvalKit V1.4用户手册


https://www.infineon.com/dgdl/Infineon-TLE987_Evalkit-UserManual-v01_04-EN.pdf?fileId=5546d4627762291e017781b13c2b36d2

参考gpt:
结合自己分析给你如下建议:
你的串口1的接收管脚是否正确连接了外部设备,或者是否有松动或断路的情况。你可以检查一下你的硬件连接是否稳定,或者更换一根新的数据线试试。
你的串口1的接收中断是否正确配置了,或者是否有被其他中断屏蔽或覆盖的情况。你可以检查一下你的中断服务函数,中断号,优先级等参数是否设置正确,或者是否有冲突或错误的情况。
你的串口1的接收缓冲区是否有足够的空间,或者是否有被其他程序占用或修改的情况。你可以检查一下你的缓冲区大小,地址,清空方式等参数是否合理,或者是否有溢出或乱码的情况。


/*************************************************************/
/*函数名:uart1_isr
/*输  入:无
/*输  出:无
/*功  能:串口1中断服务函数,以中断方式进行收发;
/*************************************************************/
void uart1_isr(void)    interrupt 7
{
    u8 temp_char = 0;
    
    if(SSCON0&0x02)                        //发送标志位判断
    {
        SSCON0 &= 0xFD;                    //清中断
        uart1_send_data();                //发送逻辑
        
    }
    if((SSCON0&0x01))                      //接收标志位判断
    {
        SSCON0 &= 0xFE;                    //清中断
        
        temp_char = SSDAT;
        uart1_receive_data(temp_char);    //接收逻辑    
    }
}

stm32f103c8t6 串口 usart1 只能发送不能接受得原因
1.RX引脚虚焊

2.串口接收使能没打开

3.如果要是采用中断接收,注意接收中断是否打开

4.如果采用定长的DMA接收,查看发送方发送的数据长度是否符合DMA设定的长度

5.如果采用空闲中断+DMA的方式,检查空闲中断是否打开,串口接收中断是否打开