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

2024-05-01 09:20

本文主要是介绍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;  //命令码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上运行

在这里插入图片描述

解决办法:

在这里插入图片描述

这篇关于Visual studio 2019 编程控制CH341A芯片的USB设备的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/951311

相关文章

Python远程控制MySQL的完整指南

《Python远程控制MySQL的完整指南》MySQL是最流行的关系型数据库之一,Python通过多种方式可以与MySQL进行交互,下面小编就为大家详细介绍一下Python操作MySQL的常用方法和最... 目录1. 准备工作2. 连接mysql数据库使用mysql-connector使用PyMySQL3.

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

MySQL精准控制Binlog日志数量的三种方案

《MySQL精准控制Binlog日志数量的三种方案》作为数据库管理员,你是否经常为服务器磁盘爆满而抓狂?Binlog就像数据库的“黑匣子”,默默记录着每一次数据变动,但若放任不管,几天内这些日志文件就... 目录 一招修改配置文件:永久生效的控制术1.定位my.cnf文件2.添加核心参数不重启热更新:高手应

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构