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

ADC 读取的中断模式不对

[复制链接]
patch1582 提问时间:2026-4-20 14:10 / 未解决

我使用 HAL_ADC_Start_IT 函数,让 ADC 外设在每次转换完成后持续触发中断,然后通过 UART 打印转换后的数值。 然而,我启用了连续转换模式,当我调节电位器时,也看不到 ADC 数值发生变化。显然 HAL_ADC_Start_IT 并没有持续运行。 另外,当我像下面这样在回调函数中重新调用 HAL_ADC_Start_IT 时,功能就可以正常工作了。 / USER CODE BEGIN PFP /

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) { adcVal = HAL_ADC_GetValue(&hadc1); HAL_ADC_Start_IT(&hadc1); }

/ USER CODE END PFP /

收藏 评论3 发布时间:2026-4-20 14:10

举报

3个回答
butterflyspring 回答时间:2026-4-20 17:35:19
建议 首先验证一下单次转换时看看ADC的值是否正常,确保基本配置和硬件正常
其次去掉打印,看看ADC 的值是否每次刷新正常,毕竟ADC的转换速度快,有可能被打印阻塞了。

另外每次描述问题,请先说明使用的型号,思路,配置,结果,并附上关键的截图,能上传IOC 和项目文件就更好了。这样小伙伴们就有方向帮你验证了。
butterflyspring 回答时间:2026-4-20 17:35:20
建议 首先验证一下单次转换时看看ADC的值是否正常,确保基本配置和硬件正常
其次去掉打印,看看ADC 的值是否每次刷新正常,毕竟ADC的转换速度快,有可能被打印阻塞了。

另外每次描述问题,请先说明使用的型号,思路,配置,结果,并附上关键的截图,能上传IOC 和项目文件就更好了。这样小伙伴们就有方向帮你验证了。
xmshao 回答时间:2026-4-21 09:11:46

你每次转换完成会触发中断,如果UART的打印输出在主流程里,基本没有机会、甚至完全没有机会来实现打印输出的,具体取决于你每次ADC转换所花的时间,时间越短越难有机会做UART打印。另外,还要注意可能出现ADC结果溢出方面的问题。

当然,你现在改成在中断里做ADC结果的获取、甚至做UART打印应该是没问题的。不过也要注意中断优先级方面的问题,避免出现死等堵塞的情况。

你可以这样,用个TIMER来定时触发ADC,不要太快了,否则没机会做UART打印。

如果通道多,数据多,可以基于序列完成中断来实现打印输出,而不用每个通道转换完成都进中断。

所属标签

相似问题

官网相关资源

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