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

有偿求stm32L431的DMA配置代码

[复制链接]
hh748960295 提问时间:2019-6-26 10:10 /
需要采集三个传感器的数据,这三个传感器都是接AD口的,用三个通道。分别是ADC1_IN3 ADC1_IN6 ADC1_IN7 分别对应pin口:pc2 pa2 pa1现在网上找的都是stm32f的代码,编译出错,求一份stm32L431的。谢谢

QQ图片20190626100818.png
这是stm32L431的DMA 结构体。
QQ截图20190626100829.png .

这是找的stm32f的代码。
收藏 评论18 发布时间:2019-6-26 10:10

举报

18个回答
hh748960295 回答时间:2019-6-28 11:16:27
wenyangzeng 发表于 2019-6-28 10:02
ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 1,ADC_SampleTime_144Cycles);
ADC_RegularChannelConfi ...

stm32L431里是不是这么写?

ADC_ChannelConfTypeDef sConfig;

/* ### - 3 - Channel configuration ######################################## */
  sConfig.Channel      = ADC_CHANNEL_6|ADC_CHANNEL_7;                /* Sampled channel number */

  sConfig.Rank         = ADC_REGULAR_RANK_1;          /* Rank of sampled channel number ADCx_CHANNEL */
  sConfig.SamplingTime = ADC_SAMPLETIME_6CYCLES_5;   /* Sampling time (number of clock cycles unit) */
  sConfig.SingleDiff   = ADC_SINGLE_ENDED;            /* Single-ended input channel */
  sConfig.OffsetNumber = ADC_OFFSET_NONE;             /* No offset subtraction */
  sConfig.Offset = 0;                                 /* Parameter discarded because offset correction is disabled */
  HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);
wenyangzeng 回答时间:2019-6-28 13:19:21
hh748960295 发表于 2019-6-28 11:16
stm32L431里是不是这么写?

ADC_ChannelConfTypeDef sConfig;

sConfig.Channel = ADC_CHANNEL_3;
  sConfig.Rank = ADC_REGULAR_RANK_1;

  sConfig.SamplingTime = ADC_SAMPLETIME_12CYCLES_5;
  sConfig.SingleDiff = ADC_SINGLE_ENDED;
  sConfig.OffsetNumber = ADC_OFFSET_NONE;
  sConfig.Offset = 0;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }


  sConfig.Channel = ADC_CHANNEL_6;
  sConfig.Rank = ADC_REGULAR_RANK_2;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }


  sConfig.Channel = ADC_CHANNEL_7;
  sConfig.Rank = ADC_REGULAR_RANK_3;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

  
hh748960295 回答时间:2019-6-28 20:30:47
wenyangzeng 发表于 2019-6-28 16:23
楼主应该把2楼ST官方代码消化消化呀

嗯呢,看的那个代码。他定义的一个数组,
#define ADC_CONVERTED_DATA_BUFFER_SIZE   ((uint32_t)  32)   /* Size of array aADCxConvertedData[] */
static uint16_t aADCxConvertedData[ADC_CONVERTED_DATA_BUFFER_SIZE];
然后把值写进去,
  if (HAL_ADC_Start_DMA(&AdcHandle,
                        (uint32_t *)aADCxConvertedData,
                        ADC_CONVERTED_DATA_BUFFER_SIZE
                       ) != HAL_OK)
  {
    //Error_Handler();
  }

但是我现在不知道怎么从这个数组把俩通道上的值拿到,。
wenyangzeng 回答时间:2019-6-26 11:14:16
本帖最后由 wenyangzeng 于 2019-6-26 11:15 编辑

ST官方的代码改一下就可以了呀。
ADC.rar (189.1 KB, 下载次数: 17)

评分

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

查看全部评分

hh748960295 回答时间:2019-6-26 15:37:58
wenyangzeng 发表于 2019-6-26 11:14
ST官方的代码改一下就可以了呀。

他的配置是配置了ADC1_IN9(PA9),直接在HAL_ADC_MspInit这个函数里配置好了。、如果我是三个传感器,用到ADC1_IN3 ADC1_IN6 ADC1_IN7 分别对应pin口:pc2 pa2 pa1。。该怎么配置。把HAL_ADC_MspInit这个函数加个参数吗???
wenyangzeng 回答时间:2019-6-26 16:22:08
hh748960295 发表于 2019-6-26 15:37
他的配置是配置了ADC1_IN9(PA9),直接在HAL_ADC_MspInit这个函数里配置好了。、如果我是三个传感器,用到 ...

ADC扫描方式就OK了
hh748960295 回答时间:2019-6-26 20:20:52

最后的值是存在一个数组里了?数组的长度是通道数吗?比如我用三个传感器,三个通道,长度就是3
wenyangzeng 回答时间:2019-6-27 07:14:48
hh748960295 发表于 2019-6-26 20:20
最后的值是存在一个数组里了?数组的长度是通道数吗?比如我用三个传感器,三个通道,长度就是3
? ...

当然存在数组里了。
hh748960295 回答时间:2019-6-27 08:41:29
wenyangzeng 发表于 2019-6-27 07:14
当然存在数组里了。

三个传感器的话(三通道),应该是个二维数组吧?
wenyangzeng 回答时间:2019-6-27 10:04:42
hh748960295 发表于 2019-6-27 08:41
三个传感器的话(三通道),应该是个二维数组吧?

如果是单次转换是1维数组,多次转换当然要二维数组了。
hh748960295 回答时间:2019-6-28 08:14:55
wenyangzeng 发表于 2019-6-27 10:04
如果是单次转换是1维数组,多次转换当然要二维数组了。

单次转换和多次转换有什么区别呢?
如果我是三个传感器,用到ADC1_IN3 ADC1_IN6 ADC1_IN7 分别对应pin口:pc2 pa2 pa1。。应该怎么转换
wenyangzeng 回答时间:2019-6-28 10:02:59
hh748960295 发表于 2019-6-28 08:14
单次转换和多次转换有什么区别呢?
如果我是三个传感器,用到ADC1_IN3 ADC1_IN6 ADC1_IN7 分别对应pin口 ...

ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 1,ADC_SampleTime_144Cycles);
ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 2,ADC_SampleTime_144Cycles);
ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 3,ADC_SampleTime_144Cycles);
craft 回答时间:2019-6-28 10:25:10
还能这么玩
hh748960295 回答时间:2019-6-28 11:17:03
hh748960295 发表于 2019-6-28 11:16
stm32L431里是不是这么写?

ADC_ChannelConfTypeDef sConfig;

还有我不想用dma,直接用轮询模式不行吗,?
hh748960295 回答时间:2019-6-28 11:17:57

???那该怎么搞,急求。。。需求很简单啊,就是stm32L431采集三个传感器的值,这仨传感器都是接AD口的、
12下一页

所属标签

相似问题

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