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

stm32F723ZET6使用ADC捕获正弦波,adc采样频率过高导致主函数无法运行,要怎么优化?

[复制链接]
代码萌新 提问时间:2025-6-23 14:06 / 未解决

用定时器TIM2,200khz触发ADC采样,每次采样后进行数据存储,采样1000个后置标志位,在主循环中上报1000个点数据。100khz还是能正常上报的,200khz情况下在主循环打断点一直进不去了,要如何优化我的adc采样?企业微信截图_17506574342432.png企业微信截图_175065742091.png

企业微信截图_175065742091.png
企业微信截图_17506574342432.png
赞 收藏 评论4 发布时间:2025-6-23 14:06

举报

4个回答
xmshao 回答时间:2025-6-23 15:42:01
如果ADC结果是基于中断方式提取的话,建议使用DMA进行数据的提取。


如果已经是DMA提取数据了,可以考虑将每轮DMA传输的数据加长点, 基于传输半完成和完成中断


来提取数据,确保数据连续又不发生覆盖或丢失。


适当加大代码优化等级。代码逻辑及执行效率尽量优化,这个可能需要你自己完成。
代码萌新 回答时间:2025-6-23 17:35:30

xmshao 发表于 2025-6-23 15:42
如果ADC结果是基于中断方式提取的话,建议使用DMA进行数据的提取。</p>
<p>

好的,我会去扩大dma的buff来减少运算压力,但是回调函数执行这些语句需要耗时超过5us吗?企业微信截图_17506574342432.png

butterflyspring 回答时间:2025-6-24 09:53:52
代码萌新 发表于 2025-6-23 17:35
[md]好的,我会去扩大dma的buff来减少运算压力,但是回调函数执行这些语句需要耗时超过5us吗?![企业微信 ...

可以测试一下这些代码执行的时间,这样就更准确判断速度是否合适。
xmshao 回答时间:2025-6-24 10:19:01
你是指数据处理相关代码所花时间吧。


这个时间应该从DMA完成中断触发后开始考虑。STM32库代码的里的中断服务程序写的非常丰富,判


断流程也多,你可以基于它做针对性地瘦身,只提取自己关注的标志及判断,最好自己重新组织下代码。


另外具体到你这里用户回调函数,你也要注意代码的执行效率,平常不关注时间时代码啰嗦点,只要能实现


功能倒也罢了,这些时间敏感的地方可能要多琢磨下代码写法,尽量使用运行效率最佳的代码写法。


比方代码里尽量避免函数调用,选择最省时的循环方式。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版