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
    评论
### 回答1: STM32F407是一款基于ARM Cortex-M4内核的微控制器,而FreeRTOS是一种常用的开源实时操作系统。Tracealyzer是一款用于可视化系统的实时调试和性能分析工具。STM32F407_FreeRTOS_Tracealyzer是指将Tracealyzer工具应用于STM32F407微控制器上运行的FreeRTOS操作系统的调试和性能分析。 使用STM32F407_FreeRTOS_Tracealyzer可以方便地跟踪系统中的任务、中断、时间以及资源使用情况。该工具通过可视化的方式展示系统中各个任务的执行顺序、任务的延迟时间、等待时间以及任务之间的通信与同步关系。通过观察Tracealyzer的结果,可以更好地理解系统的调度策略和任务间的相互影响。 此外,STM32F407_FreeRTOS_Tracealyzer还能够帮助分析系统中的事件和中断响应情况。它可以以图表或时间轴的形式展示系统中各个中断的触发时间和持续时间,从而帮助开发者更好地优化中断处理流程。 除了任务和中断分析外,STM32F407_FreeRTOS_Tracealyzer还提供了内存使用情况、资源使用情况和CPU利用率等性能分析功能。开发者可以通过Tracealyzer工具查看系统中各个任务的内存占用和栈使用情况,进而优化系统的资源分配。通过分析CPU利用率,开发者还可以找出存在的性能瓶颈,并进行相应的优化措施。 综上所述,STM32F407_FreeRTOS_Tracealyzer是一款强大的系统调试和性能分析工具,可用于STM32F407微控制器上运行的FreeRTOS操作系统。它通过可视化界面提供了对任务、中断、时间、资源使用以及CPU利用率等方面的分析,帮助开发者更好地了解和优化系统的运行情况。 ### 回答2: STM32F407是一款由STMicroelectronics开发的高性能32位微控制器,而FreeRTOS是一种流行的开源实时操作系统。Tracealyzer是一种用于调试和性能分析的工具,可以用于在嵌入式应用程序中跟踪任务、中断和事件的执行顺序和时间。 STM32F407与FreeRTOS的结合可以提供强大的实时任务管理和调度功能,通过使用RTOS内核和多任务特性,可以有效地管理多个任务并提供实时响应。任务可以根据其优先级和时间要求来进行调度,从而可以轻松实现复杂的并行处理和多任务应用。 Tracealyzer为开发人员提供了一个详细的视图,以实时监视和分析系统中的任务、中断和事件。工具可以生成时间线图,显示任务的活动周期,识别任务之间的依赖关系和延迟,并通过图形界面提供高级分析功能。这对于调试和优化嵌入式应用程序非常有帮助,特别是在处理实时和多任务问题时。 通过使用STM32F407、FreeRTOS和Tracealyzer,开发人员可以更轻松地开发复杂的实时应用程序。STM32F407的高性能和丰富的硬件资源与FreeRTOS的实时任务管理和调度功能相结合,为应用程序提供了灵活性和可靠性。Tracealyzer工具的使用可以帮助开发人员更好地理解系统的运行情况,并进行调试和性能优化。这种组合为嵌入式应用程序开发带来了更高的效率和质量。 ### 回答3: stm32f407是一款基于ARM的微控制器,而FreeRTOS是一个流行的开源实时操作系统。Tracealyzer是一款用于可视化系统行为、调度器行为和中断分析的软件工具。 stm32f407_freertos_tracealyzer是指将Tracealyzer应用于stm32f407和FreeRTOS的组合。通过使用Tracealyzer,我们可以以图形化的方式分析和调试stm32f407微控制器上基于FreeRTOS的应用程序。 stm32f407的主要任务是将系统中的各个任务按照优先级进行调度,并管理系统资源的分配和释放。而FreeRTOSstm32f407提供了实时任务调度、信号量、队列、事件和内存管理等功能,以便更方便地编写和管理多任务应用程序。 Tracealyzer 利用实时跟踪技术,能够捕获系统中各个任务的执行情况、任务之间的通信以及中断的发生情况。它将这些数据以直观的方式显示出来,帮助开发人员更好地理解系统的运行状况以及发现潜在的问题。 通过stm32f407_freertos_tracealyzer,我们可以实时监测系统中任务的执行情况,包括任务的创建、运行和挂起等状态。我们还可以查看任务之间的通信,例如通过队列和信号量进行的数据交换。此外,我们还可以收集和分析中断的发生情况,以便更好地优化系统性能。 总之,stm32f407_freertos_tracealyzer是一种强大的工具,可以帮助开发人员深入了解基于stm32f407的FreeRTOS应用程序的运行状况,发现潜在的问题,从而提高系统的可靠性和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值