本文作者:豆面

如何正确使用ch9328型号的产品?

豆面 2024-12-21 05:26:40 15
如何正确使用ch9328型号的产品?摘要: CH9328是一款串口转HID芯片,在电脑上识别为标准的USB HID类键盘设备,它主要用于单向数据传输,可以接收串口发送过来的数据(如ASCII码),并按照HID类键盘设备规范,...

CH9328是一款串口转HID芯片,在电脑上识别为标准的USB HID类键盘设备,它主要用于单向数据传输,可以接收串口发送过来的数据(如ASCII码),并按照HID类键盘设备规范,将数据打包成标准的键盘码值通过USB口上传给计算机,通过提供的上位机软件,用户也可自行配置芯片的VID、PID,以及各种字符串描述符,以下是详细的使用方法:

一、引脚介绍

如何正确使用ch9328型号的产品?

CH9328的部分引脚说明如下:

IO1:用于配置芯片的上传速度,上电时该引脚为高电平则速度配置为普通模式,上电时该引脚为低电平则速度配置为高速模式。

IO2IO3IO4:用于设置工作模式,具体组合方式见下表。

二、工作模式

CH9328支持多种工作模式,不同的工作模式下功能有所不同:

工作模式 IO2电平 IO3电平 IO4电平 功能说明
模式0 1 1 1 仅支持将可见ASCII码(如az、09、@、#、$等)对应的字符转成标准的USB键值,特殊功能:接收到的串口数据包如果遇到0x1B时,则丢弃当前包中0x1B之后的数据,并将0x1B转换成回车键。
模式1 1 0 1 仅支持将可见ASCII码(如az、09、@、#、$等)对应的字符转成标准的USB键值。
模式2 1 1 0 仅支持将可见ASCII码(如az、09、@、#、$等)对应的字符转成标准的USB键值,特殊功能:接收到的串口数据包如果遇到0x28时,将0x28转换成回车键。
模式3 0 1 1 透传模式,不仅仅用于传输可见ASCII码字符,该模式下可以实现标准的USB全键盘功能,串口数据每8个字节组成一包,芯片每接收到8个字节后,直接打包通过USB口上传,即芯片为透传模式,不分析转换串口数据,直接按8个字节一包上传,故串口数据必须按照标准的USB键盘数据包进行发送。

三、电路连接

CH9328的典型电路连接原理图包括与单片机的连接、与电脑的USB连接以及电源和晶振的连接,具体的电路连接可以参考数据手册中的电路原理图。

四、数据格式

在模式3(透传模式)下,一次向CH9328发送8个字节的数据,数据格式为:

[ byte1 ] [ byte2 ] [ byte3 ] [ byte4 ] [ byte5 ] [ byte6 ] [ byte7 ] [ byte8 ]

其中第一个字节(byte1)用来标识特殊按键,其余字节为普通按键的键值。

五、驱动程序

在使用CH9328之前,需要定义一个缓存空间来存储要发送的键码值。

如何正确使用ch9328型号的产品?
uint8_t key_code[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

根据需要创建键码数组,定义键盘上每个按键对应的键码。

六、使用示例

以下是一个简单的使用示例,演示如何使用CH9328实现开机自动输入密码的功能:

#include "reg52.h"
sbit k1 = P2^5;
sbit k2 = P2^6;
sbit k3 = P2^7;
void sendbyte(unsigned char b) // 串口发送字符
{
    SBUF = b;
    while (!TI);
    TI = 0;
}
void init() // 初始化函数
{
    SCON = 0x50; // 设置为工作方式1
    TMOD = 0x20; // 设置计数器工作方式2
    PCON = 0x80; // 波特率加倍
    TH1 = 0xFA; // 计数器初始值设置,波特率9600
    TL1 = TH1;
    TR1 = 1; // 打开计数器
}
void main() // 主函数
{
    unsigned char key[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
    Timer0Init(); // 初始化定时器
    init(); // 初始化串口
    delay(1500); // 延时以等待系统稳定
    // 以下是开机自动输入密码的程序,一直到第二个enter结束
    key[2] = 0x00;
    key[2] = 0x28;
    for (int i = 0; i < 8; i++) sendbyte(key[i]);
    delay(100); // enter键按下
    key[2] = 0x00; // 按键松开后
    for (int i = 0; i < 8; i++) sendbyte(key[i]);
    delay(100);
    key[2] = 0x00;
    key[2] = 0x1A;
    for (int i = 0; i < 8; i++) sendbyte(key[i]);
    delay(100); // w键按下
    key[2] = 0x00; // 按键松开后
    for (int i = 0; i < 8; i++) sendbyte(key[i]);
    delay(100);
    key[2] = 0x00;
    key[2] = 0x04;
    for (int i = 0; i < 8; i++) sendbyte(key[i]);
    delay(100); // a键按下
    key[2] = 0x00; // 按键松开后
    for (int i = 0; i < 8; i++) sendbyte(key[i]);
    delay(100);
    key[2] = 0x00;
    key[2] = 0x11;
    for (int i = 0; i < 8; i++) sendbyte(key[i]);
    delay(100); // n键按下
    key[2] = 0x00; // 按键松开后
    for (int i = 0; i < 8; i++) sendbyte(key[i]);
    delay(100);
    key[2] = 0x00;
    key[2] = 0x0A;
    for (int i = 0; i < 8; i++) sendbyte(key[i]);
    delay(100); // g键按下
    key[2] = 0x00; // 按键松开后
    for (int i = 0; i < 8; i++) sendbyte(key[i]);
    delay(100);
    key[2] = 0x00;
    key[2] = 0x28;
    for (int i = 0; i < 8; i++) sendbyte(key[i]);
    delay(100); // enter键按下
    key[2] = 0x00; // 按键松开后
    for (int i = 0; i < 8; i++) sendbyte(key[i]);
    P2 = 0xFF; // 恢复P2端口状态
    while (1)
    {
        delay(20); // 按键消抖处理
        if (k1 == 0)
        {
            delay(20);
            key[8] = 0x00;
            delay(1);
            ...
        }
    }
}

这个示例程序实现了开机自动输入密码“wang”的功能,每隔一段时间自动按下ctrl+s(即保存),并且具有和电脑键盘的ctrl c v一样的功能,可组合使用。

七、常见问题解答(FAQs)

问题1:CH9328在PC端识别不稳定是什么原因?如何解决?

答:CH9328在PC端识别不稳定可能由多种原因造成,包括但不限于以下几点:

供电问题:确保CH9328的供电稳定且符合规格要求,可以尝试更换电源或检查电源线是否接触良好。

驱动问题:确保已经安装了正确的驱动程序,并且驱动程序是最新版本,可以尝试重新安装驱动程序或从官方网站下载最新驱动。

硬件兼容性问题:某些电脑可能与CH9328存在兼容性问题,可以尝试更换电脑或使用其他USB接口测试。

如何正确使用ch9328型号的产品?

电路设计问题:检查电路设计是否正确,特别是晶振的选择和布线是否合理,建议参考官方提供的电路原理图进行设计。

解决方法:针对上述可能的原因逐一排查并解决,如果问题依然存在,建议联系技术支持或查阅更详细的技术文档。

问题2:如何修改CH9328的默认波特率?

答:CH9328的默认波特率可以通过上位机软件进行配置,具体步骤如下:

确保已经安装了CH9328的上位机软件。

打开上位机软件并连接到CH9328设备。

在软件界面中找到波特率设置选项。

根据需要选择合适的波特率并进行保存。

修改波特率后需要重新连接设备才能生效,确保单片机端的串口通信波特率与CH9328的设置一致。

文章版权及转载声明

作者:豆面本文地址:https://www.jerry.net.cn/articals/3203.html发布于 2024-12-21 05:26:40
文章转载或复制请以超链接形式并注明出处杰瑞科技发展有限公司

阅读
分享