打印
[应用相关]

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

[复制链接]
1795|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jcky001|  楼主 | 2021-2-4 10:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
stm32一个ADC,使用两个通道,可以同时采集吗?不使用DMA我使用后,传输的数据全部是后一个通道的值,不知道什么原因?求大神帮忙解决。
应该是存入同一个寄存器,覆盖了才结束标志位,请问怎么解决。

使用特权

评论回复
评论
xiaofei558008 2021-2-5 10:12 回复TA
有几个ADC核心的,可以同时采样,用一个触发源 
沙发
laocuo1142| | 2021-2-4 10:51 | 只看该作者
2个以上ADC采样必须设置成扫描模式:

ADC_InitStructure.ADC_ScanConvMode = ENABLE;

使用特权

评论回复
板凳
flycamelaaa| | 2021-2-4 10:52 | 只看该作者

一个ADC靠开关选择其中之一的通道采样, 能怎样同时?二个开关同时闭合?子细想想都知道这是不可能的

使用特权

评论回复
地板
powerantone| | 2021-2-4 10:52 | 只看该作者
DMA很好用的。
把DMA开成循环模式,ADC用扫描+持续方式;什么时候想要ADC数据了,直接从数组往出读就可以了。除了有点浪费DMA时间和费点电之外,很省事。
  • /**
  •   * @brief  DMA1 channel1 configuration
  •   * @param  None
  •   * @retval None
  •   */
  • void DMA1_Configuration(void)
  • {
  •   /* DMA1 channel1 configuration ----------------------------------------------*/
  •   DMA_DeInit(DMA1_Channel1);
  •   DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
  •   DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADC1ConvertedValue;
  •   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
  •   DMA_InitStructure.DMA_BufferSize = 64;
  •   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  •   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  •   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  •   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  •   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  •   DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  •   DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  •   DMA_Init(DMA1_Channel1, &DMA_InitStructure);
  •   /* Enable DMA1 channel1 */
  •   DMA_Cmd(DMA1_Channel1, ENABLE);
  • }
  • /**
  •   * @brief  ADC1 configuration
  •   * @param  None
  •   * @retval None
  •   */
  • void ADC1_Configuration(void)
  • {
  •   /* ADC1 configuration ------------------------------------------------------*/
  •   ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
  •   ADC_InitStructure.ADC_ScanConvMode = ENABLE;
  •   ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  •   ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
  •   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  •   ADC_InitStructure.ADC_NbrOfChannel = 4;
  •   ADC_Init(ADC1, &ADC_InitStructure);
  •   /* ADC1 regular channels configuration */
  •   ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_239Cycles5);
  •   ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 2, ADC_SampleTime_239Cycles5);
  •   ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 3, ADC_SampleTime_239Cycles5);
  •   ADC_RegularChannelConfig(ADC1, ADC_Channel_17, 4, ADC_SampleTime_239Cycles5);   
  •   /* Enable ADC1 DMA */
  •   ADC_DMACmd(ADC1, ENABLE);
  •   /* Enable ADC1 */
  •   ADC_Cmd(ADC1, ENABLE);
  •   /* Tsensor Vref ENABLE */
  •   ADC_TempSensorVrefintCmd(ENABLE);
  •   /* Enable ADC1 reset calibaration register */
  •   ADC_ResetCalibration(ADC1);
  •   /* Check the end of ADC1 reset calibration register */
  •   while(ADC_GetResetCalibrationStatus(ADC1));
  •   /* Start ADC1 calibaration */
  •   ADC_StartCalibration(ADC1);
  •   /* Check the end of ADC1 calibration */
  •   while(ADC_GetCalibrationStatus(ADC1));
  •   /* Start ADC1 Software Conversion */
  •   ADC_SoftwareStartConvCmd(ADC1, ENABLE);
  • }

[color=rgb(51, 102, 153) !important]复制代码


使用特权

评论回复
5
stormwind123| | 2021-2-4 10:53 | 只看该作者
可以的啊 可以双通道 规则采样 现在第一个通道 后采集第二个通道

使用特权

评论回复
6
probedog| | 2021-2-4 10:53 | 只看该作者
datasheet上讲得很详细了,ADC采样存在几种不同的模式,但是同时使能通道采集是没有这种说法的

使用特权

评论回复
7
classroom| | 2021-2-4 10:53 | 只看该作者

顶下楼主,正在做这块。

使用特权

评论回复
8
豌豆爹| | 2021-2-4 10:54 | 只看该作者
我也在纠结这个问题 哈哈哈 过两天看看数据手册

使用特权

评论回复
9
lvyunzeng| | 2021-2-4 11:01 | 只看该作者
内部一个ADC转换模块,前边是多路切换开关进行切换通道。因此在做基本采集是问题不大,你要求的同步采集到什么量级,做信号相位比较时这种ADC是不行的,其他的没有问题。

使用特权

评论回复
10
木木guainv| | 2021-3-1 23:37 | 只看该作者
可以同时采集啊

使用特权

评论回复
11
磨砂| | 2021-3-1 23:41 | 只看该作者
设置成扫描模式啊

使用特权

评论回复
12
晓伍| | 2021-3-1 23:44 | 只看该作者
当然可以了 没有问题

使用特权

评论回复
13
八层楼| | 2021-3-1 23:47 | 只看该作者
楼主的问题解决了没有啊

使用特权

评论回复
14
观海| | 2021-3-1 23:49 | 只看该作者
非常容易实现啊

使用特权

评论回复
15
nicole.088| | 2021-4-29 21:01 | 只看该作者
观海 发表于 2021-3-1 23:49
非常容易实现啊

请教一下,有什么好的方法,实现通道之间的同步?

使用特权

评论回复
16
香水城| | 2021-4-30 07:16 | 只看该作者
除非使用多个ADC模块,不然同一模块的通道做不到同时采样。

四个ADC模块同时转换之应用示例

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1503

主题

4507

帖子

6

粉丝