USB虚拟串口移植————基于STM32标准库 & FreeRTOS_tinyusb freertos

在初始化的 .c 文件中,包含如下的头文件:

it's easy
在调用USB收发功能的 .c 文件中,使用 #include “usbd_usr.h”


  1. 初始化

添加USB初始化函数,如下图:
start_task.c

注意事项:

  1. 声明变量USB_OTG_dev后再初始化
  2. 因为旧版开发版的CAN1占用了PA11和PA12(使用USB虚拟串口必要的两个IO),因此需要将CAN1重新分配到其他引脚,如PB8和PB9
  3. 为了确保声明成功,请尽量将USB的初始化函数放到串口(USART)和CAN的声明后面

  1. 编写接收函数

我们需要将LED4作为USB连接状态的指示灯,方便调试时查看

请添加图片描述

该函数的下半是数据校验解包部分,包含了crc8校验,若不需要,可自行删除

对于 喂狗 行为,放在了确定收到正确报文后,以保证运行正常

bDeviceState 被调用在 usbd_usr.c

请添加图片描述

printf调用了串口1的putc函数,因此最好先初始化USART1

祖传程序中,LED4用作错误次数指示,用处不大,在 detect.task.c 将其禁用,避免影响对连接状态的查看

这些都是回调函数,debug时打断点也是不会停的,所以LED指示工作状态是有必要的


  1. 改写接收回调函数

请添加图片描述

整体上和串口接收没什么区别,这里只有帧头帧尾校验,没用到crc8,如有需要请自行添加

其中调用了宏 MINIPC_FRAME_LENGTH ,需要在对应的头文件中声明:

e.g. #define MINIPC_FRAME_LENGTH 14u //与视觉约定的包长度

  1. 改写接收函数

请添加图片描述

使用USB库封装的VCP_DataTx()函数,通过USB虚拟虚拟串口向上位机发送数据

VCP_DataTx()内调用了宏APP_RX_DATA_SIZE,用于控制发送缓冲区的大小

还有一个函数usb_printf(),也可以一次性发送一整个包,但是这里用Send_to_PC()取代了该函数,暂不调用usb_printf()

实际效果

  1. 视觉那边不需要再选择波特率,但是识别出的端口从ttyUSBx变成了ttyACMx,需要在open文件时修改名称

附视觉代码(我改的粗糙代码,至少通信上了,如有不满,轻喷):

粗糙的代码

尚未实现热插拔,需要加其他库

可能存在 sudo 能打开文件,但是程序里的 open 函数不行的问题:

通常是没有USB通信文件的权限,需要取得rwx全部权限

  1. 不再需要外围芯片,也可能不需要接线,从STM32的IO连一根USB线,直连miniPC,减少干扰因素

需要修改硬件电路:

将CAN1接到PB8和PB9,将PC11和PC12接到USB口

Warning:USB的差分信号需要阻抗匹配!

  1. 从串行信号变为差分信号,信号抗干扰能力提升
  2. 通信频率极大提高
  3. 现在的云台没有放USB接线的空间,后面需要留出

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值