USB协议学习笔记 - 虚拟串口Virtual Port Com用于LOG打印
前言
- 上一篇讲了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打印相关推荐
- USB协议学习笔记 - 虚拟串口Virtual Port Com LED控制
前言 STM32 的USB 可以虚拟成一个串口,功能还挺强,感觉比HID好用 这里使用USB 虚拟的串口,做个控制LED的小程序 控制LED这里使用自定义的AT命令方式,如红灯亮:AT+LEDR_ON ...
- USB协议学习笔记 - CUSTOM HID 设备
简介 这里使用STM32平台进行USB 协议的学习与USB 设备的调试开发 USB HID设备,协议较固定,无法实现数据的自由接收与发送 USB CUSTOM HID设备(自定义HID协议)可以实现简 ...
- USB协议学习笔记 - CUSTOM HID控制LED
简介 前面了解了 STM32 CUSTOM HID 设备,但是有几个细节没有处理好,如接收到主机的报告后,如何接收到指定的数组,并实现通信功能,如控制LED亮灭? 还有就是CUSTOM HID设备的[ ...
- KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记3——串口Stdio实现
KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记3--串口Stdio实现 一.介绍 任务目标 二.工程创建 三.软件设计 第一步,BSP构建 1, 添加前面的pll_config文件 2 ...
- Servlet和HTTP请求协议-学习笔记02【Servlet_体系结构与urlpartten配置、HTTP请求协议】
Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...
- Qt5学习笔记之串口助手四:增加16进制/ASCII切换、周期发送
目录 1. 概述 2. 16进制/ASCII发送 2.1 功能实现 2.2 界面修改 3. 接收框显示发送内容 3.1 以16进制/ASCII显示 3.1.1 界面修改 3.1.2 功能实现 3.2 ...
- 极客HTTP协议学习笔记破冰篇(1-7)
极客HTTP协议学习笔记破冰篇(1-7) 前言 各篇章笔记链接 一.学习笔记 1.HTTP的前世今生 2.HTTP是什么 3.与HTTP相关的各种概念(上) 4.与HTTP相关的各种概念(下) 5.常 ...
- Servlet和HTTP请求协议-学习笔记01【Servlet_快速入门-生命周期方法、Servlet_3.0注解配置、IDEA与tomcat相关配置】
Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...
- stm32学习笔记----双串口同时打开时的printf()问题
stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...
最新文章
- 折线分割平面(hdoj 2050,动态规划递推)
- 本人CCNP、OCP MCSA 证书寻求挂靠
- linux脚本命令顺序执行命令,linux – nohup多个顺序命令
- System.IO 的三个抽象类
- linux_nmon监控教程,如何使用Nmon监控Linux系统性能
- 经典神经网络 -- GoogLeNet / Inception : 设计原理与pytorch实现
- 腾讯电子签小程序就能开收据了
- 添加proc文件,控制sctp的debug输出
- SLAM中的边缘化舒尔补
- vi中跳到首行或尾行
- 做一个靠谱的软件测试工程师:进行有效地沟通
- ruby调用python_ruby与python
- 计算机系统基础学习笔记(7)-缓冲区溢出攻击实验
- matlab 改变坐标轴间距,matlab坐标轴刻度间距
- Mybatis源码基础解析
- GoldenGate—日常管理
- 学校食堂简易点餐管理系统(含用户登录且密码隐藏)C++
- JAVA MemCache 史无前例的详细讲解
- python怎么网络通信_python入门第二十六天--网络通信
- Python学习笔记_多张图片生成马赛克图