硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3535|回复: 6
收起左侧

[ADC] STM32H7 ADC配合DMA是否需要加锁

[复制链接]

13

主题

10

回帖

49

积分

初级会员

积分
49
发表于 2021-5-25 15:23:43 | 显示全部楼层 |阅读模式
请问我看V7开发板用户手册里说到ADC配合DMA,没有说锁的问题,就是app去get adc vlaue时如何保证DMA不在更新buffer数据产生资源竞争?
1.加信号量?DMA传输完成解锁信号量,get时候判断信号量资源有没有释放?但是即使用信号量,我需要在timer中断里判断信号量来决定下一次要不要触发采集?
2.app配置ping-pong buffer,app拿数据后交换指针,对与DMA来说就是交换数据起始地址,这个交换操作关中断来保证原子操作。
请问你们是哪种方式做的


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2021-5-25 16:17:57 | 显示全部楼层
如果仅仅是获取电压值而不是获取波形,不用这么复杂,直接读取求平均即可。

一般只要需要展示波形才需要双缓冲配置信号同步。
回复

使用道具 举报

13

主题

10

回帖

49

积分

初级会员

积分
49
 楼主| 发表于 2021-5-25 16:49:32 | 显示全部楼层
eric2013 发表于 2021-5-25 16:17
如果仅仅是获取电压值而不是获取波形,不用这么复杂,直接读取求平均即可。

一般只要需要展示波形才需要 ...

app会采集很多模拟量,不一定是电压。我要写个通用中间件,app注册要用那些ADC通道,我把采集的数据映射到内存变量,app去拿变量来计算
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2021-5-26 07:40:31 | 显示全部楼层
jianshan198977 发表于 2021-5-25 16:49
app会采集很多模拟量,不一定是电压。我要写个通用中间件,app注册要用那些ADC通道,我把采集的数据映射 ...

可以,那就搞个DMA双缓冲(注意是DMA双缓冲,不是ping-pong buffer)配置信号量同步就是个不错的选择。
回复

使用道具 举报

13

主题

10

回帖

49

积分

初级会员

积分
49
 楼主| 发表于 2021-5-26 17:27:20 | 显示全部楼层
eric2013 发表于 2021-5-26 07:40
可以,那就搞个DMA双缓冲(注意是DMA双缓冲,不是ping-pong buffer)配置信号量同步就是个不错的选择。

请教一个问题,我看stm32h743中rank只有16个,如果我有20个channel配置自动扫描模式,我需要分成两个group,两次触发来扫描完?因为一次扫描最多支持16个rank?我这样理解对吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2021-5-27 09:11:55 | 显示全部楼层
jianshan198977 发表于 2021-5-26 17:27
请教一个问题,我看stm32h743中rank只有16个,如果我有20个channel配置自动扫描模式,我需要分成两个grou ...

两个ADC分别多通道采集。
回复

使用道具 举报

13

主题

10

回帖

49

积分

初级会员

积分
49
 楼主| 发表于 2021-5-27 09:59:47 | 显示全部楼层
eric2013 发表于 2021-5-27 09:11
两个ADC分别多通道采集。

我现在是一个ADC上分配了20个通道
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-15 14:42 , Processed in 0.166214 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表