原创 USB心情日记-发现USB鼠标

2013-8-30 00:54 1694 2 5 分类: MCU/ 嵌入式

2013.8.29 晴

天气炎热,离开研发岗位已1年矣。苦觅出路,重回研发!

要STM32和PC进行USB通讯,首先要让PC认出STM32是个USB设备,而且还是个FS设备。所以我们必须在DP数据线上连上个上拉电阻,告诉电脑自己,我是USB FS设备来的。

根据需要,我们要控制PC13为低电平,实现接通1.5K的上拉电阻到DP数据线上。

根据main.c中的main()函数

我们可以先进入位于hwconfig.c中的Set_System()函数中(右键菜单Go to ),发现控制接通上拉电阻的关键代码为

  /* Enable the USB disconnect GPIO clock */

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_DISCONNECT, ENABLE);

  /* USB_DISCONNECT used as USB pull-up */

  GPIO_InitStructure.GPIO_Pin = USB_DISCONNECT_PIN;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;

  GPIO_Init(USB_DISCONNECT, &GPIO_InitStructure);

根据RCC_APB2Periph_GPIO_DISCONNECT,USB_DISCONNECT_PIN,USB_DISCNNECT三个参数,我们跳转到定义处platform_config.h文件中,将这三个参数的宏定义修改为PC13,也就是下面的样子

  #define USB_DISCONNECT                      GPIOC

  #define USB_DISCONNECT_PIN                  GPIO_Pin_13

  #define RCC_APB2Periph_GPIO_DISCONNECT      RCC_APB2Periph_GPIOC

现在插上开发板,就会发现一个鼠标啦!

备注:在使用Debug_in_sram.ini时,必须重映射中断向量表VECT_TAB,故我们需在system_stm32f10x.c文件中将#define VECT_TAB_SRAM注释去掉,也就是要定义VECT_TAB_SRAM这个宏,这样之后,我们才能在SRAM中调试含有ISR的函数,不然就会跑飞啦!

接下来,就是实现鼠标的上下左右移动功能了。从main()函数中调用的JoyState()进行跟踪,发现了如if (!STM_EVAL_PBGetState(Button_RIGHT))之类的代码,我们追踪Button_RIGHT一直到stm3210e_eval.c中,发现如下代码

* @brief Joystick Right push-button

 */

#define RIGHT_BUTTON_PIN                 GPIO_Pin_2

#define RIGHT_BUTTON_GPIO_PORT           GPIOE

#define RIGHT_BUTTON_GPIO_CLK            RCC_APB2Periph_GPIOE

#define RIGHT_BUTTON_EXTI_LINE           EXTI_Line2

#define RIGHT_BUTTON_EXTI_PORT_SOURCE    GPIO_PortSourceGPIOE

#define RIGHT_BUTTON_EXTI_PIN_SOURCE     GPIO_PinSource2

#define RIGHT_BUTTON_EXTI_IRQn           EXTI2_IRQn

/**

 * @brief Joystick Left push-button

 */   

#define LEFT_BUTTON_PIN                  GPIO_Pin_3

#define LEFT_BUTTON_GPIO_PORT            GPIOE

#define LEFT_BUTTON_GPIO_CLK             RCC_APB2Periph_GPIOE

#define LEFT_BUTTON_EXTI_LINE            EXTI_Line3

#define LEFT_BUTTON_EXTI_PORT_SOURCE     GPIO_PortSourceGPIOE

#define LEFT_BUTTON_EXTI_PIN_SOURCE      GPIO_PinSource3

#define LEFT_BUTTON_EXTI_IRQn            EXTI3_IRQn 

/**

 * @brief Joystick Up push-button

 */

#define UP_BUTTON_PIN                    GPIO_Pin_4

#define UP_BUTTON_GPIO_PORT              GPIOE

#define UP_BUTTON_GPIO_CLK               RCC_APB2Periph_GPIOE

#define UP_BUTTON_EXTI_LINE              EXTI_Line4

#define UP_BUTTON_EXTI_PORT_SOURCE       GPIO_PortSourceGPIOE

#define UP_BUTTON_EXTI_PIN_SOURCE        GPIO_PinSource4

#define UP_BUTTON_EXTI_IRQn              EXTI4_IRQn 

/**

 * @brief Joystick Down push-button

 */  

#define DOWN_BUTTON_PIN                  GPIO_Pin_5

#define DOWN_BUTTON_GPIO_PORT            GPIOE

#define DOWN_BUTTON_GPIO_CLK             RCC_APB2Periph_GPIOE

#define DOWN_BUTTON_EXTI_LINE            EXTI_Line5

#define DOWN_BUTTON_EXTI_PORT_SOURCE     GPIO_PortSourceGPIOE

#define DOWN_BUTTON_EXTI_PIN_SOURCE      GPIO_PinSource5

#define DOWN_BUTTON_EXTI_IRQn            EXTI9_5_IRQn 

将它们修改成我们开发板上对应按键的端口,便可以实现上下左右的鼠标了!

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户387277 2013-9-12 00:29

谢谢!

用户403664 2013-9-2 17:23

欢迎加入·!

用户377235 2013-8-30 02:18

ujfijefhed v r

用户377235 2012-4-27 19:46

NRF24LE1文档大全及编程软件 驱动 http://ourdev.cn/thread-5469809-1-1.html

用户398315 2010-9-10 14:13

你好啊 我给你邮箱发了邮件就是请教250K延时问题的 你没回复我 请问收到了吗 能帮忙看下不 谢谢您啊
相关推荐阅读
用户387277 2013-09-12 00:28
USB心情日记01-迷途中的方向
最近的工作进展非常不顺利,美标的离心式榨汁机真心不好做,还要做慢加载,Delay了好多天了。 加班回来,目睹STM32那令人相当凌乱的USB库,有种想哭的感觉。前些天跟踪代码在里面跳来跳去,令...
我要评论
3
2
关闭 站长推荐上一条 /3 下一条