教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 实用模板 >

基于STM32的USB程序开发笔记

来源:网络收集 时间:2026-08-12
导读: http://www.hkaco.com 基于STM32的USB程序开发笔记 第一篇:需要准备的一些资料 .............................................................................................................. 1 基于STM32的USB程序开发笔记(三) ——STM32 USB固件函

http://www.hkaco.com

基于STM32的USB程序开发笔记

第一篇:需要准备的一些资料 .............................................................................................................. 1 基于STM32的USB程序开发笔记(三) ——STM32 USB固件函数的一些介绍 ............................ 4 基于STM32的USB程序开发笔记(四)——USB设备的枚举(上)............................................. 12 第五篇:USB设备的枚举(下) ....................................................................................................... 15 第六篇:XP下USB驱动开发的初步准备工作 ................................................................................ 23 第七篇:XP下USB驱动开发的最终完成 ........................................................................................ 30

第一篇:需要准备的一些资料

1:STM32的参考手册,这对于设备底层USB的硬件配置以及事件驱动机制的了解尤为重要,你需要了解各个寄存器的功能以及如何操作,比如CNTR、ISTR、EPnR、DADDR等等,如果你想学习USB,这个

手册是必须的。

2:USB2.0 协议,这个资料同样必不可少,如果因为英语阅读能力而苦苦寻找中文版的USB2.0协议,建议不要这么做,现在网络中的所谓的中文版的USB2.0协议不是官方撰写的,大多数是一些热心朋友自己翻译的,却不是很全面,如果你在为寻找这类的资料而无所获时,建议认真塌实的看看官方英文版的USB2.0协议,官方协议阐述的十分详细,650多页,一字一句的了解全部协议不太可行,可针对性的重点理解,比如对第9章USB Device Framework的详细理解对于你的USB Device固件开发不可缺少(这里就是

STM32)。

3:ST提供的USB固件库,这个类库较为散乱,但不可不参考

以下是最近这段时间的成果,包含固件、驱动以及应用程序,固件部分有些功能是不被支持的,如SR_SetDescriptor()、 SR_SynchFrame()等等,在此说明战士不支持非故意如此,而是还没时间仔细深入

编写完善,因为这些目前不被支持的部分目前不被使用到。

后序将接着对各个部分进行一些说明,希望朋友们多多支持,同时欢迎朋友们讨论。 如果你使用的是万利的STM3210B-LK1开发板,则可以烧写hex文件后进行测试。

下载该文件请参阅:

http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=1808061&bbs_page_no=1&bbs_id=3020

第2篇:STM32 USB固件函数的驱动原理

首先需要了解一个概念:

USB 设备(DEVICE)从来只是被动触发,USB主机(HOST)掌握主动权,发送什么数据,什么时候发送,是给设备数据还是从设备请求数据,都是由USB 主机完成的,USB设备只是配合主机完成设备的枚举、数据方向和大小。根据数据特性再决定该不该回复该如何回复、该不该接收该如何接收这些动作。 了解这些,再仔细查看STM32的参考手册USB部分以及STM32的中断向量表,从中可以找到两个中断:

/*******************************************************************************

http://www.hkaco.com

* Function Name : USB_HP_CAN_TX_IRQHandler

* requests. * Input : None * Output : None * Return : None

* Description : This function handles USB High Priority or CAN TX interrupts

*******************************************************************************/

void USB_HP_CAN_TX_IRQHandler(void)

{ USB_HPI();

}

/*******************************************************************************

* Function Name : USB_LP_CAN_RX0_IRQHandler

* Description : This function handles USB Low Priority or CAN RX0 interrupts

* requests. * Input : None * Output : None * Return : None

*******************************************************************************/

void USB_LP_CAN_RX0_IRQHandler(void)

{ USB_LPI();

}

即 USB的高、低优先权中断处理函数,这也是整个STM32 USB的事件驱动源,USB_HPI()与USB_LPI()既而转向usb_core(.c,.h)进行相关处理。中断传输(interrupt)、控制传输(control)、大流量传输(bulk)由USB_LPI()响应,大流量传输(bulk)同样可能响应USB_HPI(),同步传输 (isochronous)只响应USB_HPI()。

这样响应USB的所有请求只需要关注usb_core.c文件中的 USB_LPI()与USB_HPI()函数。由于本人也是对USB刚刚有所了解,因而在本例笔记中USB_HPI()函数未做任何处理,在此开源希望大家能完善与纠

正错误并能共享喜悦。以下是USB_LPI()函数:

// *****************************************************************************

// Function Name : USB_LPI.

// Description : Low Priority Interrupt's service routine.

// Input : // Output : // Return :

// *****************************************************************************

void USB_LPI(void)

{

unsigned short wValISTR = GetISTR();

#if(CNTR_MASK & ISTR_RESET) // Reset

http://www.hkaco.com

if(wValISTR & ISTR_RESET & vwInterruptMask)

{

SetISTR(CLR_RESET); INT_ISTR_RESET();

} #endif

#if(CNTR_MASK & ISTR_DOVR) // DMA Over/Underrun

if(wValISTR & ISTR_DOVR & vwInterruptMask)

{

SetISTR(CLR_DOVR); INT_ISTR_DOVR();

} #endif

#if(CNTR_MASK & ISTR_ERR) // Error if(wValISTR & ISTR_ERR & vwInterruptMask)

{

SetISTR(CLR_ERR); INT_ISTR_ERROR();

} #endif

#if(CNTR_MASK & ISTR_WKUP) // Wakeup if(wValISTR & ISTR_WKUP & vwInterruptMask)

{

SetISTR(CLR_WKUP); INT_ISTR_WAKEUP();

} #endif

#if(CNTR_MASK & ISTR_SUSP) // Suspend if(wValISTR & ISTR_SUSP & vwInterruptMask)

{

INT_ISTR_SUSPEND();

SetISTR(CLR_SUSP); // must be done after setting of CNTR_FSUSP

} #endif

#if(CNTR_MASK & ISTR_SOF) // Start Of Frame if(wValISTR & ISTR_SOF & vwInterruptMask)

{

SetISTR(CLR_SOF); INT_ISTR_SOF();

http://www.hkaco.com

} #endif

#if(CNTR_MASK & ISTR_ESOF) // Expected Start Of Frame

if(wValISTR & ISTR_ESOF & vwInterruptMask)

{

SetISTR(CLR_ESOF); I …… 此处隐藏:3775字,全部文档内容请下载后查看。喜欢就下载吧 ……

基于STM32的USB程序开发笔记.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/454341.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)