原创 STM32学习笔记USB HID---序

2009-8-16 17:38 10580 9 14 分类: MCU/ 嵌入式
先来个广告:试验板子
http://item.taobao.com/auction/item_detail.jhtml?item_id=af46787150a8e26f29546dccfbed3ab6&x_id=0db2
点击看大图


STM32学习笔记USB HID


―――序


keilc安装目录下C:\Keil\ARM\Boards\Keil\MCBSTM32\USBHID文件夹为STM32 USB HID操作例子。


USBHID复制到用户目录下,进行改动就能运行STM32USB HID程序。


USB协议中,数据线的上下拉电阻为USB启动信号。试验板USB电路如下图:


<!--[if !vml]-->点击看大图
<!--[endif]-->


可以看出,上电复位后,由于对PD2无操作,则USB的数据线D+上拉电阻没有使能。在USB则处于空闲。如果要连接USB设备,只需要将PD使能三极管导通,则能让USB主机检测到本USB设备。所以在USB连接函数中改动:


void USB_Connect (BOOL con) {


 //==============================================================


  GPIO_InitTypeDef m_GPIO_InitTypeDef;


  m_GPIO_InitTypeDef.GPIO_Pin   = GPIO_Pin_2;


  m_GPIO_InitTypeDef.GPIO_Mode  = GPIO_Mode_Out_PP;//推挽输出


  m_GPIO_InitTypeDef.GPIO_Speed = GPIO_Speed_2MHz;//速度2M 


  GPIO_Init(GPIOD,&m_GPIO_InitTypeDef);


  //===============================================================


  //usb处于复位状态,让USB模拟电路准备


  CNTR = CNTR_FRES;                         /* Force USB Reset */


  ISTR = 0;                                 /* Clear Interrupt Status */


  if (con) //:连接USB


  {//清除USB复位信号,向USB主机发送"恢复请求",并且使能复位中断请求


   //则当USB主机向本机发送“恢复请求”后,相应中断,并调用USB_Reset函数.


   //说明:如果此操作在115ms有效,USB主机将对USB模块发出"唤醒操作"


    CNTR = CNTR_RESETM;                     /* USB Reset Interrupt Mask */


         GPIO_SetBits(GPIOD,GPIO_Pin_2);//PD21:连接USB


        


  }


  else     //:断开USB


  {//清除USB复位信号,关闭USB电源


    CNTR = CNTR_FRES | CNTR_PDWN;           /* Switch Off USB Device */


         GPIO_ResetBits(GPIOD,GPIO_Pin_2);//PD20,不连接USB设备


  }


}


至此,程序编译连接,烧写到STM32,程序运行。


可以从我的电脑,设备管理器看到HIDcompliant deviceUSB HID设备。


<!--[if !vml]-->点击看大图





USB连接测试等,因为USB HID协议,主机32ms(HID协议可以设置ms) GetInReport。则在GetInReport函数中加了USB连接测试灯,当连接成功。USB测试灯一闪一闪


void GetInReport (void)


{


 


  static  unsigned int i="0";


  InReport = 0x00;


  if ((GPIOA->IDR & S2) == 0) InReport |= 0x01;      // S2 pressed means 0


  if ((GPIOC->IDR & S3) == 0) InReport |= 0x02;      // S3 pressed means 0


 


  InReport = GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_0);//读取按键值返回


  i++;


  if(i%10==0)


  {


        GPIOC->ODR = GPIOC->ODR ^ 0x0200;//每隔640ms亮灭一次。32ms×10 × 2


  }   


}

测试源文件
https://static.assets-stash.eet-china.com/album/old-resources/2009/5/18/34f331bd-9bde-4d3c-aebc-8666077c5235.rar
<!--[endif]-->



PARTNER CONTENT

文章评论5条评论)

登录后参与讨论

用户139848 2011-10-25 21:42

正在学习这个东西,谢谢分享

pentral0311_880012608 2011-7-6 10:40

拜读了

用户399772 2009-12-18 13:51

支持啊..

用户1494767 2009-5-19 21:40

tengjingshu 先谢谢你啊 老兄,你老是支持我工作。认识下吧,我的QQ:276459460

tengjingshu_112148725 2009-5-19 08:59

支持
相关推荐阅读
用户1494767 2014-09-27 12:21
zigbee学习--osalInitTasks
http://85kaifa.taobao.com [学习 记录中....随时更改] zigbee学习--osalInitTasks  (OSAL_SampleApp.c) /****...
用户1494767 2012-08-12 18:31
ubuntu 10.04下nfs挂载2440
1、安装端口映射器portmap(可选)    sudo apt-get install portmap 2、在终端提示符后键入以下命令安装NFS服务器   sudo apt-get ins...
用户1494767 2012-08-09 22:33
Linux下DNW的PC端USB驱动和写入工具【转】
1. 下载Linux下DNW的PC端USB驱动和写入工具 文件名: dnw_linux.zip 下载后把后缀名改成.tgz #或者搜索 linux dnw 2. 编译PC端USB驱动和写入...
用户1494767 2012-01-06 17:01
STM32F207 uCOS-II移植笔记(下)
  第十步:main函数中变为:主要是将时钟初始化去掉,并建立一个启动任务        int main(void)        {           CPU_INT08U  o...
用户1494767 2012-01-05 09:51
STM32F207 uCOS-II移植笔记(上)
                                     STM32F207 uCOS-II移植笔记(上) 第一步: 建立STM32F207工程,已经有相关文档说明。其中stm...
用户1494767 2011-12-15 18:04
转]ubuntu 环境变量设置方法
环境变量配置文件 在Ubuntu中有如下几个文件可以设置环境变量 1、/etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,...
EE直播间
更多
我要评论
5
9
关闭 站长推荐上一条 /3 下一条