通过USB HID协议调试虚拟设备
一、简介
为了方便用户在使用带硬件USB接口芯片开发过程中,输入/输出一些数据信息进行调试分析,我们提供了一套"stc_usb_hid_32g.LIB"库文件,配套STC-ISP(V6.90以后版本)软件,可方便的使用USB接口进行数据通信,在STC-ISP软件上模拟LED灯,数码管,12864屏,OLED屏的显示,以及虚拟键盘的输入功能
二、使用说明
1.添加库文件
在项目栏程序组上点击鼠标右键,选择”Add Existing Files to Group ‘Source Group 1’…”:
在弹框里选择库文件,并添加到项目里:
2. 添加必要程序
在初始化程序里添加USB时钟源启动,USB模块进行初始化程序:
主循环里添加USB接收判断以及应答指令:
至此USB HID数据输入/输出功能的必要准备工作完成。
3.功能使用说明
将例程烧录到芯片里后,通过USB线连接电脑,点击STC-ISP软件里的HID助手标签,选择并打开“STC HID Demo”设备:
通过STC-ISP软件的“调试接口”菜单,打开“接口设置”,设置调试接口,选择HID助手:
通过STC-ISP软件的“调试接口”菜单,打开需要使用的虚拟设备:
-
- 3.1虚拟键盘
例程通过接收虚拟键盘的按键,判断键值执行相应的功能。打开“虚拟键盘”窗口,点击上面的按钮就可以发送对应的键值给MCU:
程序里判断接收数据是否来源于虚拟键盘:
如果接收数据来源于虚拟键盘,判断键值并执行相应的操作:
-
- 3.2 7段数码管
通过STC-ISP软件的“调试接口”菜单,打开7段数码管虚拟设备。
显示字符串数据
收到虚拟键盘键值“1”按键码时演示" printf"函数输出虚拟数码管显示的字符串数据:
显示长整型数据
收到虚拟键盘键值“2”按键码时演示"ShowLong"函数输出虚拟数码管显示的长整型数据:
显示浮点数数据
收到虚拟键盘键值“3”按键码时演示"ShowFloat"函数输出虚拟数码管显示的浮点数数据:
显示码值数据
收到虚拟键盘键值“4”按键码时演示"ShowCode"函数输出虚拟数码管码值数据;
7段数码管码值参考 |
|||||||||||||||
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
3F |
06 |
5B |
4F |
66 |
6D |
7D |
27 |
7F |
6F |
77 |
7C |
39 |
5E |
79 |
71 |
|
- |
H |
J |
K |
L |
N |
o |
P |
U |
t |
G |
Q |
r |
M |
y |
00 |
40 |
76 |
1E |
70 |
38 |
37 |
5C |
73 |
3E |
78 |
3D |
67 |
50 |
37 |
6E |
最高位为小数点。
-
- 3.3 LED-DIP40
通过STC-ISP软件的“调试接口”菜单,打开LED-DIP40虚拟设备。此虚拟设备模拟STC32G12K128核心功能板(降龙棍)的LED显示功能。
收到虚拟键盘键值“5”按键码时演示P0=0xaa驱动虚拟LED灯显示的状态(输出0时LED亮,输出1时LED灭):
收到虚拟键盘键值“6”按键码时演示P0=0x12,P1=0x34,P2=0x56,P3=0x78驱动虚拟LED灯显示的状态(输出0时LED亮,输出1时LED灭):
-
- 3.4 LED-DIP64
通过STC-ISP软件的“调试接口”菜单,打开LED-DIP64虚拟设备。此虚拟设备模拟STC32G12K128核心功能板(屠龙刀)的LED显示功能。
收到虚拟键盘键值“7”按键码时演示P0=0xaa驱动虚拟LED灯显示的状态(输出0时LED亮,输出1时LED灭):
收到虚拟键盘键值“8”按键码时演示P0=0x12,P1=0x34,P2=0x56,P3=0x78驱动虚拟LED灯显示的状态(输出0时LED亮,输出1时LED灭):
-
- 3.5 液晶显示12864
通过STC-ISP软件的“调试接口”菜单,打开液晶显示12864虚拟设备。此虚拟设备模拟12864点阵黑白屏的显示功能。
关闭LCD12864的显示
收到虚拟键盘键值“A”按键码时演示关闭LCD12864的显示:
打开LCD12864的显示
收到虚拟键盘键值“B”按键码时演示打开LCD12864的显示:
显示/隐藏LCD12864的光标
收到虚拟键盘键值“C”按键码时演示隐藏LCD12864的光标;收到虚拟键盘键值“D”按键码时演示显示LCD12864的光标:
光标左移/右移
收到虚拟键盘键值“E”按键码时演示光标向左移动一个单位(16个像素);收到虚拟键盘键值“F”按键码时演示光标向右移动一个单位(16个像素):
光标复位
收到虚拟键盘键值“G”按键码时演示光标回到左上角初始位置:
屏幕向左滚动
收到虚拟键盘键值“H”按键码时演示屏幕向左滚动一个单位(16个像素):
屏幕向右滚动
收到虚拟键盘键值“I”按键码时演示屏幕向右滚动一个单位(16个像素):
屏幕向上滚动
收到虚拟键盘键值“J”按键码时演示屏幕向上滚动一个单位(16个像素):
反白显示
收到虚拟键盘键值“M”按键码时演示反白显示指定的行:
清除显示
收到虚拟键盘键值“N”按键码时演示清除显示:
显示ASCII码和简体中文字符
收到虚拟键盘键值“O”按键码时演示在LCD12864上显示ASCII码和简体中文字符:
自动换行开关
收到虚拟键盘键值“K”按键码时演示关闭自动换行功能;收到虚拟键盘键值“L”按键码时演示开启自动换行功能(先使能自动换行开关,再输出显示字符):
显示图片
收到虚拟键盘键值“P”按键码时演示在LCD12864屏幕上显示图片:
-
- 3.6 OLED-12864
通过STC-ISP软件的“调试接口”菜单,打开OLED-12864虚拟设备。此虚拟设备模拟分辨率为128*64点阵的OLED屏显示功能。
关闭OLED12864的显示
收到虚拟键盘键值“Q”按键码时演示关闭OLED12864的显示:
打开OLED12864的显示
收到虚拟键盘键值“R”按键码时演示打开OLED12864的显示:
显示屏幕内容
收到虚拟键盘键值“S”按键码时演示显示屏幕内容:
全屏点亮(用于测试)
收到虚拟键盘键值“T”按键码时演示全屏点亮(用于测试,输入“S”按键码切换显示屏幕内容):
水平镜像显示
收到虚拟键盘键值“U”按键码时演示水平镜像显示:
垂直镜像显示
收到虚拟键盘键值“V”按键码时演示垂直镜像显示:
反白显示
收到虚拟键盘键值“V”按键码时演示反白显示:
设置亮度值
收到虚拟键盘键值“X”按键码时演示亮度值=0x10(范围0~255):
收到虚拟键盘键值“Y”按键码时演示亮度值=0x80(范围0~255):
收到虚拟键盘键值“Z”按键码时演示亮度值=0xf0(范围0~255):
滚动功能
OLED GDDRAM共分为8个Page,每一个Page对应8个COM,每一个COM驱动一行OLED显示,即共64行;而一个COM驱动内有128列(Segment),组成128*64OLED点阵驱动。
参数1:参与滚屏的起始页(范围0~7);
参数2:参与滚屏的结束页(范围0~7);
参数3:滚屏的周期值(周期单位为毫秒)。
收到虚拟键盘键值“UP”按键码时演示向上滚动功能(设置好方向后通过“OLED12864_ScrollStart”指令开始执行滚动操作):
收到虚拟键盘键值“LEFT”按键码时演示向左滚动功能(设置好方向后通过“OLED12864_ScrollStart”指令开始执行滚动操作):
收到虚拟键盘键值“RIGHT”按键码时演示向右滚动功能(设置好方向后通过“OLED12864_ScrollStart”指令开始执行滚动操作):
收到虚拟键盘键值“DOWN”按键码时开始执行滚动操作。
收到虚拟键盘键值“PageUp”按键码时停止执行滚动操作。
寻址模式
收到虚拟键盘键值“HOME”,“END”按键码时设置寻址模式(0:水平寻址; 1:垂直寻址; 2:页寻址)。
图片显示
收到虚拟键盘键值“PageDn”按键码时在OLED12864屏幕上显示图片。设置完寻址模式后再进行图片显示,便可看出不同寻址模式的差异。
水平寻址显示效果:
垂直寻址显示效果:
-
- 3.7 数据接收处理
在程序里可对接收到的数据进行处理,例如将接收数据复制到发送缓冲区,然后调用“usb_IN()”函数发送出来:
测试结果如下:
字符串发送测试:
USB HID收发数据包大小固定为64字节,一次性收发数据长度不要超过64字节,数据长度不足64字节的后面填充无效数据。
- 3.8 发送指令触发MCU复位并自动下载
打开STC-ISP软件(V6.90H以上版本),选择芯片型号、打开需要烧录的程序文件、设置好硬件选项后,切换到“收到用户命令后复位到ISP监控程序区”标签:
如下图所示,选择“USB(HID)模式”,设置默认VID: 34BF,PID: FF01;
设置自定义命令:@STCISP#
取消 “Hex” 选项,命令应与程序里的定义相同:
char *USER_STCISPCMD = "@STCISP#"; //设置自动复位到ISP区的用户接口命令
点击“发送用户自定义命令并开始下载”按钮,或者在勾选“每次下载前都先发送自定义命令”选项情况下也可点击“下载/编程”按钮开始下载。
(此步骤需要将支持自动下载功能的程序通过手动上电复位的方式下载到芯片后才能使用)
正常情况下芯片收到指令后会自动复位到“STC USB Writer (HID1)”模式并开始下载。