打印
[STM32G4]

ADC 进行连续采样无法清除数据

[复制链接]
375|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小库里|  楼主 | 2025-4-4 20:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用 ADC 进行连续采样。保留溢出数据后,我可以在 ADC 数据寄存器中看到有效的数据。
但是,当我清除数据时,在数据寄存器中看到的值是 0xFFF。
当启用全局 ADC1/2中断并使用 HAL_ADC_Start_IT() 启动 ADC 时,也是同样现象,无论保留还是清除数据。
系统时钟为104Mhz、ADC 的时钟预分频器设置为异步除频 2、分辨率为 12 位、采样时间为 640.5 个周期。 使用 STM32CubeIDE 和 STM32CubeMX,以及 ST-LINK v2。STM32G474VE

使用特权

评论回复
沙发
公羊子丹| | 2025-4-5 07:40 | 只看该作者
你说的0xFFF看着像是ADC读取失败或者采样未完成时的默认值,我之前遇到过是因为没有等EOC(End Of Conversion)就读了DR寄存器。

使用特权

评论回复
板凳
周半梅| | 2025-4-5 07:41 | 只看该作者
你用的是连续模式(Continuous Conversion Mode)加上中断?这种组合下有时候ADC_EOC标志不会清零,得手动处理一下。

使用特权

评论回复
地板
帛灿灿| | 2025-4-5 07:42 | 只看该作者
我碰到过类似问题,后来发现是HAL库没有处理好ADC的overrun状态。你可以试试先清一下OVR标志位看看。

使用特权

评论回复
5
童雨竹| | 2025-4-5 07:43 | 只看该作者
你试过不开中断,改用HAL_ADC_PollForConversion看看现象还一样不?有时候中断方式容易漏触发。

使用特权

评论回复
6
万图| | 2025-4-5 07:44 | 只看该作者
STM32G4的ADC比F4复杂点,我之前用DMA模式采样就没这个问题,建议你也可以试下用DMA接收,稳定多了。

使用特权

评论回复
7
Wordsworth| | 2025-4-5 07:45 | 只看该作者
你说清除数据是怎么清的?DR是只读的吧,你是重新start还是disable再enable的?流程可能要注意下。

使用特权

评论回复
8
Bblythe| | 2025-4-5 07:45 | 只看该作者
试试在HAL_ADC_ConvCpltCallback里用__HAL_ADC_CLEAR_FLAG清除EOCF、OVR之类的标志位,我那时候卡住就是因为这些没清。

使用特权

评论回复
9
Pulitzer| | 2025-4-5 07:46 | 只看该作者
你有没有设置ADC的overrun模式?如果是KEEP,确实有可能数据会一直是旧的;可以试试OVERWRITE模式看看表现会不会不一样。

使用特权

评论回复
10
Uriah| | 2025-4-5 07:47 | 只看该作者
这个问题很像时钟没配好导致的采样异常。你用的是异步分频除2,如果系统频率是104MHz,那ADC时钟就是52MHz,建议你试下再低一点的频率。

使用特权

评论回复
11
Clyde011| | 2025-4-5 07:48 | 只看该作者
建议你用逻辑分析仪或者ST的STMStudio工具看看ADC状态寄存器变化,能更直观看到是不是conversion根本没完成。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

9

帖子

0

粉丝