OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6261|回复: 4

STM32L151中USB虚拟串口的问题,各位大侠江湖救急!!

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
34
金钱
34
注册时间
2015-12-24
在线时间
0 小时
发表于 2015-12-24 19:20:34 | 显示全部楼层 |阅读模式
5金钱
最近在做USB虚拟串口,USB的库用了STM32_UsbVirtualCom示例工程中的库,但是目前的板子芯片是STM32L151CBT的,所以修改了部分时钟和GPIO配置,外围电路使用原子君的旗舰版中的DP上拉1.5K至3.3V;目前插入PC没有任何反应,测量上拉电阻电压只有0.1V。

代码如下:
void USB_Config(void)
{
    Set_System();

    Set_USBClock();

    USB_Interrupts_Config();

    USB_Init();
}


void Set_System(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  QUEUE_PacketCreate(&m_QueueUsbComRx, m_UsbComRxBuf, sizeof(m_UsbComRxBuf));
  QUEUE_PacketCreate(&m_QueueUsbComTx, m_UsbComTxBuf, sizeof(m_UsbComTxBuf));
  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);
  /* Enable USB_DISCONNECT GPIO clock */
  RCC_AHBPeriphClockCmd(RCC_APB2Periph_GPIO_DISCONNECT, ENABLE);
}

void Set_USBClock(void)
{
  /* Select USBCLK source */
  //RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5); (这里L151系列的没有这个寄存器)
  
  /* Enable the USB clock */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);
}

void USB_Interrupts_Config(void)
{
  NVIC_InitTypeDef NVIC_InitStructure; 

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

  NVIC_InitStructure.NVIC_IRQChannel = USB_LP_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

}

void USB_Init(void)
{
  pInformation = &Device_Info;
  pInformation->ControlState = 2;
  pProperty = &Device_Property;
  pUser_Standard_Requests = &User_Standard_Requests;
  /* Initialize devices one by one */
  pProperty->Init();
}

端口配置如下:
//GPA11 -->USBDM   GPA12 --->USBDP
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12;   
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_USB);
 GPIO_PinAFConfig(GPIOA, GPIO_PinSource12, GPIO_AF_USB);

时钟配置为外部8MHz, PLLMUL 12, PLL DIV 3为系统时钟。代码如下:
static void SetSysClock(void)
{
  __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
  
  /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/
  /* Enable HSE */
  RCC->CR |= ((uint32_t)RCC_CR_HSEON);
 
  /* Wait till HSE is ready and if Time out is reached exit */
  do
  {
    HSEStatus = RCC->CR & RCC_CR_HSERDY;
    StartUpCounter++;
  } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

  if ((RCC->CR & RCC_CR_HSERDY) != RESET)
  {
    HSEStatus = (uint32_t)0x01;
  }
  else
  {
    HSEStatus = (uint32_t)0x00;
  }
  
  if (HSEStatus == (uint32_t)0x01)
  {
    /* Enable 64-bit access */
    FLASH->ACR |= FLASH_ACR_ACC64;
    
    /* Enable Prefetch Buffer */
    FLASH->ACR |= FLASH_ACR_PRFTEN;

    /* Flash 1 wait state */
    FLASH->ACR |= FLASH_ACR_LATENCY;
    
    /* Power enable */
    RCC->APB1ENR |= RCC_APB1ENR_PWREN;
  
    /* Select the Voltage Range 1 (1.8 V) */
    PWR->CR = PWR_CR_VOS_0;
  
    /* Wait Until the Voltage Regulator is ready */
    while((PWR->CSR & PWR_CSR_VOSF) != RESET)
    {
    }
        
    /* HCLK = SYSCLK /1*/
    RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
  
    /* PCLK2 = HCLK /1*/
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
    
    /* PCLK1 = HCLK /1*/
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1;
    
    /*  LL configuration */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL |
                                        RCC_CFGR_PLLDIV));
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMUL12 | RCC_CFGR_PLLDIV3);

    /* Enable PLL */
    RCC->CR |= RCC_CR_PLLON;

    /* Wait till PLL is ready */
    while((RCC->CR & RCC_CR_PLLRDY) == 0)
    {
    }
        
    /* Select PLL as system clock source */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
    RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;

    /* Wait till PLL is used as system clock source */
    while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)RCC_CFGR_SWS_PLL)
    {
    }
  }
  else
  {
    /* If HSE fails to start-up, the application will have wrong clock
       configuration. User can add here some code to deal with this error */
  }
}

请各位大侠们江湖救急一下,帮我分析分析,可能哪里配置错了,谢谢!






正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-12-24 21:19:47 | 显示全部楼层
回复

使用道具 举报

2

主题

239

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2015-6-5
在线时间
110 小时
发表于 2015-12-25 16:30:46 | 显示全部楼层
http://www.st.com/web/en/catalog/tools/PF258157#

官網參考

我實現過L0的 但是我用庫函數 寄存器的我幫不了你
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
34
金钱
34
注册时间
2015-12-24
在线时间
0 小时
 楼主| 发表于 2015-12-28 09:02:00 | 显示全部楼层
Rocks 发表于 2015-12-25 16:30
http://www.st.com/web/en/catalog/tools/PF258157#

官網參考

我實現過L0的 但是我用庫函數 寄 ...

我这里也是用的库函数的1.31版本,按理说USB配置了功能到端口,时钟也对的话,应该会被枚举,但是目前是没有任何反应。谢谢,我仔细看看user manual
回复

使用道具 举报

7

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2015-4-20
在线时间
30 小时
发表于 2016-1-14 16:55:14 | 显示全部楼层
下官方的代码,直接调会快点
抬头看你的美
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-14 18:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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