前言

  • 上一篇讲了STM32 USB 虚拟串口的功能实现,可以通过STM32输出信息到PC端
  • 这篇简单的做个应用:打印LOG(日志)信息到虚拟串口

操作方法

  • 基于上篇的STM32 USB Virtual Port Com 例程,把USB的发送,改为字符串输出
  • 这里使用标准C库的:vsnprintf函数,目的是格式化打印字符串到指定的数组
#include "main.h"
#include "usb_device.h"
#include "usbd_cdc_if.h"
#include <stdio.h>
#include <stdarg.h>void SystemClock_Config(void);
static void MX_GPIO_Init(void);#define DBG_BUFF_MAX_LEN          256void usb_vcom_puts(uint8_t *buf)
{CDC_Transmit_FS(buf, strlen((const char *)buf));
}/* debug print : support float double */
int printk(const char *fmt, ...)
{va_list args;static char log_buf[DBG_BUFF_MAX_LEN] = { 0 };va_start(args, fmt);int length = vsnprintf(log_buf, sizeof(log_buf) - 1, fmt, args);usb_vcom_puts((uint8_t *)log_buf);return length;
}void vcp_send_test(uint8_t ch)
{uint8_t temp_buf[DBG_BUFF_MAX_LEN];for (uint16_t i = 0; i < DBG_BUFF_MAX_LEN; i++){temp_buf[i] = 0x41;}temp_buf[0] = ch;CDC_Transmit_FS(temp_buf, sizeof(temp_buf));
}int main(void)
{uint32_t cnt = 0x00;HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_USB_DEVICE_Init();HAL_Delay(2000);printk("%s : STM32 USB Virtual Port Com Test!\r\n", __func__, cnt);while (1){HAL_Delay(3000);printk("%s: hell, usb virtual com,cnt = %d\r\n", __func__, cnt);cnt++;}
}

调试效果

  • 编译下载
  • PC端串口助手,打开STM32 USB虚拟的串口,波特率随意(不要太高就好)

  • 发现跟打印到实际的串口,并没有什么区别

小结

  • USB功能很强大,多多去了解,会发现更多
  • 先熟悉基本的USB应用,再返回去细化或消化每个USB协议的细节

USB协议学习笔记 - 虚拟串口Virtual Port Com用于LOG打印相关推荐

  1. USB协议学习笔记 - 虚拟串口Virtual Port Com LED控制

    前言 STM32 的USB 可以虚拟成一个串口,功能还挺强,感觉比HID好用 这里使用USB 虚拟的串口,做个控制LED的小程序 控制LED这里使用自定义的AT命令方式,如红灯亮:AT+LEDR_ON ...

  2. USB协议学习笔记 - CUSTOM HID 设备

    简介 这里使用STM32平台进行USB 协议的学习与USB 设备的调试开发 USB HID设备,协议较固定,无法实现数据的自由接收与发送 USB CUSTOM HID设备(自定义HID协议)可以实现简 ...

  3. USB协议学习笔记 - CUSTOM HID控制LED

    简介 前面了解了 STM32 CUSTOM HID 设备,但是有几个细节没有处理好,如接收到主机的报告后,如何接收到指定的数组,并实现通信功能,如控制LED亮灭? 还有就是CUSTOM HID设备的[ ...

  4. KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记3——串口Stdio实现

    KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记3--串口Stdio实现 一.介绍 任务目标 二.工程创建 三.软件设计 第一步,BSP构建 1, 添加前面的pll_config文件 2 ...

  5. Servlet和HTTP请求协议-学习笔记02【Servlet_体系结构与urlpartten配置、HTTP请求协议】

    Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...

  6. Qt5学习笔记之串口助手四:增加16进制/ASCII切换、周期发送

    目录 1. 概述 2. 16进制/ASCII发送 2.1 功能实现 2.2 界面修改 3. 接收框显示发送内容 3.1 以16进制/ASCII显示 3.1.1 界面修改 3.1.2 功能实现 3.2 ...

  7. 极客HTTP协议学习笔记破冰篇(1-7)

    极客HTTP协议学习笔记破冰篇(1-7) 前言 各篇章笔记链接 一.学习笔记 1.HTTP的前世今生 2.HTTP是什么 3.与HTTP相关的各种概念(上) 4.与HTTP相关的各种概念(下) 5.常 ...

  8. Servlet和HTTP请求协议-学习笔记01【Servlet_快速入门-生命周期方法、Servlet_3.0注解配置、IDEA与tomcat相关配置】

    Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...

  9. stm32学习笔记----双串口同时打开时的printf()问题

    stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...

最新文章

  1. 折线分割平面(hdoj 2050,动态规划递推)
  2. 本人CCNP、OCP MCSA 证书寻求挂靠
  3. linux脚本命令顺序执行命令,linux – nohup多个顺序命令
  4. System.IO 的三个抽象类
  5. linux_nmon监控教程,如何使用Nmon监控Linux系统性能
  6. 经典神经网络 -- GoogLeNet / Inception : 设计原理与pytorch实现
  7. 腾讯电子签小程序就能开收据了
  8. 添加proc文件,控制sctp的debug输出
  9. SLAM中的边缘化舒尔补
  10. vi中跳到首行或尾行
  11. 做一个靠谱的软件测试工程师:进行有效地沟通
  12. ruby调用python_ruby与python
  13. 计算机系统基础学习笔记(7)-缓冲区溢出攻击实验
  14. matlab 改变坐标轴间距,matlab坐标轴刻度间距
  15. Mybatis源码基础解析
  16. GoldenGate—日常管理
  17. 学校食堂简易点餐管理系统(含用户登录且密码隐藏)C++
  18. JAVA MemCache 史无前例的详细讲解
  19. python怎么网络通信_python入门第二十六天--网络通信
  20. Python学习笔记_多张图片生成马赛克图

热门文章

  1. 图像匹配问题的定义和分类
  2. 管道专用现场金相检测仪
  3. 连锁实体门店+收银系统的解决方案
  4. html-下拉框多选
  5. Muduo 处理Tcp粘包
  6. redis 过期策略
  7. 智能车|直流电机、编码器与驱动器---编码器
  8. Subsonic的使用之基本语法、操作
  9. 计算机中级职称什么时候出成绩,2021年上半年网络工程师成绩查询时间公布(7月12日),查询入口已开通!...
  10. NT5.X/NT6.0双启动的故障解决