当前位置:   article > 正文

树莓派和STM32通过USB通信_stm32如果正确获取树莓派serial库发过来的信息

stm32如果正确获取树莓派serial库发过来的信息

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

1. 树莓派部分

1.1 查看串口号

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

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

  1. import serial
  2. import time
  3. # 这个代码也可用于多串口的测试,主要是更改/dev/ttyACM0 串口号
  4. ser = serial.Serial(port="/dev/ttyACM0", baudrate=9600)
  5. def main():
  6. while True:
  7. count = ser.inWaiting()
  8. if count != 0:
  9. print("-count = {0}".format(count))
  10. recv = ser.read(count)
  11. print("-recv = {0}".format(recv))
  12. # ser.write(recv)
  13. ser.flushInput()
  14. # time.sleep(0.1)
  15. # ser.write(b'str')
  16. if __name__ == '__main__':
  17. try:
  18. main()
  19. except KeyboardInterrupt:
  20. if ser != None:
  21. ser.close()

2. STM32部分

2.1 CubeMX 配置

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

2.2 发送代码

  1. # 这部分放在main函数中
  2. uint32_t cur_time, pre_time = 0;
  3. uint32_t count = 0;
  4. char buf[256];
  5. while (1)
  6. {
  7. cur_time = HAL_GetTick();
  8. if ((cur_time - pre_time) >=1000 )
  9. {
  10. pre_time = cur_time;
  11. int length = snprintf(buf, sizeof(buf)-1, "--%d--\r\n", count++);
  12. CDC_Transmit_FS((uint8_t*)buf, length);
  13. }
  14. }

2.3 接收代码

  1. # 这部分在usbd_cdc.c文件里
  2. uint8_t usbReceiveBuf[512];
  3. uint16_t usbReceiveLen;
  4. static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
  5. {
  6. /* USER CODE BEGIN 6 */
  7. memcpy(usbReceiveBuf, Buf, *Len); # 将接收数据转存
  8. usbReceiveLen = *Len;
  9. CDC_Transmit_FS(Buf, *Len); # 将接收到的数据发回去
  10. USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
  11. USBD_CDC_ReceivePacket(&hUsbDeviceFS);
  12. return (USBD_OK);
  13. /* USER CODE END 6 */
  14. }

3. 效果演示

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

4. 资料获取

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

欢迎大家指正交流^ 0 ^

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/689145
推荐阅读
相关标签
  

闽ICP备14008679号