stm32f103 adc dma tim为每个通道开辟好滤波空间,自动定时 dma循环采集

2019-07-20 23:05发布

本帖最后由 nashui_sx 于 2019-7-6 20:41 编辑

0:stm32f103c8t6
1:#define AD_CHN      4                  //要使用的ADC通道数
   开启几个通道Adc_Init()里面的ADC_RegularChannelConfig函数只有多少个有效,比如例子是4,只有 1 2 3 4有效
2:#define AD_Count   50                  //AD滤波采样次数         就是每个通道采集50次供平均来用
3:l例子里也有说明/*
                        因为规则通道转换的值储存在一个仅有的数据寄存器中,
                        所以当转换多个规则通道时需要使用DMA,为了避免丢失已经存储在ADC_DR寄存器中的数据。
                        只有在规则通道的一个通道转换结束时才产生DMA请求,并将转换的数据从ADC_DR寄存器传输到用户指定的目的地址,
                        这样就保证了dma转换通道不混乱。
                        */
4:这个例子的dma的优点是直接为每个通道开辟要滤波的通道缓存,使用的时候直接调用ADC_Filter就可以了,dma循环采集adc,任何时候都可以ADC_Filter,也就是使用adc之前ADC_Filter一次就可以了,所以关闭dma中断也可以
5:dma采集一个循环的时间(中断时间)   转换时间=[采样时间+ 12.5个周期(固定值)]/12m =(239.5+12.5)/12m=21us *50次=1.05ms *4通道 4.2ms
但是ADC_Filter在dma循环50次以后调用频率快到一个循环周期21us也可以,相当于每次都用之前的50次做平均,数据会有迟滞
6:更新定时器触发的dma

adc dma 为每个通道开辟好滤波空间.rar (284.83 KB, 下载次数: 200) 2018-7-12 20:52 上传 点击文件名下载附件
adc dma tim为每个通道开辟好滤波空间.rar (287.05 KB, 下载次数: 20) 2019-7-6 20:37 上传 点击文件名下载附件
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
吃瓜群众
1楼-- · 2019-07-21 03:54
顶一波
长路曼曼
2楼-- · 2019-07-21 06:32
usart1文件中void DMA_USART1_Init(void)以后的函数有用吗
275891381
3楼-- · 2019-07-21 07:03
长路曼曼 发表于 2018-6-30 17:25
usart1文件中void DMA_USART1_Init(void)以后的函数有用吗

不开启dma后面的就USART1_printf USART1_Send_Array  还有中断函数有用
yangshi
4楼-- · 2019-07-21 09:38
谢谢分享
nashui_sx
5楼-- · 2019-07-21 10:53
 精彩回答 2  元偷偷看……

一周热门 更多>