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
将它们修改成我们开发板上对应按键的端口,便可以实现上下左右的鼠标了!
用户387277 2013-9-12 00:29
用户403664 2013-9-2 17:23
用户377235 2013-8-30 02:18
用户377235 2012-4-27 19:46
用户398315 2010-9-10 14:13