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

stm32一个ADC,使用两个通道,可以同时采集吗?不使用DMA

[复制链接]
yl19960531 提问时间:2019-4-3 11:01 /
stm32一个ADC,使用两个通道,可以同时采集吗?不使用DMA我使用后,传输的数据全部是后一个通道的值,不知道什么原因?求大神帮忙解决。
应该是存入同一个寄存器,覆盖了才结束标志位,请问怎么解决。

<
收藏 评论7 发布时间:2019-4-3 11:01

举报

7个回答
wenyangzeng 回答时间:2019-4-3 11:49:14
2个以上ADC采样必须设置成扫描模式:

ADC_InitStructure.ADC_ScanConvMode = ENABLE;

评分

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

查看全部评分

edmundlee 回答时间:2019-4-3 12:27:27
一个ADC靠开关选择其中之一的通道采样, 能怎样同时?二个开关同时闭合?子细想想都知道这是不可能的

评分

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

查看全部评分

toofree 回答时间:2019-4-3 12:32:52
DMA很好用的。
把DMA开成循环模式,ADC用扫描+持续方式;什么时候想要ADC数据了,直接从数组往出读就可以了。除了有点浪费DMA时间和费点电之外,很省事。
  1. /**
  2.   * @brief  DMA1 channel1 configuration
  3.   * @param  None
  4.   * @retval None
  5.   */
  6. void DMA1_Configuration(void)
  7. {
  8.   /* DMA1 channel1 configuration ----------------------------------------------*/
  9.   DMA_DeInit(DMA1_Channel1);
  10.   DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
  11.   DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADC1ConvertedValue;
  12.   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
  13.   DMA_InitStructure.DMA_BufferSize = 64;
  14.   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  15.   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  16.   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  17.   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  18.   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  19.   DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  20.   DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  21.   DMA_Init(DMA1_Channel1, &DMA_InitStructure);  
  22.   /* Enable DMA1 channel1 */
  23.   DMA_Cmd(DMA1_Channel1, ENABLE);
  24. }

  25. /**
  26.   * @brief  ADC1 configuration
  27.   * @param  None
  28.   * @retval None
  29.   */
  30. void ADC1_Configuration(void)
  31. {
  32.   /* ADC1 configuration ------------------------------------------------------*/
  33.   ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
  34.   ADC_InitStructure.ADC_ScanConvMode = ENABLE;
  35.   ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  36.   ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
  37.   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  38.   ADC_InitStructure.ADC_NbrOfChannel = 4;
  39.   ADC_Init(ADC1, &ADC_InitStructure);

  40.   /* ADC1 regular channels configuration */
  41.   ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_239Cycles5);
  42.   ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 2, ADC_SampleTime_239Cycles5);
  43.   ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 3, ADC_SampleTime_239Cycles5);
  44.   ADC_RegularChannelConfig(ADC1, ADC_Channel_17, 4, ADC_SampleTime_239Cycles5);   
  45.   /* Enable ADC1 DMA */
  46.   ADC_DMACmd(ADC1, ENABLE);
  47.   /* Enable ADC1 */
  48.   ADC_Cmd(ADC1, ENABLE);
  49.   /* Tsensor Vref ENABLE */
  50.   ADC_TempSensorVrefintCmd(ENABLE);

  51.   /* Enable ADC1 reset calibaration register */   
  52.   ADC_ResetCalibration(ADC1);
  53.   /* Check the end of ADC1 reset calibration register */
  54.   while(ADC_GetResetCalibrationStatus(ADC1));

  55.   /* Start ADC1 calibaration */
  56.   ADC_StartCalibration(ADC1);
  57.   /* Check the end of ADC1 calibration */
  58.   while(ADC_GetCalibrationStatus(ADC1));

  59.   /* Start ADC1 Software Conversion */
  60.   ADC_SoftwareStartConvCmd(ADC1, ENABLE);
  61. }
复制代码


评分

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

查看全部评分

dataozi 回答时间:2019-4-3 12:59:05
可以的啊 可以双通道 规则采样 现在第一个通道 后采集第二个通道

评分

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

查看全部评分

一代睡神的崛起 回答时间:2019-4-4 13:36:46
datasheet上讲得很详细了,ADC采样存在几种不同的模式,但是同时使能通道采集是没有这种说法的

评分

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

查看全部评分

wsqrf 回答时间:2019-4-9 16:49:09
顶下楼主,正在做这块。
yulanhao 回答时间:2019-4-9 18:58:55
我也在纠结这个问题 哈哈哈 过两天看看数据手册

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版