找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5284|回复: 7
打印 上一主题 下一主题
收起左侧

stm32的dma传输完成中断是指什么时候?

[复制链接]
跳转到指定楼层
楼主
ID:958310 发表于 2021-8-4 19:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  最近接手一个老项目是用到ADC和DMA配合使用,ADC是5个通道循环转换,然后通过DMA传输到定义的全局数组里。每当DMA完成传输的时候就出发一次中断然后在DMA中断处理函数中对 1个 通道的AD值进行卡尔曼滤波,每次DMA中断只对一个通道的AD值进行滤波下一次中断就对下一个通道滤波,现在遇到的疑问就是:

    1、STM32的DMA配置的时候有两个跟数据量有关的:一是传输的数据位宽(1字节、2字节和4字节),二是传输的总数据个数。那么这个DMA传输完成触发中断是指每传输一个数据、还是传输完总数据个数就触发DMA中断? 例如像我这里ADC转换5个通道,DMA配置为:2字节位宽、传输总数据个数为5.开启DMA中断后那么我这里是每次ADC转换完一个通道就出发一次DMA中断?还是ADC要循环转换完5个通道才触发一次DMA中断?

    2、之前一直用没留意,然后今天看了一下卡尔曼滤波就对这个DMA中断触发看不懂。找到的芯片手册也没怎么细讲。我就想我这里如果DMA是每当ADC转换完一个通道就触发一次中断然后对这个通道的AD值进行滤波,那么就是符合要求的。如果是每当ADC转换完5个通道DMA才触发一次中断,那岂不是要ADC连续5次转换5个通道才能将5个通道的AD值进行滤波1次,这也太蠢了吧?

    3、代码是上一任员工写的,我在想能不能将那个DMA的总数据个数改为1个,然后每当ADC转换完一个通道就触发一次中断来进行滤波,这样实时性会不会好一些?

  有懂的大哥们帮帮忙解惑一下,谢谢了!!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

来自 2#
ID:106290 发表于 2021-8-5 17:06 | 只看该作者
STM32中文参考手册_v10 144页,写得很清楚,在数据传输结束后,传输完成标志位(TCIF)被置1,当设置了允许传输完成中断为(TCIE),将产生一个中断请求。传输数据则由DAM_CMARX寄存器设置,其实就是你自己设置的数据大小。结论:你设置了多少传输数据,数据传输完成才能触发完成中断。只有一个通道要求的,直接用ADC转换完成中断处理就好了。多通道觉得比较麻烦的,可以采用注入型ADC转换。
回复

使用道具 举报

板凳
ID:592807 发表于 2021-8-5 10:16 | 只看该作者
DMA中断问题先放一边,先说一下滤波问题,”ADC转换完一个通道就触发一次中断来进行滤波”,你一个数据你和谁滤波?ADC转换一次是一个数据。
回复

使用道具 举报

地板
ID:958310 发表于 2021-8-5 10:38 | 只看该作者
黄youhui 发表于 2021-8-5 10:16
DMA中断问题先放一边,先说一下滤波问题,”ADC转换完一个通道就触发一次中断来进行滤波”,你一个数据你和 ...

卡尔曼滤波的原理就是跟以往的数据进行比较,然后预测这一次的结果。每次转换的AD数据都要保留到下一次计算滤波。
回复

使用道具 举报

5#
ID:419909 发表于 2021-8-5 11:02 | 只看该作者
1,按我之前使用过的经验.是总数据个数传完即产生中断.你设置5.那就是5个数据传完就中断了.
2,3,如果你只用一个通道.那还要用什么DMA.直接读ADC不就行了吗?
回复

使用道具 举报

6#
ID:958310 发表于 2021-8-5 14:49 | 只看该作者
wfqxgw 发表于 2021-8-5 11:02
1,按我之前使用过的经验.是总数据个数传完即产生中断.你设置5.那就是5个数据传完就中断了.
2,3,如果你只用 ...

有道理
回复

使用道具 举报

7#
ID:106290 发表于 2021-8-5 17:09 | 只看该作者
STM32中文参考手册_v10 144页,明确说了。
1.当传输一半的数据后,半传输标志(HTIF)被置1,当设置了允许半传输中断位(HTIE)时,将产生一个中断请求。在数据传输结束后,传输完成标志(TCIF)被置1,当设置了允许传输完成中断位(TCIE)时,将产生一个中断请求。数据是由用户设置的,最大为65536。
2.如果只是单通道ADC直接采用,ADC转换完成中断里面处理数据就好。
3.如果是多通道,可以用DMA,或者是注入型ADC转换。
回复

使用道具 举报

8#
ID:958310 发表于 2021-8-5 17:11 | 只看该作者
ganhui1300 发表于 2021-8-5 17:06
STM32中文参考手册_v10 144页,写得很清楚,在数据传输结束后,传输完成标志位(TCIF)被置1,当设置了允许 ...

哎,这里我第一时间就看了,其实是我接手的项目之前那个人写的代码把我搞混淆了,我不敢确定。现在理解了。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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