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

查看: 5634|回复: 17

[STM32L496] 【NUCLEO-L496ZG评测】+ USB OTG 之 HID 远程唤醒PC

[复制链接]

60

主题

2051

回帖

31

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2017-4-24 22:57:08 | 显示全部楼层 |阅读模式
本帖最后由 creep 于 2017-4-25 08:46 编辑



    STM32L496上面有个USB OTG FS接口可以作为Host也可以作为Device,使用ST提供的USB库可以将STM32L496-Nucleo 枚举成一个HID设备,因为HID设备在windows是免驱,在很多对通信速度要求不高的场合时使用HID设备通信是一个很好的选择。如果对速度要求比较高可以考虑使用全速CDC模式或者高速CDC,但是鉴于我们都懂的原因,国内的很多操作系统都是不完整的系统,在使用CDC模式很大的可能性会遇到驱动的安装问题。


  全速USB使用内部的48MHZ的HSI时钟,硬件连接如下:
     
    TIM截图20170424213941.png


在底层初始化中要按照硬件的连接进行相应功能的设置:


  1. <font face="微软雅黑" size="3">void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd)
  2. {
  3.   GPIO_InitTypeDef  GPIO_InitStruct;
  4.   
  5.   /* Configure USB FS GPIOs */
  6.   __HAL_RCC_GPIOA_CLK_ENABLE();
  7.   
  8.   /* Configure DM DP Pins */
  9.   GPIO_InitStruct.Pin = (GPIO_PIN_11 | GPIO_PIN_12);
  10.   GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  11.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  12.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  13.   GPIO_InitStruct.Alternate = GPIO_AF10_OTG_FS;
  14.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  15.   
  16.   /* Configure VBUS Pin */
  17.   GPIO_InitStruct.Pin = GPIO_PIN_9;
  18.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  19.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  20.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  21.   
  22.   /* Configure ID pin */
  23.   GPIO_InitStruct.Pin = GPIO_PIN_10;
  24.   GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
  25.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  26.   GPIO_InitStruct.Alternate = GPIO_AF10_OTG_FS;
  27.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  28.   
  29.   /* Enable USB FS Clock */
  30.   __HAL_RCC_USB_OTG_FS_CLK_ENABLE();
  31.   
  32.   /* Set USB FS Interrupt priority */
  33.   HAL_NVIC_SetPriority(OTG_FS_IRQn, 0x0F, 0);
  34.   
  35.   /* Enable USB FS Interrupt */
  36.   HAL_NVIC_EnableIRQ(OTG_FS_IRQn);
  37.   
  38.   if(hpcd->Init.low_power_enable == 1)
  39.   {
  40.     /* Enable EXTI Line 18 for USB wakeup */
  41.     __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_IT();            
  42.   }   
  43. }</font>
复制代码


HID作为PC的一个USB devcie 支持remote wakeup 功能可以睡眠状态下的电脑唤醒,工作原理是如果使能了唤醒功能,USB内核会发送一个wakeup信号给Host(PC):


TIM截图20170424214547.png


为了模拟这个效果我们使用STM32L496-Nucleo上的USER 按键来触发唤醒信号,当检测到按键按下中断时就发一个唤醒信号给主机PC,按键的中断回调函数如下:信号的发送要严格按下参考手册描述的进行执行。


  1. <font face="微软雅黑" size="3">void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
  2. {
  3.   if (GPIO_Pin == SEL_JOY_PIN)
  4.   {
  5.     if ((((USBD_HandleTypeDef *)hpcd.pData)->dev_remote_wakeup == 1)&&
  6.         (((USBD_HandleTypeDef *)hpcd.pData)->dev_state == USBD_STATE_SUSPENDED))
  7.     {
  8.       if ((&hpcd)->Init.low_power_enable)
  9.       {
  10.         /* Reset SLEEPDEEP bit of Cortex System Control Register */
  11.         SCB->SCR &= (uint32_t)~((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));  
  12.         
  13.         SystemClockConfig_STOP();
  14.       }
  15.       
  16.       /* Ungate PHY clock */
  17.       __HAL_PCD_UNGATE_PHYCLOCK((&hpcd));
  18.       
  19.       /* Activate Remote wakeup */
  20.       HAL_PCD_ActivateRemoteWakeup((&hpcd));
  21.       
  22.       /* Remote wakeup delay */
  23.       HAL_Delay(10);
  24.       
  25.       /* Disable Remote wakeup */
  26.       HAL_PCD_DeActivateRemoteWakeup((&hpcd));
  27.       
  28.       /* change state to configured */
  29.       ((USBD_HandleTypeDef *)hpcd.pData)->dev_state = USBD_STATE_CONFIGURED;
  30.       
  31.       /* Change remote_wakeup feature to 0*/
  32.       ((USBD_HandleTypeDef *)hpcd.pData)->dev_remote_wakeup=0;
  33.       remotewakeupon = 1;
  34.     }
  35.   }
  36. }</font>
复制代码


移植USB设备可以使用cubemx也可以参考HAL库移植好的例子进行修改,基本常见的模式都可以找到例子,移植的时候要安装原理图的USB接线进行修改。通过简单的移植后下载到Nucleo 中可以看到电脑上枚举出来的设备,如果有多个设备可以使用VID&PID进行区分:


0.png


首先在XP系统中进行测试,可以看到电脑休眠后按下开发板的user按键马上可以点亮电脑屏幕唤醒系统。


11.gif




WIN10测试也可以唤醒系统唤醒指纹解锁。有的系统要设置设备能唤醒电脑,但是WIN10上没法设置这个选项。


TIM图片20170423230414.gif






测试代码:


HID_Remote_Wakeup.rar (62.6 KB, 下载次数: 79)
回复

使用道具 举报

64

主题

744

回帖

23

蝴蝶豆

实习版主

最后登录
2020-12-8
发表于 2017-4-24 23:41:57 | 显示全部楼层
前来顶帖
回复 支持 反对

使用道具 举报

3

主题

1377

回帖

0

蝴蝶豆

论坛元老

最后登录
2020-12-9
发表于 2017-4-25 00:07:23 | 显示全部楼层
赞赞赞     
回复 支持 反对

使用道具 举报

47

主题

3404

回帖

30

蝴蝶豆

版主

最后登录
2020-12-7
发表于 2017-4-25 08:10:19 | 显示全部楼层
赞,顶起
回复 支持 反对

使用道具 举报

60

主题

2051

回帖

31

蝴蝶豆

版主

最后登录
2020-12-9
 楼主| 发表于 2017-4-25 08:37:03 | 显示全部楼层

感谢支持   
回复 支持 反对

使用道具 举报

60

主题

2051

回帖

31

蝴蝶豆

版主

最后登录
2020-12-9
 楼主| 发表于 2017-4-25 08:37:23 | 显示全部楼层

               
回复 支持 反对

使用道具 举报

60

主题

2051

回帖

31

蝴蝶豆

版主

最后登录
2020-12-9
 楼主| 发表于 2017-4-25 08:37:55 | 显示全部楼层

谢谢 Paderboy
回复 支持 反对

使用道具 举报

1

主题

28

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-5-26
发表于 2017-4-26 08:41:14 | 显示全部楼层
这个不错不错,先备注
回复 支持 反对

使用道具 举报

60

主题

2051

回帖

31

蝴蝶豆

版主

最后登录
2020-12-9
 楼主| 发表于 2017-4-26 08:56:53 | 显示全部楼层
pener 发表于 2017-4-26 08:41
这个不错不错,先备注

            
回复 支持 反对

使用道具 举报

14

主题

191

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-12-5
发表于 2017-4-26 09:20:04 | 显示全部楼层
赞赞赞
回复 支持 反对

使用道具 举报

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
st-img 微信公众号
st-img 手机版