你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

USB Virtual COM Port的問題[急]

[复制链接]
prince6150 提问时间:2011-10-14 11:02 /
小弟去下載USB的3.3.0的資料庫,裡面有EVAL的Virtual COM Port程式,想要一直到我的板子上,對照了電路圖,小弟的板子不是市面上的開發板,用的IC是STM32F102R8,USB的PULL UP控制是在PB9,照原本的是設定在platform_config.h裡設定是PD9,把它修改成PB9後變成一直在卡在USB中斷那邊,後來追到stm3210b_eval.h裡的PB9有重複定義把它改成PD9,platform_config.h裡設定是PB9,但是還是卡住在USB中斷,修改的部分程式如下:
stm3210b_eval.h
#define BUTTONn                          8
/**
* @brief Wakeup push-button
*/
#define WAKEUP_BUTTON_PIN                GPIO_Pin_0
#define WAKEUP_BUTTON_GPIO_PORT          GPIOA
#define WAKEUP_BUTTON_GPIO_CLK           RCC_APB2Periph_GPIOA
#define WAKEUP_BUTTON_EXTI_LINE          EXTI_Line0
#define WAKEUP_BUTTON_EXTI_PORT_SOURCE   GPIO_PortSourceGPIOA
#define WAKEUP_BUTTON_EXTI_PIN_SOURCE    GPIO_PinSource0
#define WAKEUP_BUTTON_EXTI_IRQn          EXTI0_IRQn
/**
* @brief Tamper push-button
*/
#define TAMPER_BUTTON_PIN                GPIO_Pin_13
#define TAMPER_BUTTON_GPIO_PORT          GPIOC
#define TAMPER_BUTTON_GPIO_CLK           RCC_APB2Periph_GPIOC
#define TAMPER_BUTTON_EXTI_LINE          EXTI_Line13
#define TAMPER_BUTTON_EXTI_PORT_SOURCE   GPIO_PortSourceGPIOC
#define TAMPER_BUTTON_EXTI_PIN_SOURCE    GPIO_PinSource13
#define TAMPER_BUTTON_EXTI_IRQn          EXTI15_10_IRQn
/**
* @brief Key push-button
*/
#define KEY_BUTTON_PIN                   GPIO_Pin_9
#define KEY_BUTTON_GPIO_PORT             GPIOD------>B改D
#define KEY_BUTTON_GPIO_CLK              RCC_APB2Periph_GPIOD------>B改D
#define KEY_BUTTON_EXTI_LINE             EXTI_Line9
#define KEY_BUTTON_EXTI_PORT_SOURCE      GPIO_PortSourceGPIOD-->B改D
#define KEY_BUTTON_EXTI_PIN_SOURCE       GPIO_PinSource9
#define KEY_BUTTON_EXTI_IRQn             EXTI9_5_IRQn
/**
* @brief Joystick Right push-button
*/
#define RIGHT_BUTTON_PIN                 GPIO_Pin_0
#define RIGHT_BUTTON_GPIO_PORT           GPIOE
#define RIGHT_BUTTON_GPIO_CLK            RCC_APB2Periph_GPIOE
#define RIGHT_BUTTON_EXTI_LINE           EXTI_Line0
#define RIGHT_BUTTON_EXTI_PORT_SOURCE    GPIO_PortSourceGPIOE
#define RIGHT_BUTTON_EXTI_PIN_SOURCE     GPIO_PinSource0
#define RIGHT_BUTTON_EXTI_IRQn           EXTI0_IRQn
/**
* @brief Joystick Left push-button
*/
#define LEFT_BUTTON_PIN                  GPIO_Pin_1
#define LEFT_BUTTON_GPIO_PORT            GPIOE
#define LEFT_BUTTON_GPIO_CLK             RCC_APB2Periph_GPIOE
#define LEFT_BUTTON_EXTI_LINE            EXTI_Line1
#define LEFT_BUTTON_EXTI_PORT_SOURCE     GPIO_PortSourceGPIOE
#define LEFT_BUTTON_EXTI_PIN_SOURCE      GPIO_PinSource1
#define LEFT_BUTTON_EXTI_IRQn            EXTI1_IRQn  
/**
* @brief Joystick Up push-button
*/
#define UP_BUTTON_PIN                    GPIO_Pin_8
#define UP_BUTTON_GPIO_PORT              GPIOD
#define UP_BUTTON_GPIO_CLK               RCC_APB2Periph_GPIOD
#define UP_BUTTON_EXTI_LINE              EXTI_Line8
#define UP_BUTTON_EXTI_PORT_SOURCE       GPIO_PortSourceGPIOD
#define UP_BUTTON_EXTI_PIN_SOURCE        GPIO_PinSource8
#define UP_BUTTON_EXTI_IRQn              EXTI9_5_IRQn  
/**
* @brief Joystick Down push-button
*/  
#define DOWN_BUTTON_PIN                  GPIO_Pin_14
#define DOWN_BUTTON_GPIO_PORT            GPIOD
#define DOWN_BUTTON_GPIO_CLK             RCC_APB2Periph_GPIOD
#define DOWN_BUTTON_EXTI_LINE            EXTI_Line14
#define DOWN_BUTTON_EXTI_PORT_SOURCE     GPIO_PortSourceGPIOD
#define DOWN_BUTTON_EXTI_PIN_SOURCE      GPIO_PinSource14
#define DOWN_BUTTON_EXTI_IRQn            EXTI15_10_IRQn  
/**
* @brief Joystick Sel push-button
*/
#define SEL_BUTTON_PIN                   GPIO_Pin_12
#define SEL_BUTTON_GPIO_PORT             GPIOD
#define SEL_BUTTON_GPIO_CLK              RCC_APB2Periph_GPIOD
#define SEL_BUTTON_EXTI_LINE             EXTI_Line12
#define SEL_BUTTON_EXTI_PORT_SOURCE      GPIO_PortSourceGPIOD
#define SEL_BUTTON_EXTI_PIN_SOURCE       GPIO_PinSource12
#define SEL_BUTTON_EXTI_IRQn             EXTI15_10_IRQn  
platform_config.h
#ifdef USE_STM3210B_EVAL
  #define USB_DISCONNECT                      GPIOB  ----->D改B
  #define USB_DISCONNECT_PIN                  GPIO_Pin_9
  #define RCC_APB2Periph_GPIO_DISCONNECT      RCC_APB2Periph_GPIOB
----->D改B
  #define EVAL_COM1_IRQHandler                USART1_IRQHandler

#elif defined (USE_STM3210E_EVAL)
  #define USB_DISCONNECT                      GPIOB  
  #define USB_DISCONNECT_PIN                  GPIO_Pin_14
  #define RCC_APB2Periph_GPIO_DISCONNECT      RCC_APB2Periph_GPIOB
  #define EVAL_COM1_IRQHandler                USART1_IRQHandler
#elif defined (USE_STM3210C_EVAL)
  #define USB_DISCONNECT                      0  
  #define USB_DISCONNECT_PIN                  0
  #define RCC_APB2Periph_GPIO_DISCONNECT      0
  #define EVAL_COM1_IRQHandler                USART2_IRQHandler
main.c
int main(void)
{
  Set_System();
  USB_Interrupts_Config();----------->程式卡死在這邊
  Set_USBClock();
  USB_Init();
  
  while (1)
  {
  }
}
請問我是哪邊沒修改到嗎??
收藏 评论9 发布时间:2011-10-14 11:02

举报

9个回答
废鱼 回答时间:2011-10-14 17:16:10

RE:USB Virtual COM Port的問題[急]

把工程发出来看看,
USB_Interrupts_Config();----------->程式卡死在這邊
  Set_USBClock();
  USB_Init();
配置不通过,说明有一些代码是错误的。你仿真USB_Interrupts_Config();这个里面走到那一句死了?
prince6150 回答时间:2011-10-14 17:31:16

回复:USB Virtual COM Port的問題[急]

回复第 2 楼 于2011-10-14 09:16:10发表:
把工程发出来看看,
USB_Interrupts_Config();----------->程式卡死在這邊
Set_USBClock();
USB_Init();
配置不通过,说明有一些代码是错误的。你仿真USB_Interrupts_Config();这个里面走到那一句死了? 

我進去跑他是一直重複執行USB_Istr();
單步執行看他跑的情況是
void USB_Istr(void)
{
  wIstr = _GetISTR();
#if (IMR_MSK & ISTR_SOF)
  if (wIstr & ISTR_SOF & wInterrupt_Mask)
  {   
    _SetISTR((uint16_t)CLR_SOF);
    bIntPackSOF++;
#ifdef SOF_CALLBACK
    SOF_Callback();
#endif
  }
#endif
  /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/ 
 
#if (IMR_MSK & ISTR_CTR)
  if (wIstr & ISTR_CTR & wInterrupt_Mask)
  {
    /* servicing of the endpoint correct transfer interrupt */
    /* clear of the CTR flag into the sub */
    CTR_LP();---------------------------------------------------------------------------------------->第一步
#ifdef CTR_CALLBACK
    CTR_Callback();
#endif
  }
#endif
  /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/ 
#if (IMR_MSK & ISTR_RESET)
  if (wIstr & ISTR_RESET & wInterrupt_Mask)-------------------------------------------------->第二步
  {
    _SetISTR((uint16_t)CLR_RESET);
    Device_Property.Reset();
#ifdef RESET_CALLBACK
    RESET_Callback();
#endif
  }
#endif
  /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
#if (IMR_MSK & ISTR_DOVR)
  if (wIstr & ISTR_DOVR & wInterrupt_Mask)
  {
    _SetISTR((uint16_t)CLR_DOVR);
#ifdef DOVR_CALLBACK
    DOVR_Callback();
#endif
  }
#endif
  /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
#if (IMR_MSK & ISTR_ERR)
  if (wIstr & ISTR_ERR & wInterrupt_Mask)
  {
    _SetISTR((uint16_t)CLR_ERR);
#ifdef ERR_CALLBACK
    ERR_Callback();
#endif
  }
#endif
  /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
#if (IMR_MSK & ISTR_WKUP)
  if (wIstr & ISTR_WKUP & wInterrupt_Mask)
  {
    _SetISTR((uint16_t)CLR_WKUP);
    Resume(RESUME_EXTERNAL);
#ifdef WKUP_CALLBACK
    WKUP_Callback();
#endif
  }
#endif
  /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
#if (IMR_MSK & ISTR_SUSP)
  if (wIstr & ISTR_SUSP & wInterrupt_Mask)
  {
    /* check if SUSPEND is possible */
    if (fSuspendEnabled)
    {
      Suspend();
    }
    else
    {
      /* if not possible then resume after xx ms */
      Resume(RESUME_LATER);
    }
    /* clear of the ISTR bit must be done after setting of CNTR_FSUSP */
    _SetISTR((uint16_t)CLR_SUSP);
#ifdef SUSP_CALLBACK
    SUSP_Callback();
#endif
  }
#endif
  /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
#if (IMR_MSK & ISTR_ESOF)
  if (wIstr & ISTR_ESOF & wInterrupt_Mask)
  {
    _SetISTR((uint16_t)CLR_ESOF);
    /* resume handling timing is made with ESOFs */
    Resume(RESUME_ESOF); /* request without change of the machine state */
#ifdef ESOF_CALLBACK
    ESOF_Callback();
#endif
  }
#endif
}------------------------------------------------------------------------------------------------------------------->第三步
第二步到第三步之間都沒有進去就結束了,下一次再從第一步來,就這樣卡死在這
废鱼 回答时间:2011-10-14 21:07:07

RE:USB Virtual COM Port的問題[急]

这个说明你的标志位不对,不看工程看不太明白,你把工程发出来。
USB_Interrupts_Config();----------->程式卡死在這邊
这个配置应该放在最后。
prince6150 回答时间:2011-10-15 00:20:33

回复:USB Virtual COM Port的問題[急]

回复第 4 楼 于2011-10-14 13:07:07发表:
这个说明你的标志位不对,不看工程看不太明白,你把工程发出来。
USB_Interrupts_Config();----------->程式卡死在這邊
这个配置应该放在最后。 

我把整個專案貼上來,拜託大大幫我看看,小弟新手,完全靠自學

Virtual_COM_Port.rar

下载

754.75 KB, 下载次数: 17

废鱼 回答时间:2011-10-17 16:38:34

回复:USB Virtual COM Port的問題[急]

下载了,我这里好多错误解决不了。找不到你的文件。你应该先配置SUB,最好配置USB中断。
prince6150 回答时间:2011-10-18 09:36:22

回复:USB Virtual COM Port的問題[急]

回复第 6 楼 于2011-10-17 08:38:34发表:
下载了,我这里好多错误解决不了。找不到你的文件。你应该先配置SUB,最好配置USB中断。 

我再把連LIB都有的專案貼一次,我試過把USB_Init()加在USB_Interrupts_Config()之前就不會卡在那邊,是在設置USB中斷之前要先把USB INIT嗎??

複製 -STM32_USB-FS-Device_Lib_V3.3.0.rar

下载

2.7 MB, 下载次数: 14

废鱼 回答时间:2011-10-19 15:12:04

回复:USB Virtual COM Port的問題[急]

要先配置USB,然后再配置USB中断。这就像看电视一样,要先打开电视,才能换台。
chinajieli 回答时间:2011-12-4 12:29:25

RE:USB Virtual COM Port的問題[急]

把工程发出来看看
风行者cxd 回答时间:2013-8-25 11:41:12

RE:USB Virtual COM Port的問題[急]

先配时钟,再配中断试试
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版