完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
这几天在搞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; } } |
|
相关推荐
1个回答
|
|
|
根据您提供的信息,我将尝试分析可能导致噪声大和数据传输问题的原因,并提供一些建议。
1. 噪声大的原因: a. 采样率不匹配:确保您的音频采样率与STM32F103ZET6的I2S配置相匹配。 b. 时钟配置问题:检查I2S时钟配置是否正确,包括PLL、I2S时钟源和时钟分频。 c. DMA配置问题:确保DMA的触发方式、数据宽度、地址增量等配置正确。 d. 硬件问题:检查音频线路和连接器是否存在问题,如接触不良或干扰。 2. USB数据暂停后I2S2仍有数据传输的原因: a. USB库问题:检查USB库的实现,确保在暂停数据传输时,相关寄存器和标志位被正确设置。 b. DMA配置问题:检查DMA的触发方式,确保在USB暂停时,DMA不会继续传输数据。 3. 关于haudio->buffer[0]和haudio->rd_ptr的问题: a. 检查您的代码实现,确保haudio->rd_ptr在适当的时候被更新,以便DMA传输正确的数据。 b. 如果您的代码逻辑正确,但问题仍然存在,可能是HAL库的实现问题。您可以尝试查找相关的issue或在社区寻求帮助。 4. 解决方案: a. 仔细检查您的代码,确保所有配置和寄存器设置都是正确的。 b. 使用示波器或逻辑分析仪检查I2S和USB的信号,以便找到问题所在。 c. 如果可能,尝试使用其他音频设备或开发板进行测试,以排除硬件问题。 d. 在STM32 HAL库的官方文档和社区中查找类似问题的解决方案。 希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便进一步分析。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
4138 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
3228 浏览 1 评论
2752 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
2181 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
14980 浏览 2 评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
3086浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
1896浏览 3评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
2066浏览 3评论
1979浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
2168浏览 3评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 07:43 , Processed in 0.572720 second(s), Total 70, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
5664