大家好,首次发帖有什么不对的地方请谅解。 最近在用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系列中区别大吗?是只分作互联性和非互联性有较大差别还是每一个系列都不太一样? 提前感谢~ |
stm32 USB的CDC类传输掉数据
STM32F105 USB接收数据不断进入中断,出现“死机”现象
ST的hal库有问题手头有STM32L4或STM32F7的帮忙测试DMA SD卡
关于STM32CubeMX配置的USB例程电脑无法识别问题
STM32F756 DCMI +GC0308 Camera图片不正常
STM32F407 USB-HS-OTG是否不外接PHY可以做虚拟串口?
如何做一个USB从机键盘用stm32f407
用STM32F4 Cube MX生成的USB Device C代码的BUG
USB Device + FatFS + SDIO 模拟U盘意外只读问题
USB Device + FatFS + SDIO 问题
Datasheetä¸æè¿°
åºå½æ°ä¸æ³¨é
1.
看完整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了。
评分
查看全部评分
感谢回答!关于第二个问题,应该是没有使用共享发送FIFO的,从寄存器可以读到几个端点地址和深度是连续的。关于我看的缓冲区帖子,地址如下:
http://www.51hei.com/bbs/dpj-40953-1.html STM32 USB Device应用中的包缓冲话题