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

ADC DMA 回调函数

[复制链接]
ming561 提问时间:2021-12-14 14:08 / 未解决
使用cubemx配置ADC+DMA,DMA使用circular模式,启动ADC:HAL_ADC_Start_DMA(&hadc1,ADCvalue,NUM);
当ADCvalue满时,调用中断回调函数,我在中断回调函数中,把ADCvalue数据复制到另一个数组recv_buff中
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
{
        recvbuf(ADCvalue, recv_buff,  sizeof(ADCvalue),  sizeof(recv_buff));
}


在回调函数中ADCvalue是否还在更新,还是等执行完recvbuf(ADCvalue, recv_buff,  sizeof(ADCvalue),  sizeof(recv_buff));再更新ADCvalue。
388a8549524a0e3fffd196c70110c43.png
收藏 评论3 发布时间:2021-12-14 14:08

举报

3个回答
xmshao 回答时间:2021-12-14 16:11:08
不知你的ADC这边是如何配置的,是否配合数据处理做周期性的触发还是连续不断的触发转换。你的DMA传输完成中断自然是发生一批数据的传输,
如果在回调函数里做数据处理时,ADC还是在不停转换的话,相应数据是会被DMA修改的。如果不希望这样,你要保证一轮数据传输
完毕后未处理完之前不要触发ADC转换了。
butterflyspring 回答时间:2021-12-14 17:34:23
假定楼主使能的DMA完成中断并且ADC为连续模式,那么在完成中断里调用这个回调函数,在这个调用前没有出错或没有去关闭DMA和ADC,那么这个回调函数与外设操作没有关系,这是ADC继续转换,DMA接着再搬运转换结果。
楼主可以计算并观测一组的数据时间反向验证。在回调函数里加一点延迟看看~~
ming561 回答时间:2021-12-15 14:54:29

xmshao 发表于 2021-12-14 16:11
不知你的ADC这边是如何配置的,是否配合数据处理做周期性的触发还是连续不断的触发转换。你的DMA传输完成中 ...

我是用的连续不断触发,是否能使用半传回调函数HAL_ADC_ConvHalfCpltCallback和全传回调函数HAL_ADC_ConvCpltCallback做双缓冲,实时的处理ADC采集的数据

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版