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的数据在循环结束之后才被接收和处理,可能导致接收的数据不完整或丢失。其次,可能存在与串口配置相关的问题。
为了解决这个问题,我建议采取以下步骤:
确认stm32和jetson nano之间的连接方式和物理连接正常。确保连接的线路、引脚和串口配置正确。特别注意检查波特率、数据位、停止位和校验位等参数。
在jetson nano上,使用Python编写一个接收程序。这样可以确保数据的完整接收,并且可以更好地处理和分析数据。下面是一个简单的示例代码:
import serial
ser = serial.Serial('/dev/ttyUSB0', 9600) # 请根据实际情况修改串口号和波特率
while True:
data = ser.readline().decode().strip()
if len(data) > 0:
print("接收到的数据:", data)
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;
}
}
如果你有关于连接方式、串口配置、其他代码或背景信息的更多细节,请提供他们,以便我能提供更准确和具体的解决方案。