背景介绍:
关于“虚拟串口” Sugar 发过一篇《RT-Thread 使用 CubeMX 的 VCP(虚拟串口)》
《软件架构训练计划》选择 CubeMX 生成代码和 RT-Thread 内核及设备代码的原因是:给小白铺路,减小“多层次”学习内容给新人带来的压力。
按 《怎样掌握 RT-Thread(RTOS 该怎么学)》中所述,训练选择 CubeMX 生成代码和 RT-Thread 代码结合,一个目的是:在了解 RT-Thread 的同时补好裸机编程的基础。
然而,训练归训练,真正做代码 Sugar 还是追求代码统一的。最终 Sugar 开源的训练代码会越来越靠近 RT-Thread,并且未来目标是带读者回归 RT-Thread 大集体中去。
虚拟串口是 Sugar 特别常用的调试手段,先从这个功能的代码级移植开始迈出回归 RT-Thread 的第一步。

虚拟串口的几个重要文件

usb_common.h、usb_device.h、ringbuffer.h
ringbuffer.c、core.c、usbdevice.c、cdc_vcom.c

未来 Sugar 会把 Git 的 Log 记录做成一本“活”的参考书,不会使用 Git 的读者可以在 MultiMCU EDU 公众号内回复 git 得到 Sugar 录的教学视频。

本篇代码的 github 地址是:https://github.com/code-structure-train/pandora_vcom

一、加入编译的文件

二、RTT新加入的文件(来自 RT-Thread 官方 master 源码)

三、CubeMX 生成的裸机代码有哪些改动

代码级移植有啥好处

写软件最基本的两件事:一、写代码;二、代码文件。
当想到“这个软件究竟是怎么回事儿”这个问题的时候,要直接回到最基本的两个点上去找答案。

一、对学习的好处:
1、明确目标功能的代码;
2、熟悉 RT-Thread 代码文件,能够体会“分”得好而产生的“管理”的美;
3、锻炼读代码能力,从优秀代码中学到优秀架构的实现方法(要“悟”才能收获)。二、对产品的好处:
1、明确 RT-Thread 目标功能代码,是将目标功能整合进自己产品的第一步;
2、对于中小型项目,往往几个文件就可以搞定一个功能,省去配置 Kconfig 和 Scons 的麻烦。

项目代码管理

中小型项目:一颜一心。
中大型项目:一颜多心。

一、中小型
小型、部分中型项目通常不轻易换硬件平台,因此叫“一心”。软件项目核心是代码,STM32 硬件平台在当下完全可以做到:只维护代码,不维护项目工程。对于小型、中型项目,Sugar 自己使用 project-generator 来维护软件,因此其自动生成工程的依赖文件(yaml 配置文件)就是代码管理的“一颜”。
本文第一张图就是 yaml 文件的对比,一眼看出工程所需的全部文件和文件位置。二、中大型
部分中型、大型项目很多都是要适配多种平台的,以 RT-Thread 为例,其除了 STM32 之外还支持很多其他硬件平台,因此叫“多心”。这种情况下想让在不同平台上使用相同习惯管理代码,就会复杂很多。官方使用的 env 环境就是借助了 KConfig 和 Scons,相应的配置文件分布在代码当中。
env 的 menuconfig 就是被统一好的“一颜”,通过简单的配置就可以操控大型项目,用着爽。

Sugar 给小白的 RTT 入门之路

只提要点,详细内容单独推文。

一、基本原则:
1、从中小型项目入手,集中精力搞懂代码(包括 RTT 内核、设备驱动和代码管理)。
2、使用 project-generator 进行项目管理,项目管理配置文件独立,不分散在代码里,对初学者非常友好(刚刚学习,不要分心去搞 KConfig 和 Scons)。
二、做了哪些:
1、《软件架构训练计划》
2、开源基于 RT-Thread 的麦轮车项目。该项目用最简单易学的算法、最简单易学的架构将编程的三大部分(逻辑、算法、参数)从功能上统一起来,同时在代码管理(功能设计和文件管理)上独立分离。

PS

现在好的开源项目太多了,Sugar 认为下一个时代值得探索的方向之一是:如何让初学者能快速接入优秀的开源项目。
当下大部分开源项目对初学者来讲都不算太友好:不是代码多就是算法难,又或者是层次高。也正是因为“多”、“难”和“复杂”才突显了对优秀架构思想的需求。但是优秀的架构思想不仅仅是为“多”、“难”和“复杂”服务的,好思想对简单项目也适用。Sugar 在 github 贡献融入优秀思想的简单项目,目的是:让小白先长“老鸟”的心,减少积累“量变”的时间,推进“质变”速度。

对于 Sugar 的在线一对一付费辅导,详情见公众号“关于我”页面。这里 Sugar 补充几点:
1、每个付费学员最多提供累积 6 小时的入门辅导(目前大部分是选 3 个 2 小时这样的搭配)。
2、再次强调有关推文内容的问题推荐在 github 上写 issue,开放平台更容易获得答案。
3、微信加好友问问题的,请多打几个字说清楚问题(只甩 Sugar 一个截图啥也不说,Sugar 一脸蒙圈回答不了)。

Sugar 鼓励大家要有探索精神,自主学习提高。

关注作者

欢迎扫码关注我的公众号MultiMCU EDU

提示:在公众号“关于我”页面可加作者微信好友。

喜欢本文求点赞,有打赏我会更有动力。

stm32 usb 虚拟串口 相同_RTThread STM32 虚拟串口代码级移植相关推荐

  1. STM32 USB相关知识扫盲

    STM32 USB相关知识扫盲 目录 STM32 USB相关知识扫盲 1.基础知识 2.电气属性 2.1 数据线 2.2 USB主机是如何识别设备是高速设备/全速设备/低速设备? 3.USB设备分类 ...

  2. STM32 USB使用记录:使用CDC类虚拟串口(VCP)进行通讯

    文章目录 目的 基础说明 使用STM32CubeIDE配置生成代码 用户代码分析 回环测试 串口参数设置 USB HS使用与演示 通讯速率测试 测试代码 USB FS测试 USB HS测试 影响速度的 ...

  3. STM32 USB虚拟串口收发任意长度字节例程

    STM32 USB虚拟串口收发任意长度字节例程 创建STM32 CubeMX工程 代码修改 收发任意长度测试 创建STM32 CubeMX工程 基于STM32 CubeMX进行开发,使用USB的高速模 ...

  4. STM32 USB CDC 虚拟多串口

    转自: http://www.stmcu.org.cn/module/forum/thread-613510-1-1.html 楼主  发表于 2017-9-28 22:30:04 | 只看该作者 | ...

  5. [原创] STM32 USB CDC 虚拟多串口

        creep 该用户从未签到 61 主题 1995 帖子 26 蝴蝶豆 版主 最后登录 2018-10-19 发消息 电梯直达 楼主  发表于 2017-9-28 22:30:04 | 只看该作 ...

  6. stm32 USB HID+CDC 鼠标键盘串口 组合设备配置解析

    前言 查阅网上的博客与代码,很多都是关于USB的鼠标配置.USB的键盘配置.USB的虚拟串口配置,稍微深入一点的会将鼠标键盘合在一起,但移植起来就会报很多错误,要么是检测不到,要么是警告,这很正常,因 ...

  7. STM32Cube MX USB双设备MSC+CDC 实现虚拟U盘+虚拟串口

    前言 在上一篇文章实现USB虚拟U盘之后,项目需要用同一个USB口同时实现MSC和CDC功能,既能进行串口通信又能读取片外FLASH虚拟U盘.对于USB通用串行总线如果要真正搞明白这个协议还是比较困难 ...

  8. STM32 USB VCOM和HID的区别,配置及Echo功能实现(HAL)

    STM32 USB VCOM和HID的区别,配置及Echo功能实现(HAL ) STM32的USB功能模块可以配置为虚拟串口(VCOM: Visual Port Com)或人机交互设备(HID: Hu ...

  9. ch340串口驱动_如何使用串口来给STM32下载程序

    前言 第一次学习STM32的时候,不知道有调试器这个东西,所以一直是通过串口来给STM32下载程序,下载速度也还算可以,一般是几秒钟完成.后来用了调试器,可以直接在Keil环境下进行下载,而且还可以进 ...

最新文章

  1. javascript读取XML文档
  2. C语言网络编程:socket函数
  3. 人工智能:技术本无罪,善恶在人心
  4. 【心灵鸡汤】高情商者的15个表现
  5. java实现ftp文件的上传与下载
  6. 基于numpy的多项式拟合预测人口数值
  7. gRPC官方快速上手学习笔记(c#版)
  8. Kali渗透测试——netdiscover
  9. 邮件服务器最常见的安全问题及解决办法
  10. 强化学习三、策略迭代与值迭代
  11. 2022年3月搜索引擎市场份额排行榜
  12. windows桌面待办事项_苹果iPhone手机上有什么好用的管理待办事项的桌面便签软件吗?...
  13. 64位系统编译32位程序报错
  14. java编写爬虫_手把手教你从零开始用Java写爬虫
  15. 写作论文文献导入方法
  16. Contrastive Learning Rivals Masked Image Modeling in Fine-tuning via Feature Distillation
  17. Vue-报错cb() never called!
  18. 如何应对不间断电源(UPS)设计挑战
  19. 如果暴力不是为了杀戮,那就毫无意义
  20. VSM模型与TF-IDF权重

热门文章

  1. 11.2运行异常和编译异常
  2. MATLAB环境认识实验报告,matlab实验报告ljg
  3. 计算器的程序代码java_java 简单的计算器程序实例代码
  4. Jupyter Notebook修改默认工作路径
  5. 201421440008网络攻防实验三
  6. C语言一维数组、二维数组、结构体的初始化
  7. java学习笔记—EL表达式(38)
  8. 智能算法之Matlab实现(1)——遗传算法(1)
  9. 图解一次手动杀马过程
  10. Java虚拟机类装载的原理及实现