python Jetson tx2和 stm32之间的通信(16进制和10进制的转换,包括负数),BCC校验(异或)运算

  1. tx2接收16进制数据【含16进制转化为10进制,负数怎么表示】
    ①我发现tx2接收stm32的16进制的数据,不能达到我想要的效果。并且16进制数还会转换成ASCLL码的字符。如下图:
    tx2接收stm32的数据

    通过如下操作可以获得字符串型的数据,如下图。

    import binascii
    import serial
    car_control = serial.Serial('/dev/ttyCH343USB0',115200,timeout = 5)
    if (car_control.is_open):
    	data=str(binascii.b2a_hex(car_control.read(24)))[2:-1]  # 16进制变成字符串,car_control.read(24)中的“4”为读取的数据长度,一个数据长度为2个16进制的数
    

    在这里插入图片描述
    ②由于我在stm32设定了补码为负值,可以通过一下代码来将16进制的字符串转换为10进制的int类型np.short(int(data[数:数],16)),这里需要用到numpy做个short类型转换,才能表示出负数

  2. tx2发16进制数据给stm32【数据可包含帧头、桢尾、BCC校验位、控制数据(含负数即反方向移动)】

    def send_data(x,y,z): #直接填10进制的数,会转换成16进制的数据,然后直接发送即可
    	res=None
    	#这里我规定了x,y,z为2个字节的数据(即4个16进制的数据),需要用到zfill()来补齐数据
    	if x>=0:
        	x = hex(x)[2:].zfill(4) #hex[2:]表示不要了0x,只要0x后面的数,zfill()是左端补齐4位的意思
    	else:
        	x= 65535+x #相当于取补码
        	x = hex(x)[2:].zfill(4)
    
    	if y>=0:
        	y = hex(y)[2:].zfill(4)
    	else:
        	y = 65535+y #相当于取补码
        	y = hex(y)[2:].zfill(4)
    
    	if z>=0:
        	z = hex(z)[2:].zfill(4)
    	else:
        	z = 65535+z #相当于取补码
        	z = hex(z)[2:].zfill(4)
    	data = "7b0000{0}{1}{2}007d".format(x,y,z)#数据间不能有空格,不然下面的bcc校验数据会出错。(数据可以自行拟定)
    	
    	#取前面9个字节(18个16进制数)来进行BCC校验运算(tx2和stm32的BCC校验运算需要一致),得到BCC校验位,来验证数据传输是否出错
    	for i in range(0,18,2): #步长是2,两个16进制组成一个字节
        	hex_str = int(data[i:i+2],16) #将16进制转化成了10进制
        	if i:
            	res ^= hex_str     # ^异或运算符号
        	else:
            	res = hex_str^0
    	res = hex(res)[2:].zfill(2) #res为校验码(可用来和stm32通过接收到的数据运算得到的bcc校验数据进行比对来验证数据传输是否出错),因为在数据格式中,我规定了这里的校验码为1个字节,所以只需要zfill(2)补齐2位
    	data = "7b0000{0}{1}{2}{3}7d".format(x, y, z,res) #数据格式可自行拟定
    	print("发送的数据:{}".format(data))
    	#print(bytes.fromhex(data))
    	return bytes.fromhex(data)
    

欢迎提出疑问和交流哈哈,要是对你有用的话就点个赞吧!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Jetson Nano 和 STM32 之间可以通过串口通信STM32 作为串口通信的接收端,可以接收来自 Jetson Nano 发送的数据。反之,Jetson Nano 也可以作为串口通信的发送端,接收来自 STM32 发送的数据。在行串口通信之前,需要在两个设备上配置好波特率、数据位、停止位等参数,保证两设备之间能够正常通信。 ### 回答2: Jetson Nano和STM32是两种不同类型的芯片,分别属于嵌入式系统和微控器领域。同样,串口通信是一种常见的通信方式,通常用于实现不同系统之间的数据传输。因此,Jetson Nano和STM32在串口通信方面的结合具有实际的应用价值。 在实现Jetson Nano和STM32的串口通信之前,需要定义好端口参数,例如波特率、校验位等设置。Jeston Nano的串口通信接口为UART,而STM32则需要使用USART接口。在搭建通信环境之前,需要编写好各自的程序,并在程序中行相应的串口初始化配置。 当两个系统的串口接口准备好以后,可以开始行数据的传输。在传输数据过程中,需要确保数据包的完整性和正确性,因此可以在传输头部添加校验码等检查机,确保数据的正确性。一般来说,可以采用DMA(直接内存访问)方式行数据传输,提高传输效率。 总之,Jetson Nano和STM32可以通过串口通信实现数据传输,同时也能够结合相应的传感器和执行器行控和反馈操作。在实际应用中,这种串口通信方式被广泛地应用于机器人控、智能家居等领域。 ### 回答3: Jetson Nano是一个网络边缘计算平台,支持针对GPU行开发的AI应用程序。STM32是一种微控器,可以用于控各种电子设备。 串口通信是一种将数据通过串行通信行传输的方式。在Jetson Nano和STM32之间建立串口通信通道需要以下步骤: 1. 首先,需要确定Jetson Nano和STM32之间的连接方式。通常使用USB和TTL串口转接器将两个设备连接起来。 2. 在Jetson Nano上安装串口通信软件。Jetson Nano使用Linux操作系统,因此可以使用常见的串口通信软件如Minicom或Screen等。 3. 在STM32上编写串口通信程序。 STM32有多个串口接口,可以使用其中的一个来建立和Jetson Nano之间通信通道。 4. 在Jetson Nano上编写串口数据接收程序。要接收STM32发送的数据,需要使用例如C或Python等编程语言来编写接收程序。 5. 测试和调试。一旦通信通道建立,可以通过发送各种类型的数据来测试通信通道,也可以通过调试程序来排除任何问题。 总的来说,Jetson Nano和STM32之间的串口通信是一个相对简单的过程,只需要正确安装通信软件和编写程序即可。但是需要同时掌握两个设备的知识,因此可能需要耗费一定的时间和精力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值