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

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上运行

在这里插入图片描述

解决办法:

在这里插入图片描述

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
利用Visual Studio 2019进行编程实验非常方便和高效。Visual Studio 2019是一款强大的集成开发环境(IDE),支持多种编程语言和平台,包括C++、C#、Python等。以下是我用Visual Studio 2019进行实验的一些经验。 首先,我可以使用Visual Studio 2019创建一个新的项目。根据实验的需要,我可以选择不同的项目类型,如控制台应用程序、Windows桌面应用程序、Web应用程序等。 接下来,我可以在Visual Studio 2019的代码编辑器中编写实验所需的代码。Visual Studio 2019提供了丰富的代码编辑和调试功能,包括语法高亮、智能提示、代码重构等。我可以根据实验要求使用不同的编程语言来编写代码,例如使用C++进行算法实验,使用C#进行桌面应用程序开发等。 在编写代码的过程中,我可以利用Visual Studio 2019的调试功能来检查程序执行的过程和结果。Visual Studio 2019提供了强大的调试工具,如设置断点、单步调试、查看变量的值等,可以帮助我找出程序中的错误和问题,并进行修复。 完成编写和调试后,我可以使用Visual Studio 2019进行编译和运行实验代码。Visual Studio 2019提供了快捷的编译和运行选项,可以方便地生成可执行文件并运行程序。 此外,Visual Studio 2019还提供了很多其他的功能和扩展,例如源代码版本控制、代码测试和性能分析等,都可以帮助我更好地进行实验和开发工作。 总的来说,利用Visual Studio 2019进行编程实验非常方便和高效。它提供了强大的开发工具和功能,可以帮助我更好地进行实验设计、代码编写、调试和运行。无论是学习编程还是进行实际项目开发,Visual Studio 2019都是一个非常好的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值