STM32的USB_MOUSE例子详解及改造(KEIL MDK在EK-STM32)

来源:本站
导读:目前正在解读《STM32的USB_MOUSE例子详解及改造(KEIL MDK在EK-STM32)》的相关信息,《STM32的USB_MOUSE例子详解及改造(KEIL MDK在EK-STM32)》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《STM32的USB_MOUSE例子详解及改造(KEIL MDK在EK-STM32)》的详细说明。
简介:这个例子是用EK的板子上的KEY4实现一个鼠标,不需要自己编USB驱动,因为使用标准的HID。

用KEIL打开那个USB例子的工程,在main.c:

while (1)

{

Delay(10000);

if (JoyState() != 0)

{

Joystick_Send(JoyState());

}

}

可以看到 主程序不断循环检测按键,一旦有键按下,就通过USB发送到PC.

这里说明一下,鼠标发送的有用数据是4个字节,0字节的bit0表示鼠标左键单击,bit1是右键

1字节是X位置,2字节是Y位置,3号字节我没弄清除

然后打开hw_config.h和hw_config.c这两个是硬件配置,主要是按键

.

检测.

在.h开始加上

#define DOWN 1

#define LEFT 2

#define RIGHT 3

#define UP 4

#define SEL 7

#define CURSOR_STEP 5 //原来的版本是30 ,被我改成5 这样每次移动时鼠标更准确

#define LEFT_CLICK 8 //这两个是我加的 ,把板子上的KEY2和KEY3作为左键和右键

#define RIGHT_CLICK 9

相应的.c文件也有改动

u8 JoyState(void)

{

......前面4个按键检测我这里省略不写了,我没有改动,下面是我添的

if (!GPIO_ReadInputDataBit(GPIOD, JOY_SEL))

{

return SEL;

}

if (!GPIO_ReadInputDataBit(GPIOD, MISE_LEFT))

{

return LEFT_CLICK;

}

if (!GPIO_ReadInputDataBit(GPIOD, MISE_RIGHT))

{

return RIGHT_CLICK;

}

/* No key is pressed */

else

{

return 0;

}

}

在USB发送函数,我也添加了几条如下:

void Joystick_Send(u8 Keys)

{

u8 Mouse_Buffer[4] = {0, 0, 0, 0};

s8 X = 0, Y = 0;

//u8 Sel_flag=0;

switch (Keys)

{

case LEFT:

X -= CURSOR_STEP; //左键按下, 以下类似

break;

case RIGHT:

X += CURSOR_STEP;

break;

case UP:

Y -= CURSOR_STEP;

break;

case DOWN:

Y += CURSOR_STEP;

case SEL:

// Sel_flag=1;

break;

//鼠标发送的有用数据是4个字节,0字节的bit0表示鼠标左键单击,bit1是右键

case LEFT_CLICK:

Mouse_Buffer[0] =0x01; //上面说了,鼠标发送的4个字节的0号字节有左右键信息.

break;

case RIGHT_CLICK:

Mouse_Buffer[0]=0x02;

break;

default:

return;

}

/* prepare buffer to send */

Mouse_Buffer[1] = X;

Mouse_Buffer[2] = Y;

/*copy mouse position info in ENDP1 Tx Packet Memory Area*/

UserToPMABufferCopy(Mouse_Buffer, GetEPTxAddr(ENDP1), 4);

/* enable endpoint for transmission */

SetEPTxValid(ENDP1);

}

上面先根据按键的信息确定XY坐标,任何左右键信息然后调用:

UserToPMABufferCopy(Mouse_Buffer, GetEPTxAddr(ENDP1), 4);把4个字节通过USB发送出去,UserToPMABufferCopy()是USB库的底层驱动

好了,程序写完了,我们先保存再F7一下生成HEX.再把板子的BOOT0跳线设为1,BOOT1为0

然后用ST的串口ISP软件烧进STM32去.断电后再把BOOT0设为0.

USB插到板子右边那个USB口,USBEN跳线接到0.过几秒钟,左右按动KEY4,电脑上的鼠标点击标志是不是移动了,如果是,恭喜你,你成功了,要没动的话,可以断电后再试一次.(检查跳线,USBEN应为0)

工程的说明文档Readme.TXT建议说最好先运行STM32 再插USB线,你可以通过2根USB线来实现,

先插上板子左边那个USB,供电跳线选STLINK2,过一段实践后插右边的USB口,这样被PC识别率会高.

在IAR的例子上,其实是一样的,IAR例子用SELEC来实现单击,有EK板子的可以试试.这个例子对于学USB比较简单.

提醒:《STM32的USB_MOUSE例子详解及改造(KEIL MDK在EK-STM32)》最后刷新时间 2024-03-14 00:58:39,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《STM32的USB_MOUSE例子详解及改造(KEIL MDK在EK-STM32)》该内容的真实性请自行鉴别。