stm32 usb中断要怎么stm32无法进入中断

USB 数据接收中断-STM32F系列-意法半导体STM32/STM8技术社区
所属分类:
浏览数:1713
提问时间:
问:我在调试STM32的USB实例Virtual_COM_Port的时候,设置的接收和发送端点的wMaxPacketSize为64,当PC机发送64个字节的时候,STM32的USB接收函数如下:
void EP3_OUT_Callback(void)
Flag_USBDataReceive=1;
count_out = GetEPRxCount(ENDP3);
PMAToUserBufferCopy(buffer_out, ENDP3_RXADDR, count_out);
for(i=0;i&count_i++)
printf(&\r\n receive data[%d] = 0X%x&,i,buffer_out[i]);
printf(&\r\n count_out = %d &,count_out);
SetEPRxValid(ENDP3);
第一次的count_out为64,打印的数据为接收到的64字节,第二次中断时的count_out为0,问题是:最大wMaxPacketSize为64,为什么PC端发送一个64字节的数据MCU的 EP3_OUT_Callback会执行两次(即中断两次),而且第二次中断时的count_out为0?
答:发送完以后,会清除并退出中断。只要数据收发正常就没事。
回答时间:答:我最近也在学USB 学的是圈圈教你玩USB,它里面好像是说你发送的数据长度是设置的包长(wMaxPacketSize)倍数时,还得发送个0长度的包,来确定发送完。如过你发的字节比最大包长小,就只收一次。如果比最大包长大,就发几次。只要不是wMaxPacketSize倍数,就不用再发0长度的包来确认数据接收完。呵呵呵 不知道我有没有记错记全
回答时间:请后回答。
本书对28个实例进行了详细讲解,包括MDK使用及技巧等。实例代码全部为操作寄存器的方式实现。
本书通过mbed介绍嵌入式系统设计的所有主要议题,便于读者快速掌握嵌入式系统的设计方法。
本书围绕库的分析和使用,对综合运用固件库开发项目给出了具体范例,循序渐进、系统地掌握。
Tel: 3-8064
备案号: 苏ICP备号-221ic官方微信-->
后使用快捷导航没有帐号?
ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
请完成以下验证码
查看: 6004|回复: 5
STM32 的USB中断,请教大侠
&&已结帖(0)
主题帖子积分
高级技术员, 积分 559, 距离下一级还需 441 积分
高级技术员, 积分 559, 距离下一级还需 441 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
高级技术员, 积分 559, 距离下一级还需 441 积分
高级技术员, 积分 559, 距离下一级还需 441 积分
USB控制器有两个中断,一个高优先级一个低优先级,在什么情况下响应高优先级中断,在什么情况下响应低优先级中断呢是不是在初始化的时候就要配制好响应哪个中断初学USB,请大家不要笑话。
主题帖子积分
主题帖子积分
专家等级:结帖率:27%打赏:0.00受赏:12.00
主题帖子积分
STM32的USB中断说明
这个问题确实没有在STM32的手册中说清楚,请看我的博客中的解释:
主题帖子积分
高级技术员, 积分 559, 距离下一级还需 441 积分
高级技术员, 积分 559, 距离下一级还需 441 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
高级技术员, 积分 559, 距离下一级还需 441 积分
高级技术员, 积分 559, 距离下一级还需 441 积分
谢谢香主,原来是这样。。。
STM32的USB中断说明STM32的USB模块可以产生三种中断:USB唤醒中断、USB高优先级中断和USB低优先级中断,在STM32的参考手册中没有详细说明这三种中断对应哪些事件,现说明如下:1)USB唤醒中断:在中断向量表中的位置是42。这个中断在USB设备从暂停模式唤醒时产生,唤醒事件由USB_ISTR寄存器的WKUP位标识。2)USB高优先级中断:在中断向量表中的位置是19。这个中断仅由USB同步(Isochronous)模式传输或双缓冲块(Bulk)传输模式下的正确传输事件产生,正确传输事件由USB_ISTR寄存器的CTR位标识。3)USB低优先级中断:在中断向量表中的位置是20。这个中断由所有其它的USB事件产生,例如正确传输(不包括同步模式和双缓冲块模式)、USB复位等,事件标志位在USB_ISTR寄存器中。在STM32的USB开发包的例子中包含了上述中断的处理,例如在USB扬声器的例子中,CTR_HP函数处理USB高优先级中断;在所有例子中都有USB_Istr()函数处理USB低优先级中断。
主题帖子积分
高级技术员, 积分 559, 距离下一级还需 441 积分
高级技术员, 积分 559, 距离下一级还需 441 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
高级技术员, 积分 559, 距离下一级还需 441 积分
高级技术员, 积分 559, 距离下一级还需 441 积分
在USB初始化中是不是就要确定它采用哪种传输模式
&&如果USB传输采用双缓冲传输模式,是不是在USB初始化里就要配制好。typedef&struct&_DEVICE_INFO{&&u8&USBbmRequestT&&&&&&&/*&bmRequestType&*/&&u8&USBbR&&&&&&&&&&&&/*&bRequest&*/&&u16_u8&USBwV&&&&&&&&&/*&wValue&*/&&u16_u8&USBwI&&&&&&&&&/*&wIndex&*/&&u16_u8&USBwL&&&&&&&&/*&wLength&*/&&u8&ControlS&&&&&&&&&&&/*&of&type&CONTROL_STATE&*/&&u8&Current_F&&u8&Current_C&&&/*&Selected&configuration&*/&&u8&Current_I&&&&&&&/*&Selected&interface&of&current&configuration&*/&&u8&Current_AlternateS/*&Selected&Alternate&Setting&of&current&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&interface*/&&ENDPOINT_INFO&Ctrl_I}DEVICE_INFO;DEVICE_INFO&*pI/********************************************************************************&Function&Name&&:&USB_Init*&Description&&&&:&USB&system&initialization*&Input&&&&&&&&&&:&None.*&Output&&&&&&&&&:&None.*&Return&&&&&&&&&:&None.*******************************************************************************/void&USB_Init(void){&&pInformation&=&&Device_I&&pInformation-&gtControlState&=&2;&&pProperty&=&&Device_P&&pUser_Standard_Requests&=&&User_Standard_R&&/*&Initialize&devices&one&by&one&*/&&pProperty-&gtInit();}光盘里的程序真是看不懂,这段里面能不能体现出它是用的哪种传输模式??
主题帖子积分
高级技术员, 积分 559, 距离下一级还需 441 积分
高级技术员, 积分 559, 距离下一级还需 441 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
高级技术员, 积分 559, 距离下一级还需 441 积分
高级技术员, 积分 559, 距离下一级还需 441 积分
USB初始化要包括哪些内容呢。。
主题帖子积分
初级工程师, 积分 2492, 距离下一级还需 508 积分
初级工程师, 积分 2492, 距离下一级还需 508 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
初级工程师, 积分 2492, 距离下一级还需 508 积分
初级工程师, 积分 2492, 距离下一级还需 508 积分
问几个问题:
1.如果只有单缓冲区的bulk传输,是不是就不需要HP中断了?
2.如果我不用中断来处理数据传输,用轮询的方式来查询CTR、等标志继而做相关处理是否可以?ISTR中只有一个端点域描述当前传输完成的端点,是否会丢失其他传输完毕的端点标志和端点号?
荣誉元老奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
技术领袖奖章
人才类勋章网站已改版,请使用新地址访问:
UsbHid 实现的是STM32双向USB通讯,开了两个端口,USB中断模式 USB develop 252万源代码下载-
&文件名称: UsbHid& & [
& & & & &&]
&&所属分类:
&&开发工具: C-C++
&&文件大小: 506 KB
&&上传时间:
&&下载次数: 69
&&提 供 者:
&详细说明:实现的是STM32双向USB通讯,开了两个端口,USB中断模式-Achieve the STM32 bi-directional USB communication open two ports, USB interrupt mode
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&UsbHid\Applications\main.c&&......\............\stm32f4xx_conf.h&&......\............\stm32f4xx_it.c&&......\............\stm32f4xx_it.h&&......\Compiler\Project.uvopt&&......\........\Project.uvproj&&......\........\删除.cmd&&......\Drivers\delay.c&&......\.......\delay.h&&......\.......\dr_led.c&&......\.......\dr_led.h&&......\.......\dr_usart.c&&......\.......\dr_usart.h&&......\Libraries\CMSIS\Include\arm_common_tables.h&&......\.........\.....\.......\arm_math.h&&......\.........\.....\.......\core_cm4.h&&......\.........\.....\.......\core_cm4_simd.h&&......\.........\.....\.......\core_cmFunc.h&&......\.........\.....\.......\core_cmInstr.h&&......\.........\.....\ST\STM32F4xx\Include\stm32f4xx.h&&......\.........\.....\..\.........\.......\system_stm32f4xx.h&&......\.........\.....\..\.........\Source\startup_stm32f4xx.s&&......\.........\.....\..\.........\......\system_stm32f4xx.c&&......\.........\STM32F4xx_StdPeriph_Driver\inc\misc.h&&......\.........\..........................\...\stm32f4xx_adc.h&&......\.........\..........................\...\stm32f4xx_can.h&&......\.........\..........................\...\stm32f4xx_crc.h&&......\.........\..........................\...\stm32f4xx_cryp.h&&......\.........\..........................\...\stm32f4xx_dac.h&&......\.........\..........................\...\stm32f4xx_dbgmcu.h&&......\.........\..........................\...\stm32f4xx_dcmi.h&&......\.........\..........................\...\stm32f4xx_dma.h&&......\.........\..........................\...\stm32f4xx_exti.h&&......\.........\..........................\...\stm32f4xx_flash.h&&......\.........\..........................\...\stm32f4xx_fsmc.h&&......\.........\..........................\...\stm32f4xx_gpio.h&&......\.........\..........................\...\stm32f4xx_hash.h&&......\.........\..........................\...\stm32f4xx_i2c.h&&......\.........\..........................\...\stm32f4xx_iwdg.h&&......\.........\..........................\...\stm32f4xx_pwr.h&&......\.........\..........................\...\stm32f4xx_rcc.h&&......\.........\..........................\...\stm32f4xx_rng.h&&......\.........\..........................\...\stm32f4xx_rtc.h&&......\.........\..........................\...\stm32f4xx_sdio.h&&......\.........\..........................\...\stm32f4xx_spi.h&&......\.........\..........................\...\stm32f4xx_syscfg.h&&......\.........\..........................\...\stm32f4xx_tim.h&&......\.........\..........................\...\stm32f4xx_usart.h&&......\.........\..........................\...\stm32f4xx_wwdg.h&&......\.........\..........................\src\misc.c&&......\.........\..........................\...\stm32f4xx_adc.c&&......\.........\..........................\...\stm32f4xx_can.c&&......\.........\..........................\...\stm32f4xx_crc.c&&......\.........\..........................\...\stm32f4xx_cryp.c&&......\.........\..........................\...\stm32f4xx_cryp_aes.c&&......\.........\..........................\...\stm32f4xx_cryp_des.c&&......\.........\..........................\...\stm32f4xx_cryp_tdes.c&&......\.........\..........................\...\stm32f4xx_dac.c&&......\.........\..........................\...\stm32f4xx_dbgmcu.c&&......\.........\..........................\...\stm32f4xx_dcmi.c&&......\.........\..........................\...\stm32f4xx_dma.c&&......\.........\..........................\...\stm32f4xx_exti.c&&......\.........\..........................\...\stm32f4xx_flash.c&&......\.........\..........................\...\stm32f4xx_fsmc.c&&......\.........\..........................\...\stm32f4xx_gpio.c&&......\.........\..........................\...\stm32f4xx_hash.c&&......\.........\..........................\...\stm32f4xx_hash_md5.c&&......\.........\..........................\...\stm32f4xx_hash_sha1.c&&......\.........\..........................\...\stm32f4xx_i2c.c&&......\.........\..........................\...\stm32f4xx_iwdg.c&&......\.........\..........................\...\stm32f4xx_pwr.c&&......\.........\..........................\...\stm32f4xx_rcc.c&&......\.........\..........................\...\stm32f4xx_rng.c&&......\.........\..........................\...\stm32f4xx_rtc.c&&......\.........\..........................\...\stm32f4xx_sdio.c&&......\.........\..........................\...\stm32f4xx_spi.c&&......\.........\..........................\...\stm32f4xx_syscfg.c&&......\.........\..........................\...\stm32f4xx_tim.c&&......\.........\..........................\...\stm32f4xx_usart.c&&......\.........\..........................\...\stm32f4xx_wwdg.c&&......\.........\....._USB_Device_Library\Class\audio\inc\usbd_audio_core.h&&......\.........\........................\.....\.....\...\usbd_audio_out_if.h&&......\.........\........................\.....\.....\src\usbd_audio_core.c&&......\.........\........................\.....\.....\...\usbd_audio_out_if.c&&......\.........\........................\.....\cdc\inc\usbd_cdc_core.h&&......\.........\........................\.....\...\...\usbd_cdc_if_template.h&&......\.........\........................\.....\...\src\usbd_cdc_core.c&&......\.........\........................\.....\...\...\usbd_cdc_if_template.c&&......\.........\........................\.....\dfu\inc\usbd_dfu_core.h&&......\.........\........................\.....\...\...\usbd_dfu_mal.h&&......\.........\........................\.....\...\...\usbd_flash_if.h&&......\.........\........................\.....\...\...\usbd_mem_if_template.h&&......\.........\........................\.....\...\...\usbd_otp_if.h&&......\.........\........................\.....\...\src\usbd_dfu_core.c&&......\.........\........................\.....\...\...\usbd_dfu_mal.c&&......\.........\........................\.....\...\...\usbd_flash_if.c&&......\.........\........................\.....\...\...\usbd_mem_if_template.c&&......\.........\........................\.....\...\...\usbd_otp_if.c&&......\.........\........................\.....\hid\inc\usbd_hid_core.h&&......\.........\........................\.....\...\src\usbd_hid_core.c
&[]:和说明完全不符
&近期下载过的用户:
&&&&&&&&&&&&&&&[]
&相关搜索:
&输入关键字,在本站252万海量源码库中尽情搜索:
&[] - 上位机和USB通讯的说明,介绍了上位机和USB通信的方案
&[] - 在VC6.0下实现的基本神经网络算法实现的字符识别系统,可以识别一张图片中0-9的数字
&[] - MAXQ1103编程代码的实列,MAXQ1103加密芯片的模块使用代码
&[] - 富士通芯片 MB9BF506R usb 通信例程 HOST
&[] - 应用DSP6416的TCP进行turbo码解码例程
&[] - usb枚举过程详解,usb开发必备资料,非常有用!
&[] - STM32 USB HID 范例
STM32_Init.c 中有Configuration Wizard
&[] - VB HID类通讯源码。具有中断通道读写数据。VID,PID需要自已手动添加。
&[] - 这个例子实现的是光学摄像头0V7725在无需FIFO时驱动的代码,可以直接使用
&[] - OmniVision OV7740的一份驱动程序。stm32的usb与上位机通过中断传输进行通信控制led - UAlter的博客 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
stm32的usb与上位机通过中断传输进行通信控制led
已有 1829 次阅读 12:41
一 上位机的实现USB上位机使用c#编写,使用到是著名的USB开源库LibUsbDotNet,驱动也是通过LibUsbDotNet自带的InfWizard.exe生成的,实现效果如图1所示,stm32&上电时,软件能够自动检测并显示相关信息,点击亮按钮,上位机通过端点1发一个字节到下位机stm32板上并控制板上的led,stm32收到数据后通过端点2上传2字节的反馈信息。图1&实现效果图代码如下:&using&Susing&System.Collections.Gusing&ponentMusing&System.Dusing&System.Dusing&System.Lusing&System.Tusing&System.Windows.F&using&LibUsbDotNusing&;using&LibUsbDotNet.Musing&LibUsbDotNet.DeviceN&namespace&stm32_USB_led控制{&&&&&public&partial&class&Form1&:&Form&&&&{&&&&&&&&const&&ushort&PID&=&0x5712;&&/*产品ID*/&&&&&&&&const&&ushort&VID&=&0x0483;&&/*厂商ID*/&&&&&&&&private&&UsbDevice&stm32UsbD&&&&&&&&private&UsbDeviceFinder&stm32UsbFinder&=&new&UsbDeviceFinder(VID,&PID);&&&&&&&&private&IDeviceNotifier&UsbDeviceNotifier&=&DeviceNotifier.OpenDeviceNotifier();&&&&&&&&private&UsbEndpointWriter≀&&&&&&&&private&UsbEndpointReader&RD;&&&&&&&&public&Form1()&&&&&&&&{&&&&&&&&&&&&&InitializeComponent();&&&&&&&&&&&&&&&&&&&&}&&&&&&&&//窗体载入事件&&&&&&&&private&void&Form1_Load(object&sender,&EventArgs&e)&&&&&&&&{&&&&&&&&&&&&UsbDeviceNotifier.OnDeviceNotify&+=&OnDeviceNotifyE&&&&&&&&&&&&FindUsbDevice();&&&&&&&&}&&&&&&&&//设备通知事件&&&&&&&&private&void&OnDeviceNotifyEvent(object&sender,&DeviceNotifyEventArgs&e)&&&&&&&&{&&&&&&&&&&&&UsbRegDeviceList&DeviceList&=&UsbDevice.AllLibUsbD&&&&&&&&&&&&UsbRegistry&RegInfo&=&DeviceList.Find(stm32UsbFinder);&&&&&&&&&&&&if&(e.EventType&==&EventType.DeviceArrival)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&//匹配插入的设备&&&&&&&&&&&&&&&&if&(e.Device.IdProduct&==&PID&&&&e.Device.IdVendor&==&VID)&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&try&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&/*打开Usb----------------------------------------------------------------*/&&&&&&&&&&&&&&&&&&&&&&&&stm32UsbDevice&=&UsbDevice.OpenUsbDevice(stm32UsbFinder);&&&&&&&&&&&&&&&&&&&&&&&&/*打开端点2,类型为中断端点--------------------------------------*/&&&&&&&&&&&&&&&&&&&&&&&&WR&=&stm32UsbDevice.OpenEndpointWriter(WriteEndpointID.Ep02,&EndpointType.Interrupt);&&&&&&&&&&&&&&&&&&&&&&&&RD&=&stm32UsbDevice.OpenEndpointReader(ReadEndpointID.Ep01);&&&&&&&&&&&&&&&&&&&&&&&&RD.DataReceived&+=&(OnRxEndPointData);&&&&&&&&&&&&&&&&&&&&&&&&RD.DataReceivedEnabled&=&true;&&&&&&&&&&&
&label.Text&=&"连接信息:设备已连接";&&&&&&&&&&&&&&&&&&&
&Manufaturer.Text&=&"生产厂商:"&+&RegInfo.FullN&&&&&&&&&&&&&&&&&&&& ProductDecrip.Text&=&"产品描述:"&+&RegInfo.N&&&&&&&&&&&&&&&&&&&& SerialNum.Text&=&"序列号:"&+&e.Device.SerialN&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&catch&(Exception)&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&MessageBox.Show("USB打开失败!");&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&&&&&else&if&(e.EventType&==&EventType.DeviceRemoveComplete)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&//匹配移除的设备&&&&&&&&&&&&&&&&if&(e.Device.IdProduct&==&PID&&&&e.Device.IdVendor&==&VID)&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&label.Text&=&"连接信息:设备已移除";&&&&&&&&&&&&&&&&&&&&Manufaturer.Text&=&"生产厂商:";&&&&&&&&&&&&&&&&&&&&ProductDecrip.Text&=&"产品描述:"&;&&&&&&&&&&&&&&&&&&&&SerialNum.Text&=&"序列号:"&;&&
&CloseUSB();&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&}&&&&&&&&/*寻找指定VID的USB设备,只在软件初始化时用到----------------------*/&&&&&&&&bool&FindUsbDevice()&&&&&&&&{&&&&&&&&&&&&UsbRegDeviceList&DeviceList&=&UsbDevice.AllLibUsbD&&&&&&&&&&&&UsbRegistry&&RegInfo&=&&DeviceList.Find(stm32UsbFinder);&&&&&&&&&&&&if&(RegInfo&!=&null)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&try&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&/*打开Usb---------------------------------------*/&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&stm32UsbDevice&=&UsbDevice.OpenUsbDevice(stm32UsbFinder);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/*打开端点2,类型为中断端点----------------------*/&&&&&&&&&&&&&&&&&&&&WR&=&stm32UsbDevice.OpenEndpointWriter(WriteEndpointID.Ep02,&EndpointType.Interrupt);&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&catch&(Exception)&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&MessageBox.Show("USB打开失败!");&&&&&&&&&&&&&&&&&&&&return&false;&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&label.Text&=&"连接信息:设备已连接";&&&&&&&&&&&&&&&&Manufaturer.Text&=&"生产厂商:"&+&RegInfo.FullN&&&&&&&&&&&&&&&&ProductDecrip.Text&=&"产品描述:"+&RegInfo.N&&&&&&&&&&&&&&&&SerialNum.Text&=&"序列号:"&+&RegInfo.SymbolicN&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&return&true;&&&&&&&&&&&&}&&&&&&&&&&&&else&&&&&&&&&&&&{&&&&&&&&&&&&&&&&label.Text&=&"连接信息:已断开连接";&&&&&&&&&&&&&&&&Manufaturer.Text&=&"生产厂商:";&&&&&&&&&&&&&&&&ProductDecrip.Text&=&"产品描述:";&&&&&&&&&&&&&&&&SerialNum.Text&=&"序列号:";&&&&&&&&&&&&}&&&&&&&&&&&&return&false;&&&&&&&&}&&&&&&&&//关闭USB设备&&&&&&&&private&void&CloseUSB()&&&&&&&&{&&&&&&&&&&&&if&(!ReferenceEquals(WR,&null))&&&&&&&&&&&&&&&&WR.Dispose();&&&&&&&&&&&&if&(!ReferenceEquals(stm32UsbDevice,&null))&&&&&&&&&&&&&&&&stm32UsbDevice.Close();&&&&&&&&&}&&&&&&&&private&void&button_Click(object&sender,&EventArgs&e)&&&&&&&&{&&&&&&&&&&&&byte[]&txBuf&=&new&byte[2];&&&&&&&&&&&&int&i=0;&&&&&&&&&&&&if&(led.Value)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&led.Value&=&false;&&&&&&&&&&&&&&&&txBuf[0]&=&0x00;&&&&&&&&&&&&&&&&button.Text&=&"亮";&&&&&&&&&&&&}&&&&&&&&&&&&&&&else&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&led.Value&=&true;&&&&&&&&&&&&&&&&txBuf[0]&=&0x01;&&&&&&&&&&&&&&&&button.Text&=&"灭";&&&&&&&&&&&&}&&&&&&&&&&&&if&(stm32UsbDevice.IsOpen)&&&&&&&&&&&&WR.Write(txBuf,&1000,&out&i);&&&&&&&&}&&&&&&&&&//USB接收事件&&&&&&&&private&static&void&OnRxEndPointData(object&sender,&EndpointDataEventArgs&e)&&&&&&&&{&&&&&&&&&&&&MessageBox.Show("收到数据:"+e.Count.ToString()+"Bytes");&&&&&&&&}&&&&&&&&private&void&Form1_FormClosed(object&sender,&FormClosedEventArgs&e)&&&&&&&&{&&&&&&&&&&&&CloseUSB();&&&&&&&&}&&&&}}&二 下位机的实现收发回调函数如下void&EP1_IN_Callback(void){ GUI_DispStringAt("send&complete!",60,200);}void&EP2_OUT_Callback(void){ u8&DataBuf[8]; u8& len&=&USB_SIL_Read(EP2_OUT,DataBuf); SetEPRxValid(ENDP2); if(DataBuf[0]&==&1) {
GPIOE-&ODR&|=&&(1&&0);
GUI_DispStringAt("led&on!&&",60,120); } else&if&(DataBuf[0]&==&0) {
GUI_DispStringAt("led&off!&",60,120);
GPIOE-&ODR&=&~GPIOD-&ODR; } GUI_DispDecAt(len,60,150,2); GUI_DispString("Bytes");&&&&/*返回2字节到上位机---------------------------------------------------------------------*/ USB_SIL_Write(EP1_IN,DataBuf,2); SetEPTxValid(ENDP1);}设备描述符定义如下&/*&USB标准设备描述符(固定为18个字节)------------------------------------------------*/const&uint8_t&USB_DeviceDesc[18]&={&&&&18,&&&&&&&&&&&&&&&&&&&&&&&&&/*设备描述符长度--------------------------------*/&&&&USB_DeviceDescTyp,&&&&&&&&&&/*描述符类型-------------------------------------*/&&&&0x00,&&&&&&&&&&&&&&&&&&&&&&&/*bcdUSB-------------------------------------------*/&&&&0x02,&&&&0xff,&&&&&&&&&&&&&&&&&&&&&&&/*bDeviceClass:0xff表示自定义*/&&&&0xff,&&&&&&&&&&&&&&&&&&&&&&&/*bDeviceSubClass:0xff表示自定义*/&&&&0xff,&&&&&&&&&&&&&&&&&&&&&&&/*bDeviceProtocol:0xff表示自定义*/&&&&0x40,&&&&&&&&&&&&&&&&&&&&&&&/*bMaxPacketSize&64*/ &&&&&&0x83,&&&&&&&&&&&&&&&&&&&&&&&/*销售商的ID:先低后高*/&&&&0x04, &&&&&&0x12,&&&&&&&&&&&&&&&&&&&&&&&/*产品ID:先低后高*/&&&&0x57, && &&&&&&0x00,&&&&&&&&&&&&&&&&&&&&&&&/*bcdDevice&rel.&2.00*/&&&&0x02,&&&&1,&&&&&&&&&&&&&&&&&&&&&&&&&&/*manufacturer:厂商描述在字符串描述符中的索引*/&&&&2,&&&&&&&&&&&&&&&&&&&&&&&&&&/*product:产品描述在字符串描述符中的索引*/&&&&3,&&&&&&&&&&&&&&&&&&&&&&&&&&/*SerialNum:序列号在字符串描述符中的索引*/&&&&0x01&&&&&&&&&&&&&&&&&&&&&&&&/*bNumConfigurations*/};&/*&USBDevice_DeviceDescriptor&*/&/*&配置描述符(固定为9个字节)------------------------------------------------------------*/const&uint8_t&USB_ConfigDesc[]&={&&&&0x09,&/*&bLength:&Configuation&Descriptor&size--------------------------------------------*/&&&&USB_ConfigDescTyp,&/*&bDescriptorType:&Configuration-------------------------------*/&&&&32&,0x00,/*&配置+接口+端点字节数------------------------------------------------------*/&&&&&&&&0x01,&&&&&&&&&/*接口数:&1&个接口*/&&&&0x01,&&&&&&&&&/*配置值:&配置的ID为1*/&&&&0x00,&&&&&&&&&/*iConfiguration:&Index&of&string&descriptor&describing&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&the&configuration*/&&&&0xc0,&&&&&&&&&/*属性:&bus&powered&*/&&&&0x64,&&&&&&&&&/*功耗以2mA为单位----------------------------------------------------*/ /*&接口描述符(固定为9个字节)----------------------------------------------------------------*/&&&&0x09,&&&&&&&&&/*bLength:&Interface&Descriptor&size*/&&&&USB_IntefaceDescTyp,/*bDescriptorType:&Interface&descriptor&type*/&&&&0x00,&&&&&&&&&/*接口号*/&&&&0x00,&&&&&&&&&/*bAlternateSetting:&Alternate&setting*/&&&&0x02,&&&&&&&&&/*接口所使用的端点数(不包括端点0)*/
&&&&0xff,&&&&&&&&&/*bInterfaceClass:&通信接口*/&&&&0xff,&&&&&&&&&/*bInterfaceSubClass&:&1=BOOT,&0=no&boot------------------------------*/&&&&0xff,&&&&&&&&&/*nInterfaceProtocol&:&0=none,&1=keyboard,&2=mouse------------------*/&&&&0,&&&&&&&&&&&/*接口描述符在字符串描述中的索引------------------------------------*/
&&&/*&端点描述符(包含2个端点)----------------------------------------------------------------*/ /*端点1描述符*/ 0x07,&&&&&&&&&&/*bLength:&Endpoint&Descriptor&size------------------------------------*/ USB_EndPDescTyp,&/*bDescriptorType:*/& 0x81,&&&&&&&&&&/*端点地址bEndpointAddress:&Endpoint&Address&(IN)------------*/ 0x03,&&&&&&&&&&/*端点属性bmAttributes:&Interrupt&endpoint*/ 0x08,&&&&&&&&&&/*最大包长度wMaxPacketSize:&8&Byte&max------------------------*/ 0x00, 0x20,&&&&&&&&&&/*主机轮询周期(1ms为单位):&32&ms--------------------------------*/& /*端点2描述符*/ 0x07,&&&&&&&&&&/*bLength:&Endpoint&Descriptor&size----------------------------------*/ USB_EndPDescTyp,&/*bDescriptorType:*/ 0x02,&&&&&&&&&&/*端点地址bEndpointAddress:&Endpoint&Address&(OUT)----------*/ 0x03,&&&&&&&&&&/*端点属性bmAttributes:&Interrupt&endpoint*/ 0x02,&&&&&&&&&&/*最大包长度wMaxPacketSize:&8&Byte&max&*/ 0x00, 0x20,&&&&&&&&&&&/*主机轮询周期(1ms为单位):&32&ms----------------------------*/};&&/*&USB&String&Descriptors&(optional)&*/const&uint8_t&USBDevice_StringLangID[]&={ 6, USB_StrDescTyp, 0x09, 0x04, 0x04, 0x08};&/*&LangID&=&0x0409:&U.S.&English&,LangID&=&0x0804:&chinese*/&const&uint8_t&USBDevice_StringVendor[]&={ 10,& USB_StrDescTyp,&&/*&bDescriptorType*/ /**------------------------------- ASCII输入:lw技术 UNICODE输出 size:8Bytes ---------------------------------*/ 0x6c,0x0,0x77,0x0, 0x80,0x62,0x2f,0x67 &};&const&uint8_t&USBDevice_StringProduct[]&={ 24,&&&&&&&&&&&&&&&&&&&&/*&bLength&-------------------------------------*/ USB_StrDescTyp,&&&&&&&&/*&bDescriptorType&----------------------------*/& /**------------------------------- ASCII输入:stm32中断传输实验 UNICODE输出 size:22Bytes ---------------------------------*/&&&0x73,0x0,0x74,0x0,0x6d,0x0,0x33,0x0,&&&0x32,0x0,0x2d,0x4e,0xad,0x65,0x20,0x4f,&&&0x93,0x8f,0x9e,0x5b,0x8c,0x9a};const&uint8_t&USBDevice_StringSerial[]&={ 20,&&&&&&&&&&&&&&&&&&&&&/*&bLength&--------------------------------------------*/ USB_StrDescTyp,&&&&&&&&/*&bDescriptorType&-----------------------------------*/ /**------------------------------- ASCII输入:roger-wen UNICODE输出 size:18Bytes ---------------------------------*/ 0x72,0x0,0x6f,0x0,0x67,0x0,0x65,0x0,&&&&0x72,0x0,0x2d,0x0,0x77,0x0,0x65,0x0,&&&&0x6e,0x0};
作者的其他最新博客
评论 ( 个评论)
Powered by
供应链服务
商务及广告合作
Jeffery Guo
关注我们的微信
供应链服务 PCB/IC/PCBA
下载发烧友APP
版权所有 (C) 深圳华强聚丰电子科技有限公司

我要回帖

更多关于 stm32串口中断 的文章

 

随机推荐