STM32f103USB移植之USB鼠标

时间:2024-04-08 14:41:45

        这几天闲着没事开始折腾起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

                例程和usb库下载:https ://download.csdn.net/download/mirco_mcu/10369087

1.新建工程模板

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

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

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

STM32f103USB移植之USB鼠标


2.文件移植

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

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

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

STM32f103USB移植之USB鼠标


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

STM32f103USB移植之USB鼠标


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

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

STM32f103USB移植之USB鼠标


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

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

STM32f103USB移植之USB鼠标

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

STM32f103USB移植之USB鼠标

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

STM32f103USB移植之USB鼠标

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

STM32f103USB移植之USB鼠标


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

STM32f103USB移植之USB鼠标

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

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

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

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

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

STM32f103USB移植之USB鼠标


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