你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

有没有人用stm32cube的HAL 库做过多路ADC的DMA采样试验

[复制链接]
feiante 提问时间:2015-2-2 19:47 /
本帖最后由 feiante 于 2015-2-3 09:49 编辑

有没有人用stm32cube的HAL 库做过多路ADC的DMA采样试验,今天打算试试3路ADC的DMA采样,使用PA0,PA1,PA2这3个脚,感觉有问题,只能PA0采样到,PA1,PA2不能采样,除了3V就是4095.官方自带的例程只有1个通道的。原来F0的是成功的,使用了2路。谁做过F4的并成功的,参考一下配置

新建文件夹.rar

下载

5.3 MB, 下载次数: 89, 下载积分: ST金币 -1

这个是工程文件

收藏 评论6 发布时间:2015-2-2 19:47

举报

6个回答
feiante 回答时间:2015-2-3 10:44:05
感觉只有PA0能采集到
linshifaa 回答时间:2015-2-3 13:49:13
。。。。。。。
feiante 回答时间:2015-2-3 15:01:56

“。。。。。。。”是什么意思呢?不懂
dsjsjf 回答时间:2018-3-20 10:16:28
#define AdcFilterNum    80
#define AdcChannelNum   3
#define AdcDmaLengh     (AdcFilterNum * AdcChannelNum)

uint32_t ADC_ConvertedValue[AdcFilterNum][AdcChannelNum];

/* ADC1 init function */
static void MX_ADC1_Init(void)
{

  ADC_ChannelConfTypeDef sConfig;
  ADC_InjectionConfTypeDef sConfigInjected;

    /**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
    */
  hadc1.Instance = ADC1;
  hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
  hadc1.Init.Resolution = ADC_RESOLUTION_12B;
  hadc1.Init.ScanConvMode = ENABLE;
  hadc1.Init.ContinuousConvMode = ENABLE;
  hadc1.Init.DiscontinuousConvMode = DISABLE;
  hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  hadc1.Init.NbrOfConversion = 3;
  hadc1.Init.DMAContinuousRequests = ENABLE;
  hadc1.Init.EOCSelection = ADC_EOC_SEQ_CONV;
  if (HAL_ADC_Init(&hadc1) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

    /**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
    */
  sConfig.Channel = ADC_CHANNEL_10;
  sConfig.Rank = 1;
  sConfig.SamplingTime = ADC_SAMPLETIME_480CYCLES;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

    /**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
    */
  sConfig.Channel = ADC_CHANNEL_15;
  sConfig.Rank = 2;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

    /**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
    */
  sConfig.Channel = ADC_CHANNEL_VREFINT;
  sConfig.Rank = 3;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }
}

/******************************************************************************************************
*        函 数 名: Start_AdConvert
*        功能说明: 启动AD转换
*                      采用DMA连续转换模式(多通道扫描)
*        形    参:无
*        返 回 值: 无
********************************************************************************************************/
void Start_AdConvert(void)
{
  HAL_ADC_Start_DMA(&hadc1, (ADC_ConvertedValue[0]), AdcDmaLengh);
}

开启转换后直接从ADC_ConvertedValue数组中取值

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

absdjko 回答时间:2018-11-12 17:26:12
dsjsjf 发表于 2018-3-20 10:16
#define AdcFilterNum    80
#define AdcChannelNum   3
#define AdcDmaLengh     (AdcFilterNum * AdcChan ...

DMA方式不是直接写数组里了吗?对HAL_ADC_STAR_DMA不太理解
dsjsjf 回答时间:2018-11-13 14:35:30
absdjko 发表于 2018-11-12 17:26
DMA方式不是直接写数组里了吗?对HAL_ADC_STAR_DMA不太理解

这相当于一个启动命令

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版