STM32配置CH375B成HID Host模式读取自定义HID设备的数据 ——STM32配置CH375B接口函数

本文介绍了如何在STM32上使用CH375B芯片配置为HID主机模式,以读取自定义HID设备的数据。内容包括所需的接口函数及其实现。
摘要由CSDN通过智能技术生成

        接着上一篇上传,这个是STM32配置CH375B时用到的接口函数

头文件:

#ifndef __BSP_CH375_H__
#define __BSP_CH375_H__

#include "stm32f0xx_hal.h"
#include "config.h"

#define CH375_EndPointNum    0
#define USBD_VID             1155
#define USBD_PID_FS          22352

#define	UNKNOWN_USB_DEVICE	0xF1
#define	UNKNOWN_USB_HID   	0xF2

#define CH375_DATA_PORT      GPIOA
#define CH375_DATA_OUTPUT()  CH375_DATA_PORT->MODER |= 0x5555 
#define CH375_DATA_INPUT()   CH375_DATA_PORT->MODER &= 0xFFFF0000
#define CH375_DATA(x)        {CH375_DATA_PORT->ODR &= 0xFF00;CH375_DATA_PORT->ODR |= x&0xFF;}

#define CH375_CS_1           CH375_CS_GPIO_Port->ODR |=  CH375_CS_Pin
#define CH375_CS_0           CH375_CS_GPIO_Port->ODR &= ~CH375_CS_Pin

#define CH375_A0_1           CH375_A0_GPIO_Port->ODR |=  CH375_A0_Pin
#define CH375_A0_0           CH375_A0_GPIO_Port->ODR &= ~CH375_A0_Pin

#define CH375_RD_1           CH375_RD_GPIO_Port->ODR |=  CH375_RD_Pin
#define CH375_RD_0           CH375_RD_GPIO_Port->ODR &= ~CH375_RD_Pin

#define CH375_WR_1           CH375_WR_GPIO_Port->ODR |=  CH375_WR_Pin
#define CH375_WR_0           CH375_WR_GPIO_Port->ODR &= ~CH375_WR_Pin

/* ********************************************************************************************************************* */
/* 硬件特性 */

#define	CH375_MAX_DATA_LEN	0x40			/* 最大数据包的长度, 缓冲区的长度 */

/* ********************************************************************************************************************* */
/* 命令代码 */

#define	CMD_GET_IC_VER		0x01			/* 获取芯片及固件版本 */
/* 输出: 版本号( 位7为1, 位6为0, 位5~位0为版本号 ) */
/*           CH375B返回版本号的值为0B7H即版本号为37H */

#define	CMD_ENTER_SLEEP		0x03			/* 进入睡眠状态 */

#define	CMD_SET_USB_SPEED	0x04			/* 设置USB总线速度, 在每次CMD_SET_USB_MODE设置USB工作模式时会自动恢复到12Mbps全速 */
/* 输入: 总线速度代码 */
/*           00H=12Mbps全速FullSpeed(默认值), 01H=1.5Mbps(仅修改频率), 02H=1.5Mbps低速LowSpeed */
#define	CMD_SET_SYS_FREQ	CMD_SET_USB_SPEED

#define	CMD_RESET_ALL		  0x05			/* 执行硬件复位 */

#define	CMD_CHECK_EXIST		0x06			/* 测试工作状态 */
/* 输入: 任意数据 */
/* 输出: 输入数据的按位取反 */

#define	CMD_GET_TOGGLE		0x0A			/* 获取OUT事务的同步状态 */
/* 输入: 数据1AH */
/* 输出: 同步状态 */
/*           位4为1则OUT事务同步, 否则OUT事务不同步 */

#define	CMD_CHK_SUSPEND		0x0B			/* 设备方式: 设置检查USB总线挂起状态的方式 */
/* 输入: 数据10H, 检查方式 */
/*                    00H=不检查USB挂起, 04H=以50mS为间隔检查USB挂起, 05H=以10mS为间隔检查USB挂起 */

#define	CMD_DELAY_100US		0x0F			/* 并口方式: 延时100uS */
/* 输出: 延时期间输出0, 延时结束输出非0 */

#define	CMD_SET_USB_ID		0x12			/* 设备方式: 设置USB厂商VID和产品PID */
/* 输入: 厂商ID低字节, 厂商ID高字节, 产品ID低字节, 产品ID高字节 */

#define	CMD_SET_USB_ADDR	0x13			/* 设置USB地址 */
/* 输入: 地址值 */

#define	CMD_SET_USB_MODE	0x15			/* 设置USB工作模式 */
/* 输入: 模式代码 */
/*       00H=未启用的设备方式, 01H=已启用的设备方式并且使用外部固件模式, 02H=已启用的设备方式并且使用内置固件模式 */
/*       04H=未启用的主机方式, 05H=已启用的主机方式, 06H=已启用的主机方式并且自动产生SOF包, 07H=已启用的主机方式并且复位USB总线 */
/* 输出: 操作状态( CMD_RET_SUCCESS或CMD_RET_ABORT, 其它值说明操作未完成 ) */

#define	CMD_SET_ENDP2		  0x18			/* 设备方式: 设置USB端点0的接收器 */
/* 输入: 工作方式 */
/*           位7为1则位6为同步触发位, 否则同步触发位不变 */
/*           位3~位0为事务响应方式:  0000-就绪ACK, 1110-正忙NAK, 1111-错误STALL */

#define	CMD_SET_ENDP3		  0x19			/* 设备方式: 设置USB端点0的发送器 */
/* 输入: 工作方式 */
/*           位7为1则位6为同步触发位, 否则同步触发位不变 */
/*           位3~位0为事务响应方式:  0000~1000-就绪ACK, 1110-正忙NAK, 1111-错误STALL */

#define	CMD_SET_ENDP4		  0x1A			/* 设备方式: 设置USB端点1的接收器 */
/* 输入: 工作方式 */
/*           位7为1则位6为同步触发位, 否则同步触发位不变 */
/*           位3~位0为事务响应方式:  0000-就绪ACK, 1110-正忙NAK, 1111-错误STALL */

#define	CMD_SET_ENDP5		  0x1B			/* 设备方式: 设置USB端点1的发送器 */
/* 输入: 工作方式 */
/*           位7为1则位6为同步触发位, 否则同步触发位不变 */
/*           位3~位0为事务响应方式:  0000~1000-就绪ACK, 1110-正忙NAK, 1111-错误STALL */

#define	CMD_SET_ENDP6		  0x1C			/* 设置USB端点2/主机端点的接收器 */
/* 输入: 工作方式 */
/*           位7为1则位6为同步触发位, 否则同步触发位不变 */
/*           位3~位0为事务响应方式:  0000-就绪ACK, 1101-就绪但不返回ACK, 1110-正忙NAK, 1111-错误STALL */

#define	CMD_SET_ENDP7		  0x1D			/* 设置USB端点2/主机端点的发送器 */
/* 输入: 工作方式 */
/*           位7为1则位6为同步触发位, 否则同步触发位不变 */
/*           位3~位0为事务响应方式:  0000-就绪ACK, 1101-就绪但无须应答, 1110-正忙NAK, 1111-错误STALL */

#define	CMD_GET_STATUS		0x22			/* 获取中断状态并取消中断请求 */
/* 输出: 中断状态 */

#define	CMD_UNLOCK_USB		0x23			/* 设备方式: 释放当前USB缓冲区 */

#define	CMD_RD_USB_DAT
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值