|
这几天在搞USB的声卡,用的是STM32F103ZET6,用的是Hal库生成的代码,I2S2 DMA方式输出,有以下问题,声音有,但是噪声很大,而且USB数据暂停后,I2S2上还是有数据在不停的发,感觉是USB库哪里有问题,接收看过了应该是没有问题的,就是这个同步传输的问题,红色部分,为什么每次都是从haudio->buffer[0]开始,而且长度还是固定,haudio->rd_ptr这个指针没什么作用嘛。。搞来搞去的,理论上应该是USB循环队列的读指针,但是没有起到作用,下面的函数是DMA传输完回调调用的,感觉只要这样调下去,数据永远都停止不了,I2S上肯定永远都有数据,而且只能取到前半个Buffer的长度,后半部分,永远都取不到。。不知道有没有兄弟对下面函数有什么想法?还是我应用错了? void USBD_AUDIO_Sync (USBD_HandleTypeDef *pdev, AUDIO_OffsetTypeDef offset) { int8_t shift = 0; USBD_AUDIO_HandleTypeDef *haudio; haudio = (USBD_AUDIO_HandleTypeDef*) pdev->pClassData; haudio->offset = offset; if(haudio->rd_enable == 1) { haudio->rd_ptr += AUDIO_TOTAL_BUF_SIZE/2; if (haudio->rd_ptr == AUDIO_TOTAL_BUF_SIZE) { /* roll back */ haudio->rd_ptr = 0; } } if(haudio->rd_ptr > haudio->wr_ptr) { if((haudio->rd_ptr - haudio->wr_ptr) < AUDIO_OUT_PACKET) { shift = -4; } else if((haudio->rd_ptr - haudio->wr_ptr) > (AUDIO_TOTAL_BUF_SIZE - AUDIO_OUT_PACKET)) { shift = 4; } } else { if((haudio->wr_ptr - haudio->rd_ptr) < AUDIO_OUT_PACKET) { shift = 4; } else if((haudio->wr_ptr - haudio->rd_ptr) > (AUDIO_TOTAL_BUF_SIZE - AUDIO_OUT_PACKET)) { shift = -4; } } if(haudio->offset == AUDIO_OFFSET_FULL) { ((USBD_AUDIO_ItfTypeDef *)pdev->pUserData)->AudioCmd(&haudio->buffer[0], AUDIO_TOTAL_BUF_SIZE/2 - shift, AUDIO_CMD_PLAY); haudio->offset = AUDIO_OFFSET_NONE; } } |
STM32F401RBT6 USB 大容量存储设备问题
USB OTG 主机枚举问题
STM32F042 在启动文件内跳转至 USB DFU Bootloader
B-L475E-IOT01A 无法枚举为 USB DFU 设备
USBX Audio Class frame done 不触发回调
STM3210C-EVAL USB 官方例程调试报错
STM32F103 全速 USB 大容量存储方案咨询
STM32H573ZI 全速 USB
STM32F2xx 是否有 UVC 相关示例工程
USBX在F407上创建CDC不能正常使用
微信公众号
手机版
没有。。没搞了。。。