基于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字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [实用模板]第八章:法国“新浪潮”与“左岸派”
- [实用模板]2021年北京上半年临床医学检验技师生物
- [实用模板]SAP GUI 7.10客户端安装配置文档
- [实用模板]2001年临床执业医师资格考试综合笔试试
- [实用模板]36机场工作实用英语词汇总结
- [实用模板](一)社会保险稽核通知书
- [实用模板]安全教育主题班会材料
- [实用模板]濉溪县春季呼吸道传染病防控应急演练方
- [实用模板]长沙房地产市场周报(1.30-2.3)
- [实用模板]六年级数学上册典中点 - 图文
- [实用模板]C程序设计(红皮书)习题官方参考答案
- [实用模板]中国证监会第一届创业板发行审核委员会
- [实用模板]桥梁工程复习题
- [实用模板]2011学而思数学及答案
- [实用模板]初中病句修改专项练习
- [实用模板]监理学习知识1 - 图文
- [实用模板]小机灵杯四年级试题
- [实用模板]国贸专业毕业论文模板
- [实用模板]教育学概论考试练习题-判断题4
- [实用模板]2015届高考英语一轮复习精品资料(译林
- 00Nkmhe_市场营销学工商管理_电子商务_
- 事业单位考试法律常识
- 诚信教育实施方案
- 吉大小天鹅食品安全检测箱方案(高中低
- 房地产销售培训资料
- 高一地理必修1复习提纲
- 新概念英语第二册lesson_1_练习题
- 证券公司内部培训资料
- 小学英语时间介词专项练习
- 新世纪英语专业综合教程(第二版)第1册U
- 【新课标】浙教版最新2018年八年级数学
- 工程建设管理纲要
- 外研版 必修一Module 4 A Social Surve
- Adobe认证考试 AE复习资料
- 基于H.264AVC与AVS标准的帧内预测技术
- 《食品检验机构资质认定管理办法》(质
- ABB变频器培训课件
- (完整版)小学说明文阅读练习题及答案
- 深思洛克(SenseLock) 深思IV,深思4,深
- 弟子规全文带拼音




