Visual studio 2019 编程控制CH341A芯片的USB设备

devtools/2024/9/23 9:34:41/

1、硬件

买了个USB可转IIC、或SPI、或UART的设备,主芯片是CH341A

在这里插入图片描述

主要说明USB转SPI的应用,绿色跳线帽选择IIC&SPI,用到CS0、SCK、MOSI、MISO这4个引脚

2、软件

2.1、下载CH341A的驱动

点CH341A官网https://www.wch.cn/downloads/CH341PAR_ZIP.html,下载64位DLL库和驱动。

解压下载的文件得到CH341DLL.H、CH341DLL.LIB。

在这里插入图片描述

设备连接到电脑后,双击SETUP.exe安装驱动

在这里插入图片描述 在这里插入图片描述

2.2、 新建visual studio项目

参照链接:https://blog.csdn.net/qq_34414144/article/details/126598125?spm=1001.2014.3001.5502,

新建项目和导入外部库

把 2.1节得到的.h和lib文件放到Project目录下

在这里插入图片描述

2.3、接口介绍

CH341DLLA64.h里的接口定义,有详细注释,主要用到以下接口

函数功能
CH341OpenDevice打开CH341A设备
CH341SetStream设置串口流模式
CH341StreamSPI4处理SPI数据流

CH341StreamSPI4 的2种用法,以操作flash为例:

  • 只发送数据
unsigned char write_enable(unsigned char* buffer)
{*((unsigned char*)buffer + 0) = WREN;  //命令码0x06if (CH341StreamSPI4(index, chip_select, 1, buffer) == FALSE) return(FALSE);return(TRUE);}
  • 先发送数据,再读数据
unsigned char read_status_register(unsigned char* buffer)
{*((unsigned char*)buffer + 0) = RDSR;  //命令码0X05if (CH341StreamSPI4(index, chip_select, 1 + 2, buffer) == FALSE) return(FALSE);// 因为CH341的SPI是数据流,所以实际返回数据应该去掉自己发出的1个字节(命令和地址)memmove(buffer, (unsigned char*)buffer + 1, 2);  return(TRUE);
}

2.4、编写代码

设备的示例代码基础上,开发自己需要的功能,例如:

ULONG index = 0; //设备号
ULONG chip_select = 0x80; //启动片选
unsigned char buffer_write[4096]; //全局缓冲区void Select()
{char     inputr;   // 输入一个选择号unsigned char    a;unsigned char* temp1 = &a;printf("\n");printf("          *******请输入测试的选项*******\n");printf("0.退出程序\n");printf("1.测试1\n");printf("2.测试2\n");printf("请输入测试的选项:");do {inputr = getchar();switch (inputr){case '0':printf("*** CH341CloseDevice \n");CH341CloseDevice(0);printf("\nExit.\n");exit(0);    //退出case '1':printf("*** test1 \n");test1();break;case '2':printf("*** test2 \n");test2();break;default:break;}} while (1);
}//程序入口
void main()
{HANDLE hOut;WORD attText = FOREGROUND_GREEN | FOREGROUND_INTENSITY; // 文本属性hOut = GetStdHandle(STD_OUTPUT_HANDLE); // 获取标准输出设备句柄SetConsoleOutputCP(936); // 设置代码页SetConsoleTextAttribute(hOut, attText); // 设置命令行窗口属性printf("\nCH341 OPERATION SPI FLASH EN25T80 TEST PROGRAM V1.0\n");printf("Copyright (C) TECH32 2009.3\n");printf("*** Load DLL: CH341DLLA64.DLL \n");if (LoadLibrary("CH341DLLA64.DLL") == NULL) return;  // 加载DLL失败,可能未安装到系统中printf("*** CH341OpenDevice: 0# \n");if (CH341OpenDevice(0) == INVALID_HANDLE_VALUE) return;  // 使用之前必须打开设备if (CH341SetStream(0, 0x81) == 0) return; //高位先发Select(); //测试选择CloseHandle(hOut); // 关闭标准输出设备句柄
}

2.5、程序运行结果

在这里插入图片描述

3、问题解决

3.1、调试窗口打不开

在这里插入图片描述

原因:没有安装64位的驱动,请按2.1节步骤安装

3.2、程序未正常运行

在这里插入图片描述
原因:可能是程序填写的lib名不对,或lib缺失
在这里插入图片描述

3.3、Windows10上正常工作的工具,无法在Windows7上运行

在这里插入图片描述

解决办法:

在这里插入图片描述


http://www.ppmy.cn/devtools/26376.html

相关文章

经典网络解读——Efficientnet

论文:EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks(2019.5) 作者:Mingxing Tan, Quoc V. Le 链接:https://arxiv.org/abs/1905.11946 代码:https://github.com/tensorflow/t…

torch.cuda.is_available()返回flase 问题排查

查看torch版本是否为GPU版本 import torch print(torch.__version__)如果不是GPU版本下载GPU版本 查看cuda版本 nvcc --version下载cuda对应的cuda版本 nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2022 NVIDIA Corporation Built on Wed_Sep_21_10:41:10_P…

『FPGA通信接口』DDR(3)DDR3颗粒读写测试

文章目录 前言1.配套工程简介2.测试内容与策略3. 测试程序分析4.程序结果分析5.一个IP控制两颗DDR36.传送门 前言 以四颗MT41K512M16HA-125AIT颗粒为例,介绍如何在一块新制板卡上做关于DDR3的器件测试。前面两篇介绍了什么是DDR,并介绍了xilinx给出的FPG…

Qt5配置Opencv读取一张图像

1、首先Qt5配置Opencv(我已经配置成功)有时间发出来 2、Opencv的基本Mat操作 &#xff08;1&#xff09;加Opencv的头文件 #include<opencv2/opencv.hpp> #include <opencv2/highgui/highgui_c.h> using namespace cv;&#xff08;2&#xff09;Opencv图像基本处理…

【docker】Spring Boot3.x 打包 Docker容器

Docker化Spring Boot应用 创建文件夹 demo mkdir democd demo创建Dockerfile # 两个 openjdk 二选一 #FROM openjdk:17-jre-alpineFROM eclipse-temurin:17MAINTAINER chengxuyuanshitang <chengxuyuanshitangXX.com>RUN mkdir -p /workspace/java/demoCOPY demo.ja…

基于EBAZ4205矿板的图像处理:03使用VIO调试输出HDMI视频图像

基于EBAZ4205矿板的图像处理&#xff1a;03使用VIO调试输出HDMI视频图像 在zynq调试时VIO是真的方便&#xff0c;特此写一篇博客记录一下 先看效果 项目简介 下面是我的BD设计&#xff0c;vtc用于生成时序&#xff0c;注意&#xff0c;2021.2的vivado的vtcIP是v6.2版本&…

windows驱动开发-电源状态(一)

在windows设备驱动开发中&#xff0c;随着笔记本电脑的普及&#xff0c;低功耗要求的增加&#xff0c;设备电源状态越来越重要&#xff0c;和之前不一样&#xff0c;在以前&#xff0c;驱动仅仅只处理PNP的电源状态而已&#xff0c;现在需要处理非常多的电源状态和请求。 系统…

IEEE独立出版 · EI检索 | 2024年第三届服务机器人国际会议 (ICoSR 2024)

会议简介 Brief Introduction 2024年第三届服务机器人国际会议(ICoSR 2024) 会议时间&#xff1a;2024年7月26-28日 召开地点&#xff1a;中国杭州 大会官网&#xff1a;www.iwosr.org 进入新时代&#xff0c;科技更新迭代快速发展&#xff0c;机器人不仅变得更加节能&#xff…