STM32f103USB移植之USB鼠标

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

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

移植准备:st官方提供的usb库之JoyStickMouse

                 开发环境:keil 5.11

                 使用芯片:STM32F103VE

                 参考资料:https://blog.csdn.net/a827415225/article/details/51745013

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

1.新建工程模板

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

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

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


2.文件移植

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

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

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



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



然后我们配置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()函数。

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



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


猜你喜欢

转载自blog.csdn.net/mirco_mcu/article/details/80003028