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

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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版