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

news2024/11/20 20:29:31

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;  //命令码0x06
	if (CH341StreamSPI4(index, chip_select, 1, buffer) == FALSE) return(FALSE);
	return(TRUE);

}
  • 先发送数据,再读数据
unsigned char read_status_register(unsigned char* buffer)
{
	*((unsigned char*)buffer + 0) = RDSR;  //命令码0X05
	if (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.coloradmin.cn/o/1636374.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenCV如何实现背投(58)

返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV直方图比较(57) 下一篇:OpenCV如何模板匹配(59) 目标 在本教程中,您将学习: 什么是背投以及它为什么有用如何使用 OpenCV 函数 cv::calcBackP…

Mac好用又好看的终端iTerm2 + oh-my-zsh

Mac好用又好看的终端iTerm2 1. iTerm2的下载安装2. oh-my-zsh的安装2.1 官网安装方式2.2 国内镜像源安装方式 3. oh-my-zsh配置3.1 存放主题的路径3.2 存放插件的路径3.3 配置文件路径 1. iTerm2的下载安装 官网下载: iTerm2 2. oh-my-zsh的安装 oh-my-zsh是一…

设备能源数据采集新篇章

在当今这个信息化、智能化的时代,设备能源数据的采集已经成为企业高效运营、绿色发展的重要基石。而今天,我们要向大家介绍的就是一款颠覆传统、引领未来的设备能源数据采集神器——HiWoo Box网关! 一、HiWoo Box网关:一站式解决…

C++11:shared_ptr循环引用问题

一、shared_ptr的弊端 struct Listnode {int _val;std::shared_ptr<Listnode> _prev;std::shared_ptr<Listnode> _next;Listnode(int val ):_val(val),_prev(nullptr),_next(nullptr){}~Listnode(){cout << "~Listnode()" << endl;} }; in…

探索未来,开启元宇宙之旅!

一、什么是元宇宙 元宇宙&#xff0c;这个词汇逐渐进入了公众的视野&#xff0c;引发了人们无尽的想象。 首先&#xff0c;元宇宙是什么&#xff1f;元宇宙&#xff0c;顾名思义&#xff0c;是一个虚拟现实的世界&#xff0c;一个融合了数字、物理和社交空间的全息图。它不仅…

【数据结构】位图与布隆过滤器

目录 前言 位图的概念 经典面试题目 位图的模拟实现 set() reset() test() 位图整体代码 位图的应用 位图的优缺点 布隆过滤器 布隆过滤器的概念 哈希函数的个数与布隆过滤器长度的关系 布隆过滤器的模拟实现 插入 查找 删除 布隆过滤器整体代码 前言 哈希本质…

nginx缓存清理

背景 昨天打开我的gpt镜像网站&#xff0c;意外发现静态图片资源全都无法获取了 CoCo-AI 一番排查下来&#xff0c;发现是引用的cdn链接失效了 且cdn源是属于七牛云的&#xff0c;且不再维护&#xff0c;于是果断切换到cloudflare export function getEmojiUrl(unified: str…

iBarcoder for Mac:一站式条形码生成软件

在数字化时代&#xff0c;条形码的应用越来越广泛。iBarcoder for Mac作为一款专业的条形码生成软件&#xff0c;为用户提供了一站式的解决方案。无论是零售、出版还是物流等行业&#xff0c;iBarcoder都能轻松应对&#xff0c;助力用户实现高效管理。 iBarcoder for Mac v3.14…

Android4.4真机移植过程笔记(一)

1、RK源码编译 获取内核源码&#xff1a; git clone git172.28.1.172:rk3188_kernel -b xtc_ok1000 内核编译环境&#xff1a; 从172.28.1.132编译服务器的/data1/ZouZhiPing目录下拷贝toolchain.tar.gz&#xff08;交叉编译工具链&#xff09;并解压到与rk3188_kernel同级目…

计算机英文论文常见错误写作习惯2

目录 第一部分 非常长的句子 在一个句子的主要概念的前面&#xff0c;首先说明目的、地点或原因 将表示时间的短语放在句首的倾向 将最重要的主语放在句首&#xff0c;以示强调 ‘In this paper’, ‘in this study’ 第一部分 非常长的句子 由于作者经常直接从中文翻译…

通过ESXi主机和专业工具导出或导入虚拟机

关于导出虚拟机的用户场景 导出ESXi虚拟机是VMware内置功能之一&#xff0c;可用于数据迁移或作为ESXi备份解决方案。通常情况下&#xff0c;您可以将ESXi中的虚拟机导出为OVF模板&#xff0c;该模板可捕获虚拟机或虚拟设备的状态并存储在一个自包含的包中&#xff0c;其中磁盘…

使 Elasticsearch 和 Lucene 成为最佳向量数据库:速度提高 8 倍,效率提高 32 倍

作者&#xff1a;来自 Elastic Mayya Sharipova, Benjamin Trent, Jim Ferenczi Elasticsearch 和 Lucene 成绩单&#xff1a;值得注意的速度和效率投资 我们 Elastic 的使命是将 Apache Lucene 打造成最佳的向量数据库&#xff0c;并继续提升 Elasticsearch 作为搜索和 RAG&a…

启发式搜索算法4 -遗传算法实战:吊死鬼游戏

相关文章: 启发式搜索算法1 – 最佳优先搜索算法 启发式搜索算法2 – A*算法 启发式搜索算法2 – 遗传算法 有一个小游戏叫吊死鬼游戏&#xff08;hangman&#xff09;&#xff0c;在学习英语的时候&#xff0c;大家有可能在课堂上玩过。老师给定一个英文单词&#xff0c;同学们…

Python人脸识别全面教程

目录 第一部分&#xff1a;人脸识别基础 1.1 人脸检测 1.2 人脸识别算法 1.3 深度学习在人脸识别中的应用 1.4 人脸识别库 第二部分&#xff1a;人脸识别高级技术 2.1 特征提取与人脸编码 人脸编码示例 2.2 人脸识别流程 人脸识别流程示例 2.3 多人脸识别与跟踪 多…

LabVIEW航空发动机主轴承试验器数据采集与监测

LabVIEW航空发动机主轴承试验器数据采集与监测 随着航空技术的迅速发展&#xff0c;对航空发动机性能的测试与监测提出了更高的要求。传统的数据采集与监测方法已难以满足当前高精度和高可靠性的需求&#xff0c;特别是在主轴承试验方面。基于LabVIEW的航空发动机主轴承试验器…

翻译《The Old New Thing》 - How do I cover the taskbar with a fullscreen window?

How do I cover the taskbar with a fullscreen window? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20050505-04/?p35703 Raymond Chen 2005年5月5日 如何用全屏窗口覆盖任务栏&#xff1f; 很多时候&#xff0c;人们总是想得太多。…

[1688]jsp工资投放管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 工资投放管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0…

【数据结构】为了节省空间,对于特殊矩阵我们可以这样做……

特殊矩阵的压缩存储 导读一、数组与矩阵1.1 数组1.2 数组与线性表1.3 数组的存储结构1.4 矩阵在数组中的存储1.4.1 行优先存储1.4.2 列优先存储 二、特殊矩阵及其压缩存储三、对称矩阵及其存储3.1 方阵与对称矩阵3.2 对称矩阵的存储3.3 压缩存储的手动实现3.3.1 行优先存储3.3.…

虹科Pico汽车示波器 | 免拆诊断案例 | 起动机免拆诊断故障 2 例

电磁开关、换向器烧蚀及炭刷磨损均会导致起动机偶尔不工作&#xff0c;使发动机偶尔无法起动。由于故障是偶发的&#xff0c;且没有故障代码&#xff0c;这往往会让维修人员无从下手&#xff0c;而用Pico示波器测量起动电流&#xff0c;就会让这些“亚健康状态”一目了然。 案例…

一个好用的MQTT客户端软件

软件功能如下&#xff0c;实现的协议版本是 3.1.1 仅实现了常用的 CONNECT , PUBLISH , SUBSCRIBE 及相应的应答报文。支持以 Hex 格式显示接收的原始报文&#xff08;方便初学者学习&#xff09;。支持所有字段的自定义配置。支持保存与加载配置文件。 软件界面如下所示&…