问答文章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

主要是分析官方的Custom_HID 例程,强烈建议大家结合USB2.0协议去分析源代码。特别不错,分析完之后就可以修改移植了。另外,有个叫源享科技的出了一套80集的关于STM32的整套视频,对USB等高级外设讲的非常透彻,结合原子的开发板学习,效果也很好的。那视频在源享科技官网上挺贵的,哈哈,最后我在淘宝上发现那些新开的店最便宜的才10块钱。老板是个挺厉害的研究生,在学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;

4、删除不相干的获得描述符返回函数
如自定义的USB设备就不需要以下函数:
Joystick_GetReportDescriptor
Joystick_GetHIDDescriptor

四、usb_endp.c文件
1、增加之前定义的中断数据处理函数
如:
void EP1_OUT_Callback(void)
{

这些写接收代码
五、数据发送和接收,举例说明
1、数据接收
u8 DataLen;

DataLen = GetEPRxCount(ENDP1);

PMAToUserBufferCopy(TX1_buffer, ENDP1_RXADDR, DataLen);

SetEPRxValid(ENDP1);

USART1_Send(DataLen);

count_out = 1;
2、数据发送
UserToPMABufferCopy(InBuffer, GetEPTxAddr(ENDP1), 64);
SetEPTxCount(ENDP1, 64);
SetEPTxValid(ENDP1);

如果你发送数据较为频繁,每次发送前应使用GetEPTxStatus(ENDP1)检测上次发送是否完成。如果端点状态处于EP_TX_VALID,说明发送未结束,如果端点状态处于EP_TX_NAK,说明发送结束。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
前两天我崴到脚了,脚肿的很厉害,不过现在消了很多,但是淤青很厉害,怎 ... 我打球脚崴了有10多天了,告诉我怎么帮! 空中大卖场阿玛尼手表是机械表吗 Excel如何才能保留两位小数-Excel真正保留两位小数的方法 论文开题报告和前言的内容是一样的吗 小规模纳税人差额征税的会计处理? 增值税差额征税解析 差额征税的账务处理是怎样的? 大连市内有什么好玩的地方 大连有什么好玩的地方适合年轻人 哪位好心人有北京熊熊系列资源谢谢? 小便很黄,是“上火”了?还可能是哪些原因,或被你... 熊向晖的曾任职务 如何用ISP给stm32下载程序?急! 一急躁上火就小便疼痛口苦怎么办? 有哪些成就颇高但是鲜为人知的人? 男孩缺火取名烁帆可以吗? 今天发现小便发红,怎么回事,是上火了? 想请教下stm32 usb的CDC和HID类的固件库可以在官网... 陶行知基金会捐赠靠谱吗 小便很黄,是上火了,还可能是哪些原因,或被你漏... 插入stm32的时候显示无法识别的usb怎么办 跪求好人给毛熊 Adam Champ的资源。越多越好 天帆的寓意 一年来小便黄,最近还总上火怎么回事 stm32_usb_fs_device_lib_v4.1.0怎么下载 老大可以把中国的熊钙片(据说12部)发我吗?好人... 什么是发电厂厂用电的暗备用方式 上火尿频尿不尽怎么办 给儿子取名字,姓王,想带帆字,有好的建议吗?谢谢 长期口苦口臭小便赤黄,很容易上火怎么办 问一下 这个STM32板子的isp下载接口 的定义 小便发黄是上火了吗?怎么预防? 女生小便发黄有泡沫,而且有可能上火了,怎么办 stm32 usb初始化为什么到这 有没有STM32F407通过HTTP升级程序的例程 早晨第一次小便特别黄,好像上火了一样,怎么回事 stm32 usb isp怎么烧录 姓熊的级别最高领导 这个熊叫什么?谁有很多这个熊的表情包?求 这只熊叫什么名字?有人知道吗? 我们国家教育局局长是谁 求穿越或者重生种田小说都可以,不要空间异能,大... 熊大缜的惨死 冰球的比赛规则是什么?比赛时应该注意什么? 熊向晖在国民党中做到什么官,多少岁? 种田文,家长里短 冬奥会冰球项目比赛规则 官场博弈下的绝色升迁:女组织部长的txt全集下载地址 求种田经商文,先苦后甜文,不要空间文