树莓派和STM32通过USB通信

下面的方法是本人实测写的记录,感兴趣的小伙伴可以试试

1. 树莓派部分

1.1 查看串口号

通过 ls -l /dev/tty* #查看识别的串口号

1.2 树莓派的发送接收代码.

import serial
import time
# 这个代码也可用于多串口的测试,主要是更改/dev/ttyACM0 串口号
ser = serial.Serial(port="/dev/ttyACM0", baudrate=9600)
def main():
    while True:
        count = ser.inWaiting()
        if count != 0:
            print("-count = {0}".format(count))
            recv = ser.read(count)
            print("-recv = {0}".format(recv))
            # ser.write(recv)

        ser.flushInput()

        # time.sleep(0.1)
        # ser.write(b'str')
if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        if ser != None:
            ser.close()

2. STM32部分

2.1 CubeMX 配置

其实这部分就是stm32的usb的cdc配置,自行了解

2.2 发送代码

  # 这部分放在main函数中
  uint32_t cur_time, pre_time = 0;
  uint32_t count = 0;
  char buf[256];
  while (1)
  {
	cur_time = HAL_GetTick();
	if ((cur_time - pre_time) >=1000 ) 
	{
      pre_time = cur_time;
      int length = snprintf(buf, sizeof(buf)-1, "--%d--\r\n", count++);
      CDC_Transmit_FS((uint8_t*)buf, length);
    }
  }

2.3 接收代码

# 这部分在usbd_cdc.c文件里

uint8_t usbReceiveBuf[512];
uint16_t usbReceiveLen;

static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
{
  /* USER CODE BEGIN 6 */
	
  memcpy(usbReceiveBuf, Buf, *Len); # 将接收数据转存
  usbReceiveLen = *Len;
  CDC_Transmit_FS(Buf, *Len); # 将接收到的数据发回去
  USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
  USBD_CDC_ReceivePacket(&hUsbDeviceFS);
  return (USBD_OK);
  /* USER CODE END 6 */
}

3. 效果演示

树莓派这边发送的str字符串,stm32接收后返回,树莓接收并打印,将上述的代码发送注释打开即可

4. 资料获取

链接:百度网盘 请输入提取码 提取码:ttbo

欢迎大家指正交流^ 0 ^

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值