基于stm32的usb简易鼠标毕业设计论文(编辑修改稿)内容摘要:
N 16 位校验 EOP 图 数据包结构 握手包 用来查看 一个 数据 是否被对方确认。 握手包四种类型: ACK、 NAK、 STALL 和NYET。 ACK 表示数据 已经被接收 ,空间容纳 也足够。 NAK表示没有数据需要返回或已经正确接受但没有空间容纳。 STALL 表示这个设备无法执行这个请求或者端点已经被挂起了,表示一种错误的状态。 NYET 只在 的高速设备中使用,表示本次数据 成功接受但没有空间接受下一次数据。 图 是握手包的结构。 同步域 包标志 PID EOP 图 握手包结构 特殊包 只在一些特殊场合使用,分 PRE、 ERR、 SPLIT 和 PING 四种。 只有 ERR 是握手包,其他为令牌包。 除了 PRE,其他三个都是 协议新增的,不在此次设计的研究范围。 PRE 是 通知集线器打开其低速端口的一种前导包。 PRE仅仅使用在全速模式中,与握手包的结构一样。 当传输模式由全速变低速时,主机会在全速模式下发送一个 PRE 令牌包,集线器收到此令牌包后,就会打开低速设备端口,但全速设备会忽略次令牌包。 河南城建学院本科毕业设计(论文) 第 2章 USB协议概述 7 USB 的传输类型 USB 有四种传输类型:批量传输、同步传输、中断传输和控制传输。 前面提到,USB 数据的基本传输单位是包,但在具体传输数据时还必须把包组织成事务。 批量传输 :使用批量事务传输数据。 中断传输 :一种保证查询频率的传输。 中断传输一般用在 我们所说的 延迟 要 尽可能小的设备 中。 现在使用的鼠标、键盘及其他 HID都属于这样的设备。 同步传输 : 有些设备如音频、视频设备对数据的延迟很敏感,而且需要对大量数据不停的传输,但对数据的正确与否要求不高,此时同步传输是最好的选择。 控制传输: 分为建立过程、数据过程(可选)和状态过程三个过程。 建立过程 用来 输出数据,使用建立事务。 建立过程使用只能使用 DATA0 的 SETUP 令牌包,而且握手包也只能只用 ACK 应答。 数据过程可选,如果有可以包含一笔或多比数据事务。 状态过程是一笔只使用 DATA1 包的批量事务。 其传输方 向也就是控制读和控制写过程与前面批量事务相反。 河南城建学院本科毕业设计(论文) 第 3章 STM32及 MDK简介 8 第 3 章 STM32 及 MDK 简介 STM32 简介 2020 年 ARM 公司推出 Cortex 系列微处理器,根据不同性能的要求,分成了以公司三个字母分别命名的三个系列。 本次设计使用的是 M 系列,因为这个系列成本较低,性能上也完全能够胜任。 在 ARM 公司和意法半导体 ST 公司合作后, 2020年 ST 公司发布了基于 CortexM3内核的 STM32 系列处理器。 STM32 系列处理器分为标准型和增强型两个系列,主要产品有标准型 的STM32F101 工作在 36MHz,增强型的 STM32F103 工作在 72MHz 并拥有更大的 RAM 和更丰富的外设。 因为 STM32F103 运算频率高,能实现更高端的运算,而且其自带的端口具有极好的连接能力,价格上也比较便宜,所以设计中采用这一款。 图 是 STM32F103 处理器的配置。 72MHzCPU 多达 64K的 RAM 2 12 位 ADC 温度传感器 3USART 2 SPI 多达 512K的 ROM USB 通用 I/O引脚 3 16位定时器 4~ 16MHz主振荡器 内嵌 8MHz 和32kHz 的 RC振荡器 实时时钟 2看门狗 7通道 DMA CAN PWM 定时器 图 STM32F103处理器的配置 正是由于 STM32F10x 系列处理器配有众多的外设,所以它的用途非常广泛。 在工业方面,可以应用在 PLC、报警系统、变频器,打印机等上面;在低功耗方面,应用的产品有电表、血糖测量仪、 UPS 等;数码家电方面,相应的产品有电脑外设、游戏机、数码相机等。 MDK 的使用 支持 STM32 微控制器的开发工具虽然很多,但结合中国的业内行情及收费情况, Keil 公司的 MDK 是不二选择。 MDK集 成了 Keil 的μ Vision IDE 和 ARM 编译工具 RVCT 的优势。 特别是中国版 MDK 推出后,通过更加合理的价格和服务,逐步使得 MDK 成为中国嵌入式工程师的最爱芯片。 使用 MDK 的一般开发过程: 河南城建学院本科毕业设计(论文) 第 3章 STM32及 MDK简介 9 新建一个工程,从设备库中选择目标芯片,配置编译器环境; 用 C/C++或汇编语言编写源文件; 编译目标应用程序; 修改源程序中的错误; 测试连接应用程序。 MDK 的工具集默认的是 RealView 编译工具,如有特殊需要,也可以安装使用GNU GCC 编译器。 下面是 此次设计中 的 具体操作 : 在 MDK 主界面中选择 Project→ New Project 菜单项,输入工程名字即可新建一个工程。 创建新工程时软件会提示我们为工程选择一款相应的处理器,也可以通过 Poject→ Select Device 打开此选项。 对于大部分设备,软件会提示是否在工程中添加 CPU 的启动代码,为了让设备顺利完成初始化工作,我们点击“是”,以减少编写启动代码的工作量。 MDK 还可以通过 Project→ Options for Target,在弹出的选项中对目标硬件和设备内组件 的相关参数进行配置。 工程创建完了,接下来就是源程序的编写了。 点击 File→ New 创建新的源文件,在编辑窗口写完源程序后以 .C 为后缀保存。 一般情况下会先写一个 添加到工程中。 一般设计人员会采用文件组来组织大的工程,将工程中同一模块或同一类型的源文件放入一个文件组中。 点击 Project→ Conponents,Environment and Books→ Project Components 创建文件组来管理启动代码、源程序和配置文件。 接下来的工作就是编译连接工程了。 单击 Build Target 图 标可编译连接工程文件,出现错误时,会在 Output Window 的 Build 页中显示错误和警告信息。 也可以使用调试器来调试源程序,我们直接把程序下载到开发板中进行目标调试。 应用程序在调试通过后,需要生成 HEX 文件,用于下载到编程器或仿真器中。 生成 HEX 文件后下载到目标设备中,至此嵌入式开发完成。 在此次设计中,我们 按照流程走到最后一步, 然后 在 MDK 中点击 Flash→Download 下载代码到 STM32F103 开发板中。 用 USB 线连接电脑,查看设备管理器,看一看设备是否识别,驱动是否自动安装成功。 如果设备已经 成功安装,试用开发板的四个按键操纵鼠标箭头。 如果可以上下左右移动, 就表示 USB 鼠标设计 成功了。 河南城建学院本科毕业设计(论文) USB鼠标的实现 10 第 4 章 USB 鼠标的实现 USB 简易鼠标的程序编写 因为我们的 STM32F103 开发板上只有四个按 键,所以只能实现鼠标光标的上下左右移动,不能实现鼠标左右键的功能。 由于 USB 协议及接口相当复杂, MDK 自带的 STM32F10x 的固件库中单独提供了 USB 的相关函数库,在编写程序代码时需要将两个库函数包含到编译路径中。 USB 鼠标的程序比较复杂,除了库文件和 USB函数库文件之外,还包含了 8 个源 文件,其中 是启动代码,这里不再多说。 下面是设计中非常重要的 7个源文件 (具体的程序代码见附录 ): 该文件中主要包含两个函数,其中 main 函数初始化系统以及 USB 接口,之后不断查询四个按键是否按下。 如果确定有按键按下则向 USB 缓冲器发出相关数据。 Delay 函数用于延迟。 该文件中没有任何函数,只是包含一些定义 USB 设备的描述符常数,由于 USB鼠标是一个标准的 USB 设备,所以相关的参数也比较容易得到。 如果是开发非标准的 USB 设备的话,则必须开发相 应的在电脑上运行的驱动软件。 该文件 是用来控制 USB 中断服务 用的。 USB 中断 的 情况 分很多种 , 在此次设计中我们 只是调用 文件中的 中断 函数。 该文件中只有一个函数,就是上面提到的用于 控制 USB 中断的 USB_Istr 函数,此 函数 的 主要 作用 是对各类引起 USB 中断的事件作轮询处理。 该文件用于 控制 USB 协议 在设备中的具体实现 ,例如初始化、 SETUP 包、 IN包、 OUT 包等等。 该文件中包含处理 上电、掉电、挂起和唤醒事件的函数。 该文件包含系统配置的函数和处理四个按键动作的函数。 其中 Set_USBClock函数用于配置 USB 端口时钟; Set_System 函数用于配置时钟、通用端口;USB_Cable_Config 函数配置 USB 电缆状态; USB_Interrupts_Config 函数用于配置 USB 中断; JoyState 函数用于获取按键状态; Joystick_Send 用于向 USB 端口河南城建学院本科毕业设计(论文) USB鼠标的实现 11 发送按键的事件。 HID 设备实现的重点在于枚举是否成功,所以程序设计的重点在于标准描述符部分 的编写,因为枚举过程就是检查 USB 设备发送的 USB 标准请求能否正常返回的过程。 USB 协议规定了标准的设备请求为八个字节。 这八字节在默认状态下由控制端点零发出,用在控制传输的建立过程中。 任何 USB 设备都要能够接收大于八字节的数据。 USB 协议规定了十一个标准请求,表 为各种请求的名字及代码。 表 标准请求及代码 标准请求 值 标准请求 值 GET_STATUS 0 GET_CONFIGURATION 8 CLEAR_FEATURE 1 SET_CONFIGURATION 9 SET_FEATURE 3 GET_INTERFACE 10 SET_ADDRESS 5 SET_INTERFACE 11 GET_DISCRIPTOR 6 SYNCH_FRAME 12 SET_DISCRIPTOR 7 其中获取描述符请求 GET_DESCRIPTOR 在枚举过程中用的最多。 主机通过发送获取描述符的请求获取设备的各种描述符,这样就可以得知设备的端点情况、设备类型等各种信息。 表 是获取描述符请求的结构。 表 获取描述符请求的结构 bmRequestType bRequest wValue wIndex wLength 数据过程 0x80 0x06 描述符类型和索引 0或语言 ID 描述符长度 描述符 在上表中的 wValue 这一项中,低字节表示索引号,其具体的作用是在相同种类的描述符中确定一个描述符。 它的高字节,也就是第二字节,用来描述类型编号。 各种描述符的类型编号如表 所示。 设备在收到描述符请求后,就会按照描述符类型的编号,返回对应的描述符。 wIndex 用在需要获取字符串的过程中,可以用它来标明字符串的语言 ID号,其他时候为零。 表 描述符类型及编号 类型 设备描述符 配置描述符 字符串描述符 接口描述符 端点描述符 编号 1 2 3 4 5 河南城建学院本科毕业设计(论文) USB鼠标的实现 12 对于全速模式和低速模式,只有获取设备、配置和字符串描述符这三种。 在返回配置描述符的时候,接口描述符、端点描述符和类特殊描述符(如 HID 描述符和报告描述符)要一起返回,这两类描述符不能单独请求返回。 图 是 HID设备描述符的结构。基于stm32的usb简易鼠标毕业设计论文(编辑修改稿)
相关推荐
块结构及其原理 电机驱动模块的实物图如图 所示: 图 驱动电路实物图 电机驱动模块的主要器件是芯片 LM293D,内部原理图如图 所示: 图 电机驱动内部原理图 全桥式驱动电路的 4 只开关管都工作在斩波状态,如图 所示, K K2为一组, K K4 为另一组,两组的状态互补,一组导通则另一组必定关断。 当K K2 导通时, K K4关断,电机两端加正向电压,电机实现正转或反转制动;当 K K4
tle。 } public void setTitle(String title) { = title。 } public Set getComment() { return ment。 } public void setComment(Set ment) { = ment。 }} 帖子表的映射文件配置 ( ) class name=Message table=message 基于
cbaCBAcccbcacCcBcAbcbbbabCbBbAaCaBaaaCaBaACcCbCaCCCBCABcBbBaBCBBBAAcAbAaACABAAcbaCBAiiiiiiLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL () 或写成 Li () 式中 L 是 6 6 阶的电感矩阵,其中对角线元素 AAL 、 BBL 、
VCC16CD2CD4094A7B6C4D2E1F9G10DP5COM3COM8SMG1Component_1A7B6C4D2E1F9G10DP5COM3COM8SMG2Component_1A7B6C4D2E1F9G10DP5COM3COM8SMG3Component_1A7B6C4D2E1F9G10DP5COM3COM8SMG4Component_1A7B6C4D2E1F9G10DP5COM3
P 3. 6/ W R16P 3. 7/ R D17X T A L 218X T A L 119GND20US T C 89 C 52S?S W P BS?S W P BS?S W P BS?S W P BS?S W P BGND 洛阳理工学院毕业设计(论文) 10 图 25 键盘调整单元接线图 图中,键盘从上至下依次为: S0:接 口,对上一次的计费进行清零,为下次载客做准备; S1:接 口
块电路 ,将 行扫描和列扫描的扫描信号线 接到信号源上,用信号源输出波形代替 单片机控制系统模块发出的行扫 和列扫的信号 ,在单独对 点阵屏显示电路模块进行调试,当准确的 显示出要移动显示的汉字、字符、图像 时即可证明此 行扫描电路模块和列扫描 电路模块工作正常,可以进行整个系统的调试工作。 将所有的模块电路综合成一个整体的系统 ,通电进行测试工作,在软件上小心的调试,尽力将参数调整到最优,