always18 发表于 2018-9-25 16:18:19

cubemx如何设置ADC的多通道采集

本帖最后由 always18 于 2018-9-25 17:04 编辑

我的cubemx版本是4.26,mcu是f042c6,网上找了些资料都是可以设置通道个数和顺序的,而我的cube版本却没有,大家帮忙看看下面的步骤哪里有问题


uint32_t ADC_Value, ad1, ad2;

在while(1)前添加 HAL_ADC_Start_DMA( &hadc, (uint32_t*)&ADC_Value, 100 );

while(1)
{
   ......
   HAL_Delay(1000);
   while(i<100)
   {
    ad1 += ADC_Value;
    ad2 += ADC_Value;
   }
   ad1 /= 50;
   ad2 /= 50;
   printf("ad1=%d,ad2=%d\n", ad1, ad2);
}

串口打印的结果一直是 ad1=800,ad2=640,不论通道电压怎么变化,这个值一直不变,问题在哪里?

qq74567871 发表于 2018-9-25 20:21:14

        赞一个!丰富STM32CubeMX的学习和推广!.

always18 发表于 2018-9-26 18:41:09

版主能帮忙看下吗?

always18 发表于 2018-9-26 18:42:00

这论坛从来都没人回帖的吗?

xmshao 发表于 2018-9-26 22:39:59

always18 发表于 2018-9-26 18:42
这论坛从来都没人回帖的吗?

你看看你的DMA 配置部分,DMA是normal模式还是circular模式。
如果是Normal模式的,每次你得重新初始化DMA才能传输新的数据。

always18 发表于 2018-9-26 23:30:51

xmshao 发表于 2018-9-26 22:39
你看看你的DMA 配置部分,DMA是normal模式还是circular模式。
如果是Normal模式的,每次你得重新初始化DM ...

如果是normal,可以每隔1000ms打印ad1和ad2的值,只是值是不变化的,按照您的意思,我在每次打印时调用MX_DMA_Init();或者HAL_ADC_Start_DMA( &hadc, (uint32_t*)&ADC_Value, 100 );
还是没有变化

如果是circular,则串口快速打印出一些数字来,也不知道是哪里打印的

不知道是哪里的问题了:L

xmshao 发表于 2018-9-27 16:43:10

always18 发表于 2018-9-26 23:30
如果是normal,可以每隔1000ms打印ad1和ad2的值,只是值是不变化的,按照您的意思,我在每次打印时调用MX ...

一定有原因的。

1、确认下硬件是否有问题,你调整输入是否真的变化了? 你可以同时配合ADC_DR寄存器的数据来观察
2、看看是否代码哪里出现小失误而以为数据没变化。
3、多看看手册,CUBEMX最多最多只是做些基本配置。
页: [1]
查看完整版本: cubemx如何设置ADC的多通道采集