你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

USB倾情奉献(注释版)

[复制链接]
流浪的方丈2015 发布时间:2015-1-6 14:41
1、STM32里面,USB设备是怎么接受USB主机发送的各种请求?接受以后存放在哪里??
答:根据地址和端点来接收请求,接收后一般存放在缓冲区,STM32芯片就有一个USB和CAN共享的专用缓冲区。即缓冲区描述表在USB_core.c下的u8 Setup0_Process(void)函数里面可以看到,刚开始的时候,看到了也不懂,现在懂了^_^

2、(*(volatile unsigned long *)
对于不同的计算机体系结构,设备可能是端口映射,也可能是内存映射的。如果系统结构支持独立的IO地址空间,并且是端口映射,就必须使用汇编语言完成实际对设备的控制,因为C语言并没有提供真正的“端口”的概念。如果是内存映射,那就方便的多了。
以 #define IOPIN (*((volatile unsigned long *) 0xE0028000)) 为例:作为一个宏定义语句,define是定义一个变量或常量的伪指令。首先( volatile unsigned long * )的意思是将后面的那个地址强制转换成 volatile unsigned long * ,unsigned long * 是无符号长整形,volatile 是一个类型限定符,如const一样,当使用volatile限定时,表示这个变量是依赖系统实现的,以为着这个变量会被其他程序或者计算机硬件修改,由于地址依赖于硬件,volatile就表示他的值会依赖于硬件。
volatile 类型是这样的,其数据确实可能在未知的情况下发生变化。比如,硬件设备的终端更改了它,现在硬件设备往往也有自己的私有内存地址,比如显存,他们一般是通过映象的方式,反映到一段特定的内存地址当中,这样,在某些条件下,程序就可以直接访问这些私有内存了。另外,比如共享的内存地址,多个程序都对它操作的时候。你的程序并不知道,这个内存何时被改变了。如果不加这个voliatile修饰,程序是利用catch当中的数据,那个可能是过时的了,加了 voliatile,就在需要用的时候,程序重新去那个地址去提取,保证是最新的。
3、USB的IO口需不需要复用,如果要复用,怎么设置呢?没发现手册上有讲啊,而且那2个口,PA11,PA12默认是IO口啊!怎么设置呢
答:在此部分代码用于实现我们在硬件设计部分提到的功能,USB的配置通过三个函数完成:USB_Interrupts_Config()、Set_USBClock()和USB_Init(),第一个函数用于设置USB唤醒中断和USB低优先级数据处理中断,Set_USBClock函数用于 配置USB时钟,也就是从72M的主频得到48M的USB时钟(1.5分频)。最后USB_Init()函数用于初始化USB,最主要的就是调用了Joystick_init函数,开启了USB部分的电源等。这里需要特别说明的是,USB配置并没有对PA11和PA12这两个IO口进行设置,是因为,一旦开启了USB电源(USB_CNTR的PDWN位清零)PA11和PA12将不再作为其他功能使用,仅供USB使用,所以在开启了USB电源之后不论您怎么配置这两个IO口,都是无效的。要在此获取这两个IO口的配置权,则需要关闭USB电源,也就是置位USB_CNTR的PDWN位。
有什么问题,大家自己多思考下,这是我学习时候的问题。


USB学习.rar

下载

4.89 MB, 下载次数: 108

收藏 3 评论1 发布时间:2015-1-6 14:41

举报

1个回答
hpdell 回答时间:2015-11-17 15:47:10
看来不简单了,研究的很深罗

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版