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

STM32F7 USB 缓冲区设置最小单位是字节还是字?

[复制链接]
MaggiGunner 提问时间:2018-2-1 10:42 /
大家好,首次发帖有什么不对的地方请谅解。
最近在用STM32F746做USB CDC类的开发(HAL库),目前关于收发缓冲区有两个疑惑:
1. datasheet及库函数都标明,端点发送寄存器单位是32位字,那是不是意味着我在usbd_conf.c文件中使用端点缓冲区设置函数HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 0, 0x40);就给0端点设置了0x40 * 4 字节大小的缓冲区了?但是我看一些例程感觉这里的大小是按照字节大小来设置的?

2.我看过一个非互联F1/F3系列缓冲区的帖子,里边讲缓冲区需要存储每个端点起始地址及大小信息占用4字节,F7只需要设置寄存器不需要存储缓冲描述表是吗?

另外因为我没接触过太多种类的芯片,想请教一下大牛USB模块在STM32系列中区别大吗?是只分作互联性和非互联性有较大差别还是每一个系列都不太一样?

提前感谢~
收藏 评论4 发布时间:2018-2-1 10:42

举报

4个回答
MaggiGunner 回答时间:2018-2-1 10:45:35
提问的问题在datasheet与库函数中的相关描述

Datasheet中描述

Datasheet中描述

库函数中注释

库函数中注释
衔胆栖冰 回答时间:2018-2-1 20:02:21
查阅了F103和F746的参考手册,可以告诉你。
1.
  1. HAL_StatusTypeDef HAL_PCDEx_SetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo, uint16_t size)
  2. {
  3.   uint8_t i = 0;
  4.   uint32_t Tx_Offset = 0;
  5.   Tx_Offset = hpcd->Instance->GRXFSIZ;
  6.   if(fifo == 0)
  7.   {
  8.     hpcd->Instance->DIEPTXF0_HNPTXFSIZ = (uint32_t)(((uint32_t)size << 16) | Tx_Offset);
  9.   }
  10.   else
  11.   {
  12.     Tx_Offset += (hpcd->Instance->DIEPTXF0_HNPTXFSIZ) >> 16;
  13.     for (i = 0; i < (fifo - 1); i++)
  14.     {
  15.       Tx_Offset += (hpcd->Instance->DIEPTXF[i] >> 16);
  16.     }
  17.     /* Multiply Tx_Size by 2 to get higher performance */
  18.     hpcd->Instance->DIEPTXF[fifo - 1] = (uint32_t)(((uint32_t)size << 16) | Tx_Offset);
  19.   }
  20.   return HAL_OK;
  21. }
复制代码


看完整HAL_PCDEx_SetTxFiFo函数,比如fifo为0是,hpcd->Instance->DIEPTXF0_HNPTXFSIZ = (uint32_t)(((uint32_t)size << 16) | Tx_Offset); size左移16位对于刚好是寄存器bit31:16,FIFO深度以32bit为单位。HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 0, 0x40);就给0端点设置了0x40 * 4 字节大小的缓冲区,没毛病。
2.非互联型和F7的USB FIFO无明显差别。都是通过配置这些寄存器去分配和设置深度。关于你说的存储缓冲描述表,你看下是否使用共享发送FIFO了。

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

MaggiGunner 回答时间:2018-2-2 10:15:43
衔胆栖冰 发表于 2018-2-1 20:02
查阅了F103和F746的参考手册,可以告诉你。
1.

感谢回答!关于第二个问题,应该是没有使用共享发送FIFO的,从寄存器可以读到几个端点地址和深度是连续的。关于我看的缓冲区帖子,地址如下:
http://www.51hei.com/bbs/dpj-40953-1.html STM32 USB Device应用中的包缓冲话题
zero99 回答时间:2018-2-2 11:20:30
楼主问题解决了吗?

所属标签

相似问题

官网相关资源

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