【旭日x3派、stm32】串口通信

本文介绍了如何在旭日x3派和STM32之间通过串口进行通信,包括应用场景、硬件连接、Python代码示例(接收和发送数据)以及注意事项,如波特率设置、数据格式和错误排查。
摘要由CSDN通过智能技术生成

旭日x3派与STM32使用串口进行通信

应用场景

视觉小车:
旭日x3派专注于视觉任务,可以部署yolo系列算法,小车底盘的PID控制可以放在STM32上进行,通过串口x3派可以接收stm32上传的速度信息、位姿信息等,也可以下发速度、转向等控制来控制小车运动轨迹。

准备

硬件:
旭日x3派
type-c供电线
16GB以上SD卡
0.96寸oled液晶屏
STM32f103c8t6
ST-Link/J-Link烧录器
软件:
x3派烧录ubantu20.04桌面版的镜像
江协科技stm32例程
x3派最好先进行串口的回环测试:https://developer.horizon.cc/documents_rdk/python_development/40pin_user_guide/uart
在这里插入图片描述

代码

x3派:
①接收

#!/usr/bin/env python3

import sys
import signal
import os
import time

# 瀵煎叆python涓插彛搴?
import serial
import serial.tools.list_ports

def serialTest():
    print("List of enabled UART:")
    os.system('ls /dev/tty[a-zA-Z]*')
    try:
        ser = serial.Serial("/dev/ttyS3", int(9600), timeout=1) # 1s timeout
    except Exception as e:
        print("!\n")
        return 1

    print(ser)

    try:
        while True:
            # Read data from STM32
            received_data = ser.readline().decode('ascii').strip()
            if received_data:
                print("接收到的数据 ",received_data )

            time.sleep(1)

    except KeyboardInterrupt:
        pass
    finally:
        ser.close()

    return 0

if __name__ == '__main__':
    if serialTest() != 0:
        print("!")
    else:
        print("!")

②发送

#!/usr/bin/env python3

import sys
import os
import time

import serial
import serial.tools.list_ports

class SerialSender:
    def __init__(self, port, baudrate=9600):
        self.ser = serial.Serial(port, baudrate)

    def send_data(self, data):
        try:
            # 将数据转换为十六进制字符串并发送
            hex_data = ' '.join(format(val, '02X') for val in data)
            self.ser.write(bytes.fromhex(hex_data))
            print(f"Sent data in hex: {hex_data}")
        except Exception as e:
            print(f"Error during sending data: {e}")

    def close_serial(self):
        self.ser.close()


if __name__ == '__main__':
    # 请根据实际情况修改串口号
    sender = SerialSender("/dev/ttyS3", 9600)

    try:
        # 示例数据,根据实际需求修改
        data_to_send = [0x02]
        sender.send_data(data_to_send)

    except KeyboardInterrupt:
        pass
    finally:
        sender.close_serial()





STM32:
接收和发送的代码直接使用江协科技的例程:
在这里插入图片描述
①发送:
在这里插入图片描述
②接收:
在这里插入图片描述

效果

①stm32向x3派发送数据:
在这里插入图片描述
②x3派向STM32发送数据:
在这里插入图片描述

注意事项

①代码编写:不知道为什么不用记事本写就会报错,应该保存的文件格式需要是utf-8格式的。
②x3派发送数据时最好是16进制格式发送,不然容易数据紊乱和报错
③波特率都是9600

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值