本帖最后由 always18 于 2018-9-25 17:04 编辑 我的cubemx版本是4.26,mcu是f042c6,网上找了些资料都是可以设置通道个数和顺序的,而我的cube版本却没有,大家帮忙看看下面的步骤哪里有问题 uint32_t ADC_Value[100], 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[i++]; ad2 += ADC_Value[i++]; } ad1 /= 50; ad2 /= 50; printf("ad1=%d,ad2=%d\n", ad1, ad2); } 串口打印的结果一直是 ad1=800,ad2=640,不论通道电压怎么变化,这个值一直不变,问题在哪里? |
你看看你的DMA 配置部分,DMA是normal模式还是circular模式。
如果是Normal模式的,每次你得重新初始化DMA才能传输新的数据。
评分
查看全部评分
如果是normal,可以每隔1000ms打印ad1和ad2的值,只是值是不变化的,按照您的意思,我在每次打印时调用MX_DMA_Init();或者HAL_ADC_Start_DMA( &hadc, (uint32_t*)&ADC_Value, 100 );
还是没有变化
如果是circular,则串口快速打印出一些数字来,也不知道是哪里打印的
不知道是哪里的问题了
一定有原因的。
1、确认下硬件是否有问题,你调整输入是否真的变化了? 你可以同时配合ADC_DR寄存器的数据来观察
2、看看是否代码哪里出现小失误而以为数据没变化。
3、多看看手册,CUBEMX最多最多只是做些基本配置。