jetson nano和stm32通讯出现问题

jetson nano 和 Stm32 通信发生问题,发送数据过去,然后再接受数据就接受不到,但是如果把jetson nano和电脑连接起来在用xcom串口通信助手单独发数据就可以。但是如果把jetson nano和stm32连接起来再由nano发送数据过去,stm32接收到数据以后,再发送数据给nano,jetson nano就接受不到。请问这是什么问题勒??

if(USART_RX_BUF[0]=='s')
     {
        if(USART_RX_STA>4)  
         {      
          
         D_data=10*(chrtodec(USART_RX_BUF[1]))+chrtodec(USART_RX_BUF[2])+0.1*chrtodec(USART_RX_BUF[3])+0.01*chrtodec(USART_RX_BUF[4]);
         delay_ms(10);
         Distance_buff[Distance_p++]=D_data;
         
        //delay_ms(10000);
        delay_ms(3000);
        while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET)
         ;
         USART_SendData(USART1,'g');
        ads=USART_GetFlagStatus(USART1, USART_FLAG_TXE);
         while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
        memset(USART_RX_BUF,0,sizeof USART_RX_BUF); 
        USART_RX_STA=0;  
         }

以上是stm32接受和发送的代码,接收到“s”就发送“g“

import serial
import time
ser = serial.Serial(port="/dev/ttyTHS1",
                    baudrate=115200,
                    bytesize=serial.EIGHTBITS,
                    parity=serial.PARITY_NONE,
                    stopbits=serial.STOPBITS_ONE, )


def port_num(num):
    number_str = str(int(num * 100))  # 先将浮点数乘以100并取整,然后转换为字符串
    number_output = number_str.zfill(4)  # 在字符串左侧填充零到总宽度为4
    return  number_output


def port_communication(angle_start_j,angle_end_j,width_real ):
    str_start_angle = port_num(angle_start_j)
    str_end_angle = port_num(angle_end_j)
    str_width_real = port_num(width_real)
    # 创建串口对象
    ser.write(('j' + str_start_angle).encode())
    ser.write(('j' + str_end_angle).encode())
    ser.write(('s' + str_width_real).encode())
    print(type('j' + str_start_angle))
    print('j' + str_end_angle)
    print('s' + str_width_real)


def interrupt():
    while True:
        print(1)
        time.sleep(1)
        if ser.in_waiting > 0:
            data = ser.read()
            data_str = 'g'
            print("Received:", data)
            if data == data_str.encode('utf-8'):
                break

我们用的是yolov5,总体思路是执行前半部分代码,然后检测到了我们要的东西,发送”s“给32,yolov5进入循环不再检测,然后32进行操作,操作完了发”g“给我们,在yolov5中调用interrupt,如果接受到”g“就跳出循环,执行后面的代码,但是现在问题是我们可以发送”s“过去,但是接到不到”g“,但是如果用电脑单独发或者32断点发送就可以,自动就不行,请教一下大家这是什么问题?

【以下回答由 GPT 生成】

回答:

问题是jetson nano和stm32通信时,jetson nano无法接收stm32返回的数据。通过观察给出的代码,我发现可能存在一些问题。首先,stm32发送给jetson nano的数据在循环结束之后才被接收和处理,可能导致接收的数据不完整或丢失。其次,可能存在与串口配置相关的问题。

为了解决这个问题,我建议采取以下步骤:

  1. 确认stm32和jetson nano之间的连接方式和物理连接正常。确保连接的线路、引脚和串口配置正确。特别注意检查波特率、数据位、停止位和校验位等参数。

  2. 在jetson nano上,使用Python编写一个接收程序。这样可以确保数据的完整接收,并且可以更好地处理和分析数据。下面是一个简单的示例代码:

import serial

ser = serial.Serial('/dev/ttyUSB0', 9600)  # 请根据实际情况修改串口号和波特率

while True:
    data = ser.readline().decode().strip()
    if len(data) > 0:
        print("接收到的数据:", data)
  1. 在stm32上,修改代码以确保发送的数据以正确的格式发送,并且在发送之后立即处理接收的数据。此外,使用适当的延迟以确保数据传输的稳定性。下面是修改后的示例代码:
if(USART_RX_BUF[0] == 's')
{
    if(USART_RX_STA > 4)  
    {
        D_data = 10 * (chrtodec(USART_RX_BUF[1])) + chrtodec(USART_RX_BUF[2]) + 0.1 * chrtodec(USART_RX_BUF[3]) + 0.01 * chrtodec(USART_RX_BUF[4]);
        delay_ms(10);
        Distance_buff[Distance_p++] = D_data;

        // 在发送数据之前清空缓冲区
        memset(USART_RX_BUF, 0, sizeof(USART_RX_BUF)); 
        USART_RX_STA = 0; 

        // 发送数据并立即处理接收到的数据
        USART_SendData(USART1, 'g');
        while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
        while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
        delay_ms(10);
        data = USART_ReceiveData(USART1);  // 接收返回的数据
        // 对接收到的数据进行处理

        // 处理完成之后继续接收下一条命令
        memset(USART_RX_BUF, 0, sizeof(USART_RX_BUF)); 
        USART_RX_STA = 0; 
    }
}
  1. 如果以上步骤不能解决问题,请确保其他设备或环境因素没有干扰通信。例如,可以尝试在不同的串口或不同的机器上进行通信。

如果你有关于连接方式、串口配置、其他代码或背景信息的更多细节,请提供他们,以便我能提供更准确和具体的解决方案。


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