问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

stm32 usb初始化为什么到这

发布网友 发布时间:2022-04-22 08:34

我来回答

1个回答

热心网友 时间:2022-06-18 17:55

以下是笔者将ST的Custom_HID例程修改为“自定义USB设备”例程时总结出来的,因为笔者也是刚刚学USB开发不久,某些方面理解错误在所难免,请各位大虾指正。

一、usb_desc.c文件
根据你程序使用的通信方式修改。usb_desc.h文件中定义要根据usb_desc.c文件中的数组的大小;ConfigDescriptor[SIZ_CONFIG_DESC]下添加需要处理的端点;根据需要添加或删除报告描述符(主要用于HID)和CDC接口描述符(主要用于实现USB转串口)等。具体方法可以下载个“电脑圈圈”使用D12编写的例子。

二、Usb_conf.h文件:
1、修改需要处理那些中断
CNTR_CTRM 处理数据正确传输后控制,比如说响应主机
CNTR_DOVRM /* DMA OVeR/underrun Mask */
CNTR_ERRM /* ERRor Mask */
CNTR_WKUPM 0 /* WaKe UP Mask */
CNTR_SUSPM /* SUSPend Mask */
CNTR_RESETM 主要处理USB复位后进行一些初始化任务
CNTR_SOFM /* Start Of Frame Mask */
CNTR_ESOFM /* Expected Start Of Frame Mask */
如:
usb_conf.h中的#define IMR_MSK (CNTR_CTRM | CNTR_SOFM | CNTR_RESETM )是决定USB_CNTR寄存器中的那个USB相关中断启动还是屏蔽。

2、根据需要增加端点缓存地址,要根据缓存区的地址修改,防止数据重叠
如下为根据每个缓冲区的大小为64字节修改:
#define ENDP1_TXADDR (0xC0)
#define ENDP1_RXADDR (0xD0)
#define ENDP2_TXADDR (0x100)
#define ENDP2_RXADDR (0x140)
#define ENDP3_TXADDR (0x180)
#define ENDP3_RXADDR (0x1C0)

3、修改/* CTR service routines */下的EPX_IN_Callback和EPX_OUT_Callback。注释掉需要处理的函数。NOP_Process表示不处理。

三usb_prop.c文件
1、修改void XX_Reset(void)(如:void Joystick_Reset(void))
一般/* Initialize Endpoint 0 */的不用修改,如下为举例说明端点1的初始化,其他端口原理一样。
SetEPType(ENDP1, EP_INTERRUPT);//设置端点1类型
/*EP_BULK 批量端点
EP_CONTROL 控制端点
EP_ISOCHRNOUS 同步端点
EP_INTERRUPT 中断端点*/
SetEPTxAddr(ENDP1, ENDP1_TXADDR); //设置端点1缓冲区基地址
SetEPTxCount(ENDP1, 64);// 配置Tx 缓冲计数器
SetEPRxStatus(ENDP1, EP_RX_DIS);// //设置端点接收关闭
SetEPTxStatus(ENDP1, EP_TX_NAK);// //设置端点1发送不应答
/*
#define EP_RX_DIS (0x0000) // EndPoint RX DISabled 端点接收关闭
#define EP_RX_STALL (0x1000) // EndPoint RX STALLed 端点接收延迟
#define EP_RX_NAK (0x2000) // EndPoint RX NAKed 端点接收不应答
#define EP_RX_VALID (0x3000) // EndPoint RX VALID端点接收有效
#define EP_TX_DIS (0x0000) //EndPoint TX DISabled
#define EP_TX_STALL (0x0010) // EndPoint TX STALLed
#define EP_TX_NAK (0x0020) // EndPoint TX NAKed
#define EP_TX_VALID (0x0030) // EndPoint TX VALID */

2、删除不相干的描述符等。
如自定义的USB设备就不需要以下结构体初始化:
ONE_DESCRIPTOR Joystick_Report_Descriptor
ONE_DESCRIPTOR Mouse_Hid_Descriptor

3、修改RESULT XX_Data_Setup(u8 RequestNo)的数据类请求处理。
如Custom_HID例程修改为“自定义USB设备”例程时可以将以下代码删除
if ((RequestNo == GET_DESCRIPTOR)
&& (Type_Recipient == (STANDARD_REQUEST | INTERFACE_RECIPIENT))
&& (pInformation->USBwIndex0 == 0))
{

if (pInformation->USBwValue1 == REPORT_DESCRIPTOR)
{
CopyRoutine = Joystick_GetReportDescriptor;
}
else if (pInformation->USBwValue1 == HID_DESCRIPTOR_TYPE)
{
CopyRoutine = Joystick_GetHIDDescriptor;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
急求高人解答 ···管理类的问题 ···!!!急急急···我会在线等... ...如果基层管理幅度为8,高层管理人员管理幅度为3,则该公司中层管理人员... ...发生化学变化的实质是( )A.分子间隔发生变化B.物质状态发生改变C... 下列变化不能说明发生了化学变化的是( )A.变化时有电子的得失或共用电... 下列描述正确的是( )A.固态物质的分子间无间隔B.液态物质的分子不断运动... 原来微信打开这个功能,能够看到马路上的街景,涨知识了! ...百度帐号被人在异地登录了,问题是没有任何人知道我的密码啊?而且也... 医疗事故纠纷和医疗损害纠纷的区别是什么 医疗纠纷与医疗事故的定义是什么? 医疗事故纠纷是指什么的 女生小便发黄有泡沫,而且有可能上火了,怎么办 小便发黄是上火了吗?怎么预防? 问一下 这个STM32板子的isp下载接口 的定义 长期口苦口臭小便赤黄,很容易上火怎么办 如何使用stm32进行usb应用开发 哪位好心人有北京熊熊系列资源谢谢? 小便很黄,是“上火”了?还可能是哪些原因,或被你... 熊向晖的曾任职务 如何用ISP给stm32下载程序?急! 一急躁上火就小便疼痛口苦怎么办? 有哪些成就颇高但是鲜为人知的人? 男孩缺火取名烁帆可以吗? 今天发现小便发红,怎么回事,是上火了? 想请教下stm32 usb的CDC和HID类的固件库可以在官网... 陶行知基金会捐赠靠谱吗 小便很黄,是上火了,还可能是哪些原因,或被你漏... 插入stm32的时候显示无法识别的usb怎么办 跪求好人给毛熊 Adam Champ的资源。越多越好 天帆的寓意 一年来小便黄,最近还总上火怎么回事 有没有STM32F407通过HTTP升级程序的例程 早晨第一次小便特别黄,好像上火了一样,怎么回事 stm32 usb isp怎么烧录 姓熊的级别最高领导 这个熊叫什么?谁有很多这个熊的表情包?求 这只熊叫什么名字?有人知道吗? 我们国家教育局局长是谁 求穿越或者重生种田小说都可以,不要空间异能,大... 熊大缜的惨死 冰球的比赛规则是什么?比赛时应该注意什么? 熊向晖在国民党中做到什么官,多少岁? 种田文,家长里短 冬奥会冰球项目比赛规则 官场博弈下的绝色升迁:女组织部长的txt全集下载地址 求种田经商文,先苦后甜文,不要空间文 冰球比赛的规则是什么? 什么人阻止熊大缜平反? 怎样让开头引人入胜,结尾耐人回味? 没有金手指女主淡定过生活的种田文,类似穿越种田... 冬奥会冰球的比赛规则是什么,有什么注意事项?