野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9577|回复: 11

STM32L152 USB问题

[复制链接]
发表于 2017-11-30 08:23:25 | 显示全部楼层 |阅读模式
while(1)
{               
          if(index == 0)
                {
                        printf("temp=%0.3f\r\n",g_temperature);
                        Delay_ms(500);
                        sendData.head = 0x54;
                        sendData.cmd = 0x58;
                        sendData.data_len = sizeof(UsbSendData);
                        sendData.temperature = g_temperature;
                        sendData.flg = g_fTemp;
                        sendData.exp_freq = g_para_cfg.current_freq;
                        sendData.exp_time = g_para_cfg.current_pulse;
                        sendData.current_pulse = g_para_cfg.mh7139_current_value;
                        sendData.vol_pulse = 0;
                        sendData.vcsel_state = g_para_cfg.enable;

                        memcpy(Temp_Buffer, &sendData, sizeof(sendData));
                }

                if (PrevXferComplete)
                {
                        if(index < sizeof(UsbSendData))
                        {
                                Send_Buffer[0] = 0x05;
                                Send_Buffer[1] = Temp_Buffer[index];
                                UserToPMABufferCopy(Send_Buffer, ENDP1_TXADDR, 2);
                                SetEPTxCount(ENDP1, 2);
                                SetEPTxValid(ENDP1);

                                index++;
                                if(index == sizeof(UsbSendData))
                                {
                                        index = 0;
                                }
                                printf("index = %d\n",index);
                                PrevXferComplete = 0;
                        }
                }
}请问下为什么在INDEX==0这里我把延迟加到Delay_ms(500);USB传输就正常,如果更改为Delay_ms(50);或者在        if(index == sizeof(UsbSendData))
                                {
                                        index = 0;
                                }
                                printf("index = %d\n",index);增加打印语句USB传输就不正常。 还有HID USB方式是不是不支持应答方式传输数据?
void EP1_IN_Callback(void)
{
        PrevXferComplete = 1;}  EP1_IN_Callback 什么时候才会被调用?



回复

使用道具 举报

发表于 2017-11-30 08:55:28 | 显示全部楼层
搞不懂这个,帮顶
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-30 10:02:00 | 显示全部楼层
谢谢,还请各位了解的人稍微给点建议。
回复 支持 反对

使用道具 举报

发表于 2017-11-30 22:05:21 | 显示全部楼层
会不会是发送频率太快了?发送时加上SetEPTxValid(ENDP1);while(GetEPTxStatus(ENDP1) == EP_TX_VALID);这句看看; EP1_IN_Callback我记得好像是发送数据成功后会被调用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-1 10:28:23 | 显示全部楼层
hehuibo 发表于 2017-11-30 22:05
会不会是发送频率太快了?发送时加上SetEPTxValid(ENDP1);while(GetEPTxStatus(ENDP1) == EP_TX_VALID);这 ...

你知道如何多字节传输吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-1 10:39:57 | 显示全部楼层
hehuibo 发表于 2017-11-30 22:05
会不会是发送频率太快了?发送时加上SetEPTxValid(ENDP1);while(GetEPTxStatus(ENDP1) == EP_TX_VALID);这 ...

你好,我在主程序里面执行        Send_Buffer[0] = 0x05;
                                Send_Buffer[1] = Temp_Buffer[index];
                               
                                UserToPMABufferCopy(Send_Buffer, ENDP1_TXADDR, 2);
                                SetEPTxCount(ENDP1, 2);
                                SetEPTxValid(ENDP1);
                                while(GetEPTxStatus(ENDP1) == EP_TX_VALID);然后查看BUSHOUND 发现没有执行,数据没有
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-1 10:40:24 | 显示全部楼层
hehuibo 发表于 2017-11-30 22:05
会不会是发送频率太快了?发送时加上SetEPTxValid(ENDP1);while(GetEPTxStatus(ENDP1) == EP_TX_VALID);这 ...

你好,我在主程序里面执行        Send_Buffer[0] = 0x05;
                                Send_Buffer[1] = Temp_Buffer[index];
                               
                                UserToPMABufferCopy(Send_Buffer, ENDP1_TXADDR, 2);
                                SetEPTxCount(ENDP1, 2);
                                SetEPTxValid(ENDP1);
                                while(GetEPTxStatus(ENDP1) == EP_TX_VALID);然后查看BUSHOUND 发现没有执行,数据没有
回复 支持 反对

使用道具 举报

发表于 2017-12-1 12:40:11 | 显示全部楼层
q370375662 发表于 2017-12-1 10:40
你好,我在主程序里面执行        Send_Buffer[0] = 0x05;
                                Send_Buffer[1] = Temp_Buffer;
                               

单从程序片段很难看出什么问题,USB要看描述符配置
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-1 13:23:05 | 显示全部楼层
hehuibo 发表于 2017-12-1 12:40
单从程序片段很难看出什么问题,USB要看描述符配置

历程是2字节传输能告知下具体如何更改才会多字节传输吗?
回复 支持 反对

使用道具 举报

发表于 2017-12-1 17:33:12 | 显示全部楼层
q370375662 发表于 2017-12-1 13:23
历程是2字节传输能告知下具体如何更改才会多字节传输吗?

HID设备的话,修改报告描述符
回复 支持 反对

使用道具 举报

发表于 2017-12-1 17:35:26 | 显示全部楼层
HID.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-4 08:39:36 | 显示全部楼层

你的应该是32f系列的USB库,我的库里面跟你这个不一样,我更改了没反应const uint8_t CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC] =
  {                    
    0x06, 0xFF, 0x00,      /* USAGE_PAGE (Vendor Page: 0xFF00) */                       
    0x09, 0x01,            /* USAGE (Demo Kit)               */   
    0xa1, 0x01,            /* COLLECTION (Application)       */            
    /* 6 */
   
    /* Led 1 */        
    0x85, 0x01,            /*     REPORT_ID (1)                     */
    0x09, 0x01,            /*     USAGE (LED 1)                     */
    0x15, 0x00,            /*     LOGICAL_MINIMUM (0)        */         
    0x25, 0x01,            /*     LOGICAL_MAXIMUM (1)        */           
    0x75, 0x08,            /*     REPORT_SIZE (8)            */        
    0x95, 0x01,            /*     REPORT_COUNT (1)           */      
    0xB1, 0x82,             /*    FEATURE (Data,Var,Abs,Vol) */     

    0x85, 0x01,            /*     REPORT_ID (1)              */
    0x09, 0x01,            /*     USAGE (LED 1)              */
    0x91, 0x82,            /*     OUTPUT (Data,Var,Abs,Vol)  */
    /* 26 */
   
    /* Led 2 */
    0x85, 0x02,            /*     REPORT_ID 2                     */
    0x09, 0x02,            /*     USAGE (LED 2)                     */
    0x15, 0x00,            /*     LOGICAL_MINIMUM (0)        */         
    0x25, 0x01,            /*     LOGICAL_MAXIMUM (1)        */           
    0x75, 0x08,            /*     REPORT_SIZE (8)            */        
    0x95, 0x01,            /*     REPORT_COUNT (1)           */      
    0xB1, 0x82,             /*    FEATURE (Data,Var,Abs,Vol) */     

    0x85, 0x02,            /*     REPORT_ID (2)              */
    0x09, 0x02,            /*     USAGE (LED 2)              */
    0x91, 0x82,            /*     OUTPUT (Data,Var,Abs,Vol)  */
    /* 46 */
   
    /* Led 3 */        
    0x85, 0x03,            /*     REPORT_ID (3)                     */
    0x09, 0x03,            /*     USAGE (LED 3)                     */
    0x15, 0x00,            /*     LOGICAL_MINIMUM (0)        */         
    0x25, 0x01,            /*     LOGICAL_MAXIMUM (1)        */           
    0x75, 0x08,            /*     REPORT_SIZE (8)            */        
    0x95, 0x01,            /*     REPORT_COUNT (1)           */      
    0xB1, 0x82,             /*    FEATURE (Data,Var,Abs,Vol) */     

    0x85, 0x03,            /*     REPORT_ID (3)              */
    0x09, 0x03,            /*     USAGE (LED 3)              */
    0x91, 0x82,            /*     OUTPUT (Data,Var,Abs,Vol)  */
    /* 66 */
   
    /* Led 4 */
    0x85, 0x04,            /*     REPORT_ID 4)                     */
    0x09, 0x04,            /*     USAGE (LED 4)                     */
    0x15, 0x00,            /*     LOGICAL_MINIMUM (0)        */         
    0x25, 0x01,            /*     LOGICAL_MAXIMUM (1)        */           
    0x75, 0x08,            /*     REPORT_SIZE (8)            */        
    0x95, 0x01,            /*     REPORT_COUNT (1)           */      
    0xB1, 0x82,            /*     FEATURE (Data,Var,Abs,Vol) */     

    0x85, 0x04,            /*     REPORT_ID (4)              */
    0x09, 0x04,            /*     USAGE (LED 4)              */
    0x91, 0x82,            /*     OUTPUT (Data,Var,Abs,Vol)  */
    /* 86 */
   
    /* key Push Button */  
    0x85, 0x05,            /*     REPORT_ID (5)              */
    0x09, 0x05,            /*     USAGE (Push Button)        */      
    0x15, 0x00,            /*     LOGICAL_MINIMUM (0)        */      
    0x25, 0x01,            /*     LOGICAL_MAXIMUM (1)        */      
    0x75, 0x01,            /*     REPORT_SIZE (1)            */  
    0x81, 0x82,            /*     INPUT (Data,Var,Abs,Vol)   */   
   
    0x09, 0x05,            /*     USAGE (Push Button)        */               
    0x75, 0x01,            /*     REPORT_SIZE (1)            */  
//   0x95, 0x0f,        


    0xb1, 0x82,            /*     FEATURE (Data,Var,Abs,Vol) */  
         
    0x75, 0x07,            /*     REPORT_SIZE (7)            */           
    0x81, 0x83,            /*     INPUT (Cnst,Var,Abs,Vol)   */                    
    0x85, 0x05,            /*     REPORT_ID (2)              */         
                    
    0x75, 0x07,            /*     REPORT_SIZE (7)            */           
    0xb1, 0x83,            /*     FEATURE (Cnst,Var,Abs,Vol) */                     
    /* 114 */

    /* Tamper Push Button */  
    0x85, 0x06,            /*     REPORT_ID (6)              */
    0x09, 0x06,            /*     USAGE (Tamper Push Button) */      
    0x15, 0x00,            /*     LOGICAL_MINIMUM (0)        */      
    0x25, 0x01,            /*     LOGICAL_MAXIMUM (1)        */      
    0x75, 0x01,            /*     REPORT_SIZE (1)            */  
    0x81, 0x82,            /*     INPUT (Data,Var,Abs,Vol)   */   
   
    0x09, 0x06,            /*     USAGE (Tamper Push Button) */               
    0x75, 0x01,            /*     REPORT_SIZE (1)            */           
    0xb1, 0x82,            /*     FEATURE (Data,Var,Abs,Vol) */  
         
    0x75, 0x07,            /*     REPORT_SIZE (7)            */           
    0x81, 0x83,            /*     INPUT (Cnst,Var,Abs,Vol)   */                    
    0x85, 0x06,            /*     REPORT_ID (6)              */         
                    
    0x75, 0x07,            /*     REPORT_SIZE (7)            */           
    0xb1, 0x83,            /*     FEATURE (Cnst,Var,Abs,Vol) */  
    /* 142 */
   
    /* ADC IN */
    0x85, 0x07,            /*     REPORT_ID (7)              */         
    0x09, 0x07,            /*     USAGE (ADC IN)             */         
    0x15, 0x00,            /*     LOGICAL_MINIMUM (0)        */               
    0x26, 0xff, 0x00,      /*     LOGICAL_MAXIMUM (255)      */                 
    0x75, 0x08,            /*     REPORT_SIZE (8)            */           
    0x81, 0x82,            /*     INPUT (Data,Var,Abs,Vol)   */                    
    0x85, 0x07,            /*     REPORT_ID (7)              */                 
    0x09, 0x07,            /*     USAGE (ADC in)             */                     
    0xb1, 0x82,            /*     FEATURE (Data,Var,Abs,Vol) */                                 
    /* 161 */

    0xc0                   /*     END_COLLECTION                     */
  }; /* CustomHID_ReportDescriptor */
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-17 05:56 , Processed in 0.085063 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表