微信公众平台怎么加粉快速加粉

2013年12月 VB大版内专家分月排行榜第二2013年3月 VB大版内专家分月排行榜第二2013年1月 VB大版内专家分月排行榜第二2012年9月 VB大版内专家分月排行榜第二2012年8月 VB大版内专家分月排行榜第二2012年7月 VB大版内专家分月排行榜第二2006年7月 VB大版内专家分月排行榜第二2006年5月 VB大版内专家分月排行榜第二
2014年9月 VB大版内专家分月排行榜第三2013年7月 VB大版内专家分月排行榜第三2013年6月 VB大版内专家分月排行榜第三2013年4月 VB大版内专家分月排行榜第三2012年11月 VB大版内专家分月排行榜第三2006年6月 VB大版内专家分月排行榜第三2006年4月 VB大版内专家分月排行榜第三2002年12月 VB大版内专家分月排行榜第三2002年11月 VB大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。查看: 2014|回复: 8
USB HID端点1发送的问题
主题帖子精华
初级会员, 积分 109, 距离下一级还需 91 积分
在线时间7 小时
最近在写USB HID的触摸屏驱动,其实也就是把鼠标的相对坐标值改成绝对坐标值,需要在端点1发送5个字节的数据。
但是问题来了,我用BUS HOUND始终只能监听到4个数据,最后一个字节始终收不到,请问大家是什么原因。
例如,发送使用这个函数
void TouchPanel_Send(void)
& u8 Mouse_Buffer[5] = {0, 0, 0, 0, 0};
& /* prepare buffer to send */
& Mouse_Buffer[0]=0x11;
& Mouse_Buffer[1]=0x22;
& Mouse_Buffer[2]=0x33;
& Mouse_Buffer[3]=0x44;
& Mouse_Buffer[4]=0x55;
& /*copy mouse position info in ENDP1 Tx Packet Memory Area*/
& UserToPMABufferCopy(Mouse_Buffer, GetEPTxAddr(ENDP1), 5);
& /* enable endpoint for transmission */
& SetEPTxValid(ENDP1);
在BUS HOUND上只能收到 0X11 0X22 0X33 0X44
回复【2楼】正点原子:
---------------------------------
可以的,这个发送数据多少和形式是根据报告描述符来的,可以自行更改的。&
原子兄,经过不懈的努力,我找出原因了,原来是void&Joystick_Reset(void)&这个函数中的&SetEPTxCount(ENDP1,&4)也要改成相应的大小,
这里我改成了SetEPTxCount(ENDP1,&5)。这个小错误导致我今天忙活了一天。呵呵,但是仍然多谢原子兄的帮助。
主题帖子精华
初级会员, 积分 109, 距离下一级还需 91 积分
在线时间7 小时
回复【2楼】正点原子:
---------------------------------
可以的,这个发送数据多少和形式是根据报告描述符来的,可以自行更改的。&
原子兄,经过不懈的努力,我找出原因了,原来是void&Joystick_Reset(void)&这个函数中的&SetEPTxCount(ENDP1,&4)也要改成相应的大小,
这里我改成了SetEPTxCount(ENDP1,&5)。这个小错误导致我今天忙活了一天。呵呵,但是仍然多谢原子兄的帮助。
主题帖子精华
金钱106963
在线时间695 小时
标准USB鼠标协议规定的数据传输就是4个字节吧.
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
高级会员, 积分 777, 距离下一级还需 223 积分
在线时间77 小时
回复【3楼】Danielyuan:
---------------------------------
我使用原子哥的战舰版调试程序,也遇到同样的问题了,但是我按照你说的方法改了也没用啊?谢谢
主题帖子精华
金钱106963
在线时间695 小时
回复【3楼】Danielyuan:
---------------------------------
谢谢分享
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
金牌会员, 积分 1229, 距离下一级还需 1771 积分
在线时间176 小时
有用,刚好用到。
主题帖子精华
初级会员, 积分 98, 距离下一级还需 102 积分
在线时间9 小时
你好,我现在的问题是:发送一个键码给PC机,不停的打印.
主题帖子精华
初级会员, 积分 98, 距离下一级还需 102 积分
在线时间9 小时
主题帖子精华
初级会员, 积分 98, 距离下一级还需 102 积分
在线时间9 小时
就是不停的发送
Powered bySTM32 USB-HID通信移植步骤 - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 2703|回复: 10
STM32 USB-HID通信移植步骤
在线时间1 小时
主题帖子好友
新手上路, 积分 43, 距离下一级还需 7 积分
新手上路, 积分 43, 距离下一级还需 7 积分
发现很多人对STM32的USB通信很感兴趣。要将USB的通信协议搞懂确实是一个比较漫长的过程。但是USB的HID通信无论是上位机的设计还是STM32程序的编程都非常的简单。只是我想很多人都不知道而已。这篇文章的目的是让大家以最短的时间将USB加到你的设备中。如果想学得更深就靠大家。
HID只是适合低速传输,其理论上可以达到64KB/S,但多由于windows系统和硬件的关系一般达不到这个传输数度。但这个速度对于一般系统的控制和数据传输都已经足够了,而且是免驱,省去了很多麻烦。如果您需要高速传输可参考我的另外一篇文章《STM32的USB例程修改步骤》文章在
一、安装完MDK后请打开C:/Keil/ARM/Examples/ST/STM32F10xUSBLib/Demos路径,将Custom_HID在同一个目录下复制一份,如果你要放到其他路径你需要在MDK Options for target的C/C++中添加USB的头文件路径(MDK下的/INC/ST/STM32F10x/USB)。
二、打开usb_desc.c文件,该文件主要包含的端点描述符、设备描述符、配置描述符和字符描述符等。具体请大家参考其他资料了,这里主要说几个常用。
u8 DeviceDescriptor[SIZ_DEVICE_DESC]为USB设备描述符。当中的
0x83, /*idVendor (0x0483)*/
0x50, /*idProduct = 0x5750*/
//idVender字段。厂商ID号,我们这里取0x0483,仅供实验用。
//实际产品不能随便使用厂商ID号,必须跟USB协会申请厂商ID号。
//注意小端模式,低字节在先。
//idProduct字段。产品ID号,我们这里取0x5750。
//注意小端模式,低字节应该在前。
const u8 ConfigDescriptor[SIZ_CONFIG_DESC]是配置描述符,注意如下
USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: */
0x81, /* bEndpointAddress: Endpoint Address (IN) */
0x03, /* bmAttributes: Interrupt endpoint */
0x02, /* wMaxPacketSize: 2 Bytes max */
0x20, /* bInterval: Polling Interval (32 ms) */
0x07, /* bLength: Endpoint Descriptor size */
USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: */
/* Endpoint descriptor type */
0x01, /* bEndpointAddress: */
/* Endpoint Address (OUT) */
0x03, /* bmAttributes: Interrupt endpoint */
0x02, /* wMaxPacketSize: 2 Bytes max */
0x20, /* bInterval: Polling Interval (20 ms) */
上面包含了“输入端点描述符”和“输出端点描述符”。
//wMaxPacketSize字段。该端点的最大包长。
//bInterval字段。端点查询的时间,
为了实现更高速的通信我们修改如下:
/******************** Descriptor of endpoint ********************/
0x07, /*bLength: Endpoint Descriptor size*/
USB_ENDPOINT_DESCRIPTOR_TYPE, /*bDescriptorType:*/
0x81, /*bEndpointAddress: Endpoint Address (IN)*/
0x03, /*bmAttributes: Interrupt endpoint*/
0x40, /*wMaxPacketSize: 64 Byte max */
0x0A, /*bInterval: Polling Interval (10 ms)*/
/******************** Descriptor of endpoint ********************/
0x07, /*bLength: Endpoint Descriptor size*/
USB_ENDPOINT_DESCRIPTOR_TYPE, /*bDescriptorType:*/
0x01, /*bEndpointAddress: Endpoint Address (OUT)*/
0x03, /*bmAttributes: Interrupt endpoint*/
0x40, /*wMaxPacketSize: 64 Byte max */
0x0A, /*bInterval: Polling Interval (10 ms)*/
const u8 ReportDescriptor[SIZ_REPORT_DESC]为HID专用的报告描述符,具体的大家就参考资料了,这里可以直接复制了。
const u8 CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC] =
0x05, 0xFF, // USAGE_PAGE(User define)
0x09, 0xFF, // USAGE(User define)
0xa1, 0x01, // COLLECTION (Application)
0x05, 0x01, // USAGE_PAGE(1)
0x19, 0x00, // USAGE_MINIMUM(0)
0x29, 0xFF, // USAGE_MAXIMUM(255)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0xFF, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x40, // REPORT_COUNT (64)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x05, 0x02, // USAGE_PAGE(2)
0x19, 0x00, // USAGE_MINIMUM (0)
0x29, 0xFF, // USAGE_MAXIMUM (255)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0xFF, // LOGICAL_MAXIMUM (255)
0x95, 0x08, // REPORT_COUNT (8)
0x75, 0x40, // REPORT_SIZE (64)
0x91, 0x02, // OUTPUT (Data,Var,Abs)
0xc0 // END_COLLECTION
}; /* ReportDescriptor */
const u8 CustomHID_StringVendor[CUSTOMHID_SIZ_STRING_VENDOR]
const u8 StringProduct[SIZ_STRING_PRODUCT]
const u8 StringSerial[SIZ_STRING_SERIAL]
分别是“厂商字符”、“产品字符”、“产品序列号”,这些将在USB HID设备加载的时候显示。但是这需要这些字符要求为Unicode编码,你需要将你要显示的字符先转为Unicode编码。你可以到http://computer00.21ic.org/user1/2198/archives/.html转换。最好大家还要根据各个数组的长度修改如下定义。
#define CUSTOMHID_SIZ_REPORT_DESC 39
#define CUSTOMHID_SIZ_STRING_VENDOR 64
#define CUSTOMHID_SIZ_STRING_PRODUCT 28
#define CUSTOMHID_SIZ_STRING_SERIAL 26
三、打开hw_config.c文件,将那些没有的函数删除,只保留如下函数
a) Set_System(void)
b) void Set_USBClock(void)
c) void USB_Interrupts_Config(void)
d) void USB_Cable_Config (FunctionalState NewState)
特别要注意最后一个函数,其主要作用是控制USB的上拉电阻,让电脑检测USB设备是否连接的。
四、打开stm32f10x_it.c文件,把EXTI15_10_IRQHandler等中断内的代码删除。
打开usb_prop.c文件,修改如下:
void CustomHID_Reset(void)
/* Set Joystick_DEVICE as not configured */
pInformation-&Current_Configuration = 0;
pInformation-&Current_Interface = 0;/*the default Interface*/
SetBTABLE(BTABLE_ADDRESS);
/* Initialize Endpoint 0 */
SetEPType(ENDP0, EP_CONTROL);
SetEPTxStatus(ENDP0, EP_TX_STALL);
SetEPRxAddr(ENDP0, ENDP0_RXADDR);
SetEPTxAddr(ENDP0, ENDP0_TXADDR);
Clear_Status_Out(ENDP0);
SetEPRxCount(ENDP0, Device_Property.MaxPacketSize);
SetEPRxValid(ENDP0);
/* Initialize Endpoint 1 */
SetEPType(ENDP1, EP_INTERRUPT);
SetEPTxAddr(ENDP1, ENDP1_TXADDR);
SetEPTxCount(ENDP1, 64);
SetEPRxStatus(ENDP1, EP_RX_DIS);
SetEPTxStatus(ENDP1, EP_TX_NAK);
/* Initialize Endpoint 1 */
// SetEPType(ENDP1, EP_INTERRUPT);
SetEPRxAddr(ENDP1, ENDP1_RXADDR);
SetEPRxCount(ENDP1, 64);
// SetEPTxStatus(ENDP1, EP_TX_DIS);
SetEPRxStatus(ENDP1, EP_RX_VALID);
/* Set this device to response on default address */
SetDeviceAddress(0);
五、usb_endp.c文件
void EP1_OUT_Callback(void)
这些写接收代码
六、数据发送和接收,举例说明
1、数据接收
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,说明发送结束。
(by xidongs)
欢迎加入STM32/STM8社区技术交流群:& & &STM32Lxx开发群:
在线时间168 小时
主题帖子好友
金牌会员, 积分 2317, 距离下一级还需 2683 积分
金牌会员, 积分 2317, 距离下一级还需 2683 积分
谢谢分享,标记一下
在线时间547 小时
ST金币1979
主题帖子好友
金牌会员, 积分 4749, 距离下一级还需 251 积分
金牌会员, 积分 4749, 距离下一级还需 251 积分
欢迎加入STM32/STM8社区技术交流群:& & &STM32Lxx开发群:
在线时间2 小时
主题帖子好友
初级会员, 积分 131, 距离下一级还需 69 积分
初级会员, 积分 131, 距离下一级还需 69 积分
谢谢分享,标记一下
在线时间125 小时
ST金币1528
主题帖子好友
金牌会员, 积分 1357, 距离下一级还需 3643 积分
金牌会员, 积分 1357, 距离下一级还需 3643 积分
谢谢分享. 学习了
欢迎加入STM32/STM8社区技术交流群:& & &STM32Lxx开发群:
在线时间215 小时
ST金币1366
主题帖子好友
金牌会员, 积分 2298, 距离下一级还需 2702 积分
金牌会员, 积分 2298, 距离下一级还需 2702 积分
谢谢,分享
在线时间7 小时
主题帖子好友
中级会员, 积分 276, 距离下一级还需 224 积分
中级会员, 积分 276, 距离下一级还需 224 积分
支持下,标记下!
欢迎加入STM32/STM8社区技术交流群:& & &STM32Lxx开发群:
在线时间4 小时
主题帖子好友
新手上路, 积分 42, 距离下一级还需 8 积分
新手上路, 积分 42, 距离下一级还需 8 积分
在线时间17 小时
主题帖子好友
初级会员, 积分 112, 距离下一级还需 88 积分
初级会员, 积分 112, 距离下一级还需 88 积分
谢谢分享,标记一下
欢迎加入STM32/STM8社区技术交流群:& & &STM32Lxx开发群:
在线时间2 小时
主题帖子好友
新手上路, 积分 25, 距离下一级还需 25 积分
新手上路, 积分 25, 距离下一级还需 25 积分
谢谢,已经移植可以识别,但是上位机软件怎么写啊
站长推荐 /3
为让大家更好的使用STM32单片机,特别是学生群体有进一步的提升,特推出本次助学计划。愿开发板可以物尽其用,发挥最大价值。
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered by如何实现STM32F407的USB_OTG_FS与PC用bulk方式传输数据? - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 3951|回复: 10
如何实现STM32F407的USB_OTG_FS与PC用bulk方式传输数据?
在线时间11 小时
主题帖子好友
初级会员, 积分 72, 距离下一级还需 128 积分
初级会员, 积分 72, 距离下一级还需 128 积分
本人利用cube生成的USB_MSC(设备模式)的工程,如何在STM32F407的USB_MSC例程上修改以实现USB_OTG_FS与PC之间的bulk模式传输数据,请做过的大侠指导一下~
欢迎加入STM32/STM8社区技术交流群:& & &STM32Lxx开发群:
在线时间11 小时
主题帖子好友
初级会员, 积分 72, 距离下一级还需 128 积分
初级会员, 积分 72, 距离下一级还需 128 积分
金币不多,希望做过的大侠可以指导一下~
在线时间86 小时
主题帖子好友
又OTG,又PC。请问,你是要做Host/Device哪一种?
欢迎加入STM32/STM8社区技术交流群:& & &STM32Lxx开发群:
在线时间11 小时
主题帖子好友
初级会员, 积分 72, 距离下一级还需 128 积分
初级会员, 积分 72, 距离下一级还需 128 积分
又OTG,又PC。请问,你是要做Host/Device哪一种?
做设备,只要实现和PC的bulk模式传输数据就行,就是用USB的FS模式和PC之间通信
在线时间38 小时
主题帖子好友
高级会员, 积分 513, 距离下一级还需 487 积分
高级会员, 积分 513, 距离下一级还需 487 积分
不太懂,支持一下
欢迎加入STM32/STM8社区技术交流群:& & &STM32Lxx开发群:
在线时间11 小时
主题帖子好友
初级会员, 积分 72, 距离下一级还需 128 积分
初级会员, 积分 72, 距离下一级还需 128 积分
不太懂,支持一下
谢了,希望得到更多人的支持
在线时间14 小时
主题帖子好友
初级会员, 积分 171, 距离下一级还需 29 积分
初级会员, 积分 171, 距离下一级还需 29 积分
正在学习stm32 USB希望楼主早点搞出来分享下
欢迎加入STM32/STM8社区技术交流群:& & &STM32Lxx开发群:
在线时间2 小时
主题帖子好友
新手上路, 积分 23, 距离下一级还需 27 积分
新手上路, 积分 23, 距离下一级还需 27 积分
可以先修改协议部分,也就是在usbd_msc_core.c中的 0x08,& &/* bInterfaceClass: MSC Class */
&&0x06,& &/* bInterfaceSubClass : SCSI transparent*/
&&0x50,& &/* nInterfaceProtocol */修改为0ff,0ff,0ff,自定义的设备,然后还有其他的··········
在线时间2 小时
主题帖子好友
新手上路, 积分 23, 距离下一级还需 27 积分
新手上路, 积分 23, 距离下一级还需 27 积分
然后在修改主函数部分可以调用usbd_msc_bot.c中的static void&&MSC_BOT_SendData(USB_OTG_CORE_HANDLE&&*pdev,
& && && && && && && && && && &uint8_t* buf,
& && && && && && && && && && &uint16_t len)来发送发送数据 ,接收数据在usb_dcd.c中的uint32_t& &DCD_EP_PrepareRx( USB_OTG_CORE_HANDLE *pdev,
& && && && && && && && && & uint8_t& &ep_addr,
& && && && && && && && && & uint8_t *pbuf,& && && && && && && && &
& && && && && && && && && & uint16_t&&buf_len)
& & 来接收数据··················
欢迎加入STM32/STM8社区技术交流群:& & &STM32Lxx开发群:
在线时间255 小时
主题帖子好友
金牌会员, 积分 2095, 距离下一级还需 2905 积分
金牌会员, 积分 2095, 距离下一级还需 2905 积分
这个不是很懂但是能帮你顶
站长推荐 /3
为让大家更好的使用STM32单片机,特别是学生群体有进一步的提升,特推出本次助学计划。愿开发板可以物尽其用,发挥最大价值。
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered by

我要回帖

更多关于 微信公众平台怎么加粉 的文章

 

随机推荐