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

STM32H743-adc中断问题

[复制链接]
Da风 提问时间:2023-10-27 20:06 / 已解决

请问一下,stm32H743使用ADC中断,采集速率是不是和中断源的分频没有关系呀,我是用的是hsi作为时钟源,因为PLL2不知为何我的芯片使用不上,然后我发现无论我怎么改adc的时钟分频它采集到的数据就是这么多。之后我改为轮询方式的话,它就会随着adc的时钟分频有所改动。是不是设置了中断之后就采集的速率就和时钟分频无关了呀?


我用的是串口接收数据,xcom2.6,每5s统计一次数据,就是统计下面的R总共接收了多少。

image.png

然后测出如下结果:

  • 测试轮询1:ADC_CLOCK_ASYNC_DIV256

    • 数据:27789、28480、27776
  • 测试轮询2:ADC_CLOCK_ASYNC_DIV2

    • 数据:30592、30880、30848
  • 测试中断1:ADC_CLOCK_ASYNC_DIV256

    • 数据 :32768、32224、33024
  • 测试中断2:ADC_CLOCK_ASYNC_DIV2

    • 数据:32448、33024、32576

从上面的数据可以知道,当我设置为轮询方式时,调整adc分频,接收到的总数居数据有明显变化,而在我改为中断时却感觉没有什么变化,这是为什么呢?


我的中断回调函数就只是设计一个获取它的值。然后main函数就获取该值转换打印出来。

image.png

main函数里的:

image.png

image.png
image.png
收藏 评论3 发布时间:2023-10-27 20:06

举报

3个回答
butterflyspring 最优答案 回答时间:2023-10-30 11:47:47
楼主对ADC获取结果的时序似乎没有判断。有可能adc' 还没有中断就已经开始计算了。

另外 printf 是阻塞式的化,你的ADC启动执行的速率就是软件运行的速率,所以调整ADC的频率,不影响你采集的速度。

STM32H743 ADC IT.PNG
xmshao 回答时间:2023-10-30 14:50:43
可能的话,换个思路吧。你提到的几组数据也不知哪组是靠谱的。


建议先使用1个通道对地或VDD进行测试,或者针对某个内部某已知通道信号进行测试,把结果搞对搞稳。


再来多通道测试。这样或许更快~。


另外,你现在使用的H7系列,建议先不要开启D-Cache. 等ADC结果调试OK后再开启不迟。
Da风 回答时间:2023-11-25 17:10:02

butterflyspring 发表于 2023-10-30 11:47
楼主对ADC获取结果的时序似乎没有判断。有可能adc' 还没有中断就已经开始计算了。</p>
<p>另外 printf 是阻塞式的 ...

谢谢,我感觉确实是这样,ADC在采样时,可能已经采了多次数据才计算打印一次(就是printf的打印速度慢于ADC采集),以及把HAL_ADC_START_IT写在了while循环里,由于我设置的单次转换,所以执行ADC转换的快慢取决于这个运行这while循环语句的速度了。

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版