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

STM32F407VET6 I2S 采用纯中断接收数据的问题

[复制链接]
黄叙鹏 提问时间:2025-8-5 17:53 / 未解决

在CUBEMX 生成代码后 调用

if (HAL_I2S_Receive_IT(&hi2s2, adc_buf, 2048) != HAL_OK) { Error_Handler(); }

成功初始化后 不久就进入

void HAL_I2S_ErrorCallback(I2S_HandleTypeDef *hi2s) { if (hi2s == &hi2s2) { printf("I2S Error: %lu\n", hi2s->ErrorCode); } }

错误代码是02 溢出错误(OVR)

收藏 评论1 发布时间:2025-8-5 17:53

举报

1个回答
xmshao 回答时间:5 天前

从提示来看, I2S OVR(溢出)错误,表示接收溢出。这通常说明CPU或DMA提取数据的速度跟不上I2S外设接收数据的速度,导致数据还没来得及取走,新的数据又到来了。

参考建议:

检查中断优先级,确保I2S合适的中断优先级,不要总是被打断甚至堵塞。

避免在中断服务程序中执行耗时操作(如printf、复杂计算等),尽量只做数据提取,后续处理放到主循环或其它任务中。

适当降低采样率进行测试,看是否还会溢出。

考虑使用DMA方式接收I2S数据,DMA能自动搬运数据,极大减轻CPU负担,有效避免溢出。

所属标签

相似问题

官网相关资源

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