STM32f103USB移植之USB鼠标

        这几天闲着没事开始折腾起32的USB了,USB协议内容有这么复杂,看了几天只吧大概的流程看懂了,具体的实现和数据传输就没有去深究了.stm32USB模块的资料在网上找到了许多,不过每个都只是讲了一部分,在这里把自己移植的过程和我的理解写下来,给自己做个备忘也给大家参考一下。


/ **************************************不吵嗦的分割线***** ********* /


移植准备:ST官方提供的USB库之JoyStickMouse

                 开发环境:keil 5.11

                 使用芯片:STM32F103VE

                 参考资料:https ://blog.youkuaiyun.com/a827415225/article/details/51745013

                                  https://www.amobbs.com/thread-5583091-1-1.html?_dsign=b0f4c123

                例程和usb库下载:https ://download.youkuaiyun.com/download/mirco_mcu/10369087

1.新建工程模板

        先新建一个空白工程模板,添加所需要的外设,把需要的库文件加入到文件中。USB文件中放入USB库文件,其中CONFIG文件夹中为USB接口文件,另一个文件夹放入USB内核文件。USB内核文件已经封装的很好了,不需要进行改动。

下载打开USB驱动库,其中库文件夹中的STM32F10x_StdPeriph_Driver为STM32F103的USB驱动内核文件,复制到工程文件夹中即可的的的的.project文件夹为官方示例文件,我们把JoyStickMouse中的公司和SRC文件内容添加到工程文件夹中(为USB库的接口文件)。

文件添加说明和文件作用参见正点原子的教程和ST官方的文件说明(在附件中可下载)


2.文件移植

        工程准备完成后开始进行移植了,JoyStickMouse的示例工程是使用官方的开发板上的四个按键控制鼠标的移动。我们这个移植是不使用外部硬件控制鼠标,而是让他自己动,我们通过画板来观察他的轨迹,如果有需要,可以自己添加相关的程序。

首先是更改 platform_config.h文件.platform_config.h是STM官方板子的资源平台引脚配置文件,我们使用的芯片是STM32F103系列,然后根据自己的开发板设置需要的引脚 

在platform_config.h中很多是为了支持不同芯片和不同开发板而进行的宏定义,我们不需要这么多,只保留下面几个。



        我们主要需要改动的是hw_config.c这个文件,这个文件是硬件配置。例如初始化USB时钟低功耗模式等。我们先把和我们硬件无关的宏定义配置删掉,只保留了USB上拉引脚初始化,USB引脚初始化我们并不需要进行配置也可以使用(为什么?)。配置完成如下图所示。



然后我们配置USB时钟,修改Set_USBClock()函数,设置时钟为48MHZ。

同样我们先去除无关的宏定义,保留我们所需要的配置。



接下来我们删除void GPIO_AINConfig(void)这个函数。它是设置IO模式,使降低工作时的功耗,我们并不需要它,把它删去。

后面我们修改USB挂起模式,只保留一个语句即可。


在配置中断优先级的函数中把无关项删除,保留需要的中断


更改函数USB_Cable_Config(FunctionalState NewState)它的作用是软件更改USB的连接或断开


我们之前修改了挂起/复位函数,void Leave_LowPowerMode(void)我们还需要对usb_pwr.c进行一些修改。把usb_pwr.c文件中void Suspend(void)函数后面部分删除掉。(从165行到212行)



最后我们打开stm32_it.h保留USB两个中断


        现在这些配置基本都移植好了,接下来我们就要更改,USB鼠标的移动函数了JoyState()和Joystick_Send()。这两个函数作用分别是返回检测并返回鼠标的移动状态和把数据通过USB发送。

        把JoyState()内容全部删除,添加一个return 1;然后更改Joystick_Send()函数。

        我通过串口把坐标值打印出来,方便查看

        说明一下:电脑屏幕坐标是在电脑左上角为坐标原点,从左向右,从上到下依次增大在想电脑发送的数组中,数据的含义为被左键点击,X坐标变化值, Ÿ左边的变化值,右键点击

        下面函数的是从鼠标现在的点开始每次向右移动5像素这是控制鼠标右移,如果需要左移的话,输入变化量为(255-左移变化量)或者直接输入( - 左移变化量)也行,不过这样会提示警告,会将UCHAR转为炭



第一篇博客,如果有什么问题还请指正。


STM32F103C8 Serial(UART) to USB HID Keyboard Mouse 串口 转 USB键盘鼠标 (1) 使用Composite Device 组合(复合)设备 (1.1) 1个Device -> 1个 Configuation -> 2个Interfance (Keyboard & Mouse) (1.2) Keyboard Interfance -> HID (boot mode) -> 2个Endpoint(IN_0x81 & OUT_0x01) -> KeyboardReportDescriptor(不使用Report ID) (1.3) Mouse Interfance -> HID (boot mode) -> 1个Endpoint(IN_0x82) -> MouseReportDescriptor(不使用Report ID) (1.4) 使用HID boot模式, 不使用Report ID, 以便兼容在 计算器设定BIOS模式 中的操作 (2) 串口接收 命令 (2.1) UART协议: 115200, n, 8, 1 (2.2) 1帧发送字符串格式, 以 '{'开始; '}'结束; ','分隔. 共9个10进制数字 例如: {1,2,3,4,5,6,7,8,9} (2.3) 第9位 区分 Keyboard(64) 或是 Mouse(128) 命令 例如: {0,0,0,0,0,0,0,0,64} --- 发送Keyboard命令 {0,0,0,0,0,0,0,0,128} --- 发送Keyboard命令 (3) 发送Keyboard键盘命令时 : 第1~8位 分别如下 (3.1) 第1位 : Key_Release = 0x00, Left_Control = 0x01, Left_Shift = 0x02, Left_Alt = 0x04, Left_GUI = 0x08, Right_Control = 0x10, Right_Shift = 0x20, Right_Alt = 0x40, Right_GUI = 0x80, 例如: {8,0,0,0,0,0,0,0,64} --- 发送 Win_Key键 {128,0,0,0,0,0,0,0,64} --- 发送 WinApp_Key键 {32,0,0,0,0,0,0,0,64} --- 发送 右Shift键 (3.2) 第2位 : 保留,不使用,一律填0 (3.3) 第3~8位 : 可以同时发送6个Keyboard按键 例如: {0,0,4,5,6,7,8,9,64} --- 发送 'abcdef'键 {2,0,4,5,6,7,8,9,64} --- 按住 左Shift 发送 'abcdef'键 => 'ABCDEF' {0,0,0,5,0,7,0,9,64} --- 发送 'bdf'键 (0表示 无按键) 按键码 可参阅: (HID Usage ID) http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/translate.pdf https://www.hiemalis.org/~keiji/PC/scancode-translate.pdf https://gist.github.com/MightyPork/6da26e382a7ad91b5496ee55fdc73db2 http://www.usb.org/developers/hidpage/Hut1_12v2.pdf (4) 发送Mouse鼠标命令时 : 第1~8位 分别如下 (4.1) 第1位 : Button_Release = 0x00, Left_Button = 0x01, Right_Button = 0x02, Mid_Button = 0x04, 例如: {1,0,0,0,0,0,0,0,128} --- 点击 左键 {2,0,0,0,0,0,0,0,128} --- 点击 右键 {4,0,0,0,0,0,0,0,128} --- 点击 中键 (4.2) 第2~4位 : 移动(X,Y), 滚轮(Wheel) X: -127~127:左右移动鼠标 Y: -127~127:上下移动鼠标 Wheel: -127~127:上下转动滚轮 例如: {0,20,-10,0,0,0,0,0,128} --- 鼠标 右移20,上移10 {0,0,0,-30,0,0,0,0,128} --- 滚轮-30 (4.2) 第5~8位 : 保留,不使用,一律填0
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值