[讨论] STM32F0多通道ADC DMA采样问题讨论
1602 查看
11 回复
 楼主 | 发布于 2020-03-31 | 只看楼主
分享到:

STM32F0定时器触发多通道ADC DMA采样问题讨论

如题:

用CBUBEMX配置的dma为nomarl,用HAL_ADC_Start_DMA启动后完成600次采样后ADC就应该停止了,延时一下再次用HAL_ADC_Start_DMA启动,第二次应该没有启动,因为我在第二次启动前将 sampleTable数组清零了,结果第二次的数据打印出来是0.加不加HAL_ADC_Stop_DMA(&hadc)都一样

(0 ) (0 )
回复 举报

楼主 | 回复于 2020-03-31 沙发

要实现的功能:

对6个通道采集600个数据(每个通道采集100次),之后用HAL_ADC_STOP_DMA停止采样;延时1ms再用HAL_ADC_Start_DMA(&hadc, (uint32_t*)&sampleTable, 600) 开启ADC采样,(注:adc dma配置为DMA_NORMAL)。

(0 )
评论 (0) 举报

楼主 | 回复于 2020-03-31 2#

代码如下:
HAL_ADC_Start_DMA(&hadc, (uint32_t*)&sampleTable, 600);
for(i=0; i<(ADC_Channle*DMA_Count); i+=6)
{
 d0 += sampleTable[i];
 d1 += sampleTable[i+1];
 d2 += sampleTable[i+2];
 d3 += sampleTable[i+3];
 d4 += sampleTable[i+4];
 d5 += sampleTable[i+5];
}

HAL_ADC_Stop_DMA(&hadc);
HAL_Delay(10);
HAL_ADC_Start_DMA(&hadc, (uint32_t*)&sampleTable, 600);
for(i=0; i<(ADC_Channle*DMA_Count); i+=6)
{
 d6 += sampleTable[i];
 d7 += sampleTable[i+1];
 d8 += sampleTable[i+2];
 d9 += sampleTable[i+3];
 d10 += sampleTable[i+4];
 d11 += sampleTable[i+5];
}
d1 = d1/600;
HAL_ADC_Stop_DMA(&hadc);
结果d0~d5正确,和外面的对应的电压相等
    d6~d11不对,和外面给的电压不等,
帮我指导下哪儿有问题
(0 )
评论 (0) 举报

楼主 | 回复于 2020-03-31 3#

dma.c
void MX_DMA_Init(void)
{
  /* DMA controller clock enable */
  __HAL_RCC_DMA1_CLK_ENABLE();
  /* DMA interrupt init */
  /* DMA1_Channel1_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
  /* DMA1_Channel2_3_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(DMA1_Channel2_3_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(DMA1_Channel2_3_IRQn);
}
(0 )
评论 (0) 举报

楼主 | 回复于 2020-03-31 4#

重新设置dma计数器值看看
(0 )
评论 (0) 举报

回复于 2020-03-31 5#

感谢分享
(0 )
评论 (0) 举报

回复于 2020-04-03 6#

谢谢分享~~
(0 )
评论 (0) 举报

回复于 2020-04-13 7#

感谢分享
(0 )
评论 (0) 举报

回复于 2020-04-13 8#

感谢分享
(0 )
评论 (0) 举报

回复于 2020-04-16 9#

感谢分享
(0 )
评论 (0) 举报

回复于 2020-05-11 10#

感谢分享
(0 )
评论 (0) 举报
发表回复
0/3000





举报

请选择举报类别

  • 广告垃圾
  • 违规内容
  • 恶意灌水
  • 重复发帖

全部板块

返回顶部