DMA+ADC1四路输出,亲测可用,整个的测量一次的时间大约是1.2ms

2019-07-20 22:46发布

这个是我再做实验的时候通过将原子哥的程序进行移植和修改,然后测试可以使用的程序,希望能够帮到有需要的坛友。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
gongzq666
1楼-- · 2019-07-21 03:14
使用的开发板是战舰V3,需要在液晶显示屏上才能够看到实际的测量的电压值。
nashui_sx
2楼-- · 2019-07-21 04:33
不用定时器触发的adc用dma就是耍流氓
gongzq666
3楼-- · 2019-07-21 06:34
 精彩回答 2  元偷偷看……
nashui_sx
4楼-- · 2019-07-21 07:04
gongzq666 发表于 2019-7-12 08:26
是不是使用定时器定时的通过DMA来传输数据?

定时器触发adc采样然后dma读取,这样能固定采样频率

你要是不固定采样频率,dma读取意义我觉得不大,毕竟只能看adc变化 adc变化率都没法定
vegetablebird
5楼-- · 2019-07-21 12:05
nashui_sx 发表于 2019-7-12 09:48
定时器触发adc采样然后dma读取,这样能固定采样频率

你要是不固定采样频率,dma读取意义我觉得不大, ...

//获取ADC值
u16 Get_ADC(u8 times)
{  
         u8 i=0;
         u16 temp=0;
         u16 avg=0;
         for(i=0;i<times;i++){
                        ADC_SoftwareStartConvCmd(ADC1,ENABLE); //软件启动ADC
                        ADC_DMACmd(ADC1,ENABLE);//开始ADC_DMA传输         
                         if(DMA_GetFlagStatus(DMA1_FLAG_TC1)!=RESET)//等待通道1传输完成
                         {
                                        delay_ms(10);       
                                        temp+=ADC_ConvertedValue;
                         }
                                DMA_ClearFlag(DMA1_FLAG_TC1);//清除通道1传输完成标志
         }
         avg=temp/times;
         return (float)avg*(3.3/4096);
}
请问这样使用可以吗,ADC为单通道单次转换。这个函数在主函数循环里面被调用
gongzq666
6楼-- · 2019-07-21 15:48
 精彩回答 2  元偷偷看……

一周热门 更多>