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

求助 STM32F302RC ADC2的问题

[复制链接]
剑鱼 提问时间:2016-11-20 16:39 /
本人接触stm32f 时间不长,在一个项目上使用了stm32f302rc这个芯片,初始化代码用的是STM32CubeMX生成的。ADC1、ADC2各有4路模拟输入。目前遇到的问题是ADC1采样正常,但ADC2采样不正常,输入0V时ADC2转换始终不为零,折合电压大概有0.9V左右(3.3V基准)。这个问题已经困扰了几天了,还没有解决。求各位高人帮忙看看,如何解决。
谢谢!!
以下是初始化代码:
  1. ADC_HandleTypeDef hadc1;
  2. ADC_HandleTypeDef hadc2;
  3. ADC_MultiModeTypeDef multi;
  4. DMA_HandleTypeDef hdma_adc1;
  5. DMA_HandleTypeDef hdma_adc2;

  6. /* ADC1 init function */
  7. void MX_ADC1_Init(void)
  8. {
  9.   ADC_ChannelConfTypeDef sConfig;
  10.         
  11.         /**Common config */
  12.   hadc1.Instance = ADC1;
  13.   hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV1;
  14.   hadc1.Init.Resolution = ADC_RESOLUTION_12B;
  15.   hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
  16.   hadc1.Init.ContinuousConvMode = DISABLE;
  17.   hadc1.Init.DiscontinuousConvMode = DISABLE;
  18.   hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
  19.   hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T4_TRGO;
  20.   hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  21.   hadc1.Init.NbrOfConversion = 4;
  22.   hadc1.Init.DMAContinuousRequests =DISABLE;
  23.   hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  24.   hadc1.Init.LowPowerAutoWait = DISABLE;
  25.   hadc1.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
  26.   if (HAL_ADC_Init(&hadc1) != HAL_OK)
  27.   {
  28.     Error_Handler();
  29.   }
  30.         
  31.         /**Configure Regular Channel */

  32.   sConfig.SingleDiff = ADC_SINGLE_ENDED;
  33.   sConfig.SamplingTime = ADC_SAMPLETIME_19CYCLES_5;
  34.   sConfig.OffsetNumber = ADC_OFFSET_NONE;
  35.   sConfig.Offset = 0;

  36.         sConfig.Channel = ADC_CHANNEL_1;
  37.   sConfig.Rank = 1;
  38.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  39.   {
  40.     Error_Handler();
  41.   }
  42.                 /**Configure Regular Channel*/
  43.   sConfig.Channel = ADC_CHANNEL_2;
  44.   sConfig.Rank = 2;
  45.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  46.   {
  47.     Error_Handler();
  48.   }
  49.                 /**Configure Regular Channel*/
  50.   sConfig.Channel = ADC_CHANNEL_3;
  51.   sConfig.Rank = 3;
  52.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  53.   {
  54.     Error_Handler();
  55.   }
  56.                 /**Configure Regular Channel*/
  57.   sConfig.Channel = ADC_CHANNEL_4;
  58.   sConfig.Rank = 4;
  59.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  60.   {
  61.     Error_Handler();
  62.   }
  63.         
  64.   HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED);
  65.                
  66.   HAL_ADC_Start_DMA(&hadc1, (U32*)ADC1_ConvertedValue,ADC_SampleCount);

  67. }

  68. /* ADC2 init function */
  69. void MX_ADC2_Init(void)
  70. {
  71.   ADC_ChannelConfTypeDef sConfig;
  72.         
  73.         /**Common config */
  74.   hadc2.Instance = ADC2;
  75.   hadc2.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV1;
  76.   hadc2.Init.Resolution = ADC_RESOLUTION_12B;
  77.   hadc2.Init.ScanConvMode = ADC_SCAN_ENABLE;
  78.   hadc2.Init.ContinuousConvMode = DISABLE;
  79.   hadc2.Init.DiscontinuousConvMode = DISABLE;
  80.   hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
  81.   hadc2.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T4_TRGO;
  82.   hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  83.   hadc2.Init.NbrOfConversion = 4;
  84.   hadc2.Init.DMAContinuousRequests = DISABLE;
  85.   hadc2.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  86.   hadc2.Init.LowPowerAutoWait = DISABLE;
  87.   hadc2.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
  88.   if (HAL_ADC_Init(&hadc2) != HAL_OK)
  89.   {
  90.     Error_Handler();
  91.   }

  92.         /**Configure Regular Channel*/

  93.   sConfig.SingleDiff = ADC_SINGLE_ENDED;
  94.   sConfig.SamplingTime = ADC_SAMPLETIME_19CYCLES_5;
  95.   sConfig.OffsetNumber = ADC_OFFSET_NONE;
  96.   sConfig.Offset = 0;
  97.         
  98.         sConfig.Channel = ADC_CHANNEL_6;
  99.   sConfig.Rank = 1;
  100.   if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  101.   {
  102.     Error_Handler();
  103.   }
  104.         
  105.   /**Configure Regular Channel */
  106.   sConfig.Channel = ADC_CHANNEL_7;
  107.   sConfig.Rank = 2;
  108.   if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  109.   {
  110.     Error_Handler();
  111.   }
  112.     /**Configure Regular Channel*/
  113.   sConfig.Channel = ADC_CHANNEL_8;
  114.   sConfig.Rank = 3;
  115.   if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  116.   {
  117.     Error_Handler();
  118.   }
  119.     /**Configure Regular Channel*/

  120.   sConfig.Channel = ADC_CHANNEL_9;
  121.   sConfig.Rank = 4;
  122.   if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  123.   {
  124.     Error_Handler();
  125.   }
  126.   multi.Mode = ADC_MODE_INDEPENDENT;
  127.   multi.DMAAccessMode = ADC_DMAACCESSMODE_DISABLED;
  128.   if (HAL_ADCEx_MultiModeConfigChannel(&hadc2, &multi)!=HAL_OK)
  129.   {
  130.     Error_Handler();
  131.   }      
  132.         
  133.   HAL_ADCEx_Calibration_Start(&hadc2, ADC_SINGLE_ENDED);
  134.         
  135.   HAL_ADC_Start_DMA(&hadc2, (U32*)ADC2_ConvertedValue, ADC_SampleCount);
  136. }

  137. static uint32_t HAL_RCC_ADC12_CLK_ENABLED=0;

  138. void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
  139. {

  140.   GPIO_InitTypeDef GPIO_InitStruct;
  141.   if(adcHandle->Instance==ADC1)
  142.   {
  143.     /* Peripheral clock enable */
  144.     HAL_RCC_ADC12_CLK_ENABLED++;
  145.     if(HAL_RCC_ADC12_CLK_ENABLED==1){
  146.       __HAL_RCC_ADC12_CLK_ENABLE();
  147.     }

  148.     /**ADC1 GPIO Configuration   
  149.     PA0     ------> ADC1_IN1
  150.     PA1     ------> ADC1_IN2
  151.     PA2     ------> ADC1_IN3
  152.     PA3     ------> ADC1_IN4
  153.     */
  154.     GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3;
  155.     GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  156.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  157.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  158.     /* Peripheral DMA init*/

  159.     hdma_adc1.Instance = DMA1_Channel1;
  160.     hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
  161.     hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
  162.     hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
  163.     hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
  164.     hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
  165.     hdma_adc1.Init.Mode = DMA_CIRCULAR;//DMA_NORMAL;
  166.     hdma_adc1.Init.Priority = DMA_PRIORITY_MEDIUM;
  167.     if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
  168.     {
  169.       Error_Handler();
  170.     }

  171.     __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc1);

  172.     /* Peripheral interrupt init */
  173.     //HAL_NVIC_SetPriority(ADC1_2_IRQn, 0, 0);
  174.     //HAL_NVIC_EnableIRQ(ADC1_2_IRQn);
  175.   }
  176.   else if(adcHandle->Instance==ADC2)
  177.   {
  178.     /* Peripheral clock enable */
  179.     HAL_RCC_ADC12_CLK_ENABLED++;
  180.     if(HAL_RCC_ADC12_CLK_ENABLED==1){
  181.       __HAL_RCC_ADC12_CLK_ENABLE();
  182.     }

  183.     /**ADC2 GPIO Configuration   
  184.     PC0     ------> ADC2_IN6
  185.     PC1     ------> ADC2_IN7
  186.     PC2     ------> ADC2_IN8
  187.     PC3     ------> ADC2_IN9
  188.     */
  189.     GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3;
  190.     GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  191.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  192.     HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  193.                
  194.     /* Peripheral DMA init*/

  195.     hdma_adc2.Instance = DMA2_Channel1;
  196.     hdma_adc2.Init.Direction = DMA_PERIPH_TO_MEMORY;
  197.     hdma_adc2.Init.PeriphInc = DMA_PINC_DISABLE;
  198.     hdma_adc2.Init.MemInc = DMA_MINC_ENABLE;
  199.     hdma_adc2.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
  200.     hdma_adc2.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
  201.     hdma_adc2.Init.Mode = DMA_CIRCULAR;//DMA_NORMAL;
  202.     hdma_adc2.Init.Priority = DMA_PRIORITY_MEDIUM;
  203.     if (HAL_DMA_Init(&hdma_adc2) != HAL_OK)
  204.     {
  205.       Error_Handler();
  206.     }

  207.     __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc2);

  208.     /* Peripheral interrupt init */
  209.     //HAL_NVIC_SetPriority(ADC1_2_IRQn, 0, 0);
  210.     //HAL_NVIC_EnableIRQ(ADC1_2_IRQn);
  211.   }
  212. }
复制代码



收藏 1 评论13 发布时间:2016-11-20 16:39

举报

13个回答
囧囧 回答时间:2016-11-22 09:45:13
首先楼主这代码不是cube完全自动生成的,也就是说你自己修改过,至于你修改了哪部分就不得而知了。
另外你adc2为什么会有multimode的设置,如果是配置的independent模式的话,应该是没有双adc模式的配置的。
我没有302的片子 ,只是根据经验配置了一下,你可以试试我生成的代码;
  1. /* Includes ------------------------------------------------------------------*/
  2. #include "adc.h"

  3. #include "gpio.h"
  4. #include "dma.h"

  5. /* USER CODE BEGIN 0 */

  6. /* USER CODE END 0 */

  7. ADC_HandleTypeDef hadc1;
  8. ADC_HandleTypeDef hadc2;
  9. DMA_HandleTypeDef hdma_adc1;
  10. DMA_HandleTypeDef hdma_adc2;

  11. /* ADC1 init function */
  12. void MX_ADC1_Init(void)
  13. {
  14.   ADC_ChannelConfTypeDef sConfig;

  15.     /**Common config
  16.     */
  17.   hadc1.Instance = ADC1;
  18.   hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
  19.   hadc1.Init.Resolution = ADC_RESOLUTION_12B;
  20.   hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
  21.   hadc1.Init.ContinuousConvMode = DISABLE;
  22.   hadc1.Init.DiscontinuousConvMode = DISABLE;
  23.   hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
  24.   hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T4_TRGO;
  25.   hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  26.   hadc1.Init.NbrOfConversion = 4;
  27.   hadc1.Init.DMAContinuousRequests = DISABLE;
  28.   hadc1.Init.EOCSelection = ADC_EOC_SEQ_CONV;
  29.   hadc1.Init.LowPowerAutoWait = DISABLE;
  30.   hadc1.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
  31.   if (HAL_ADC_Init(&hadc1) != HAL_OK)
  32.   {
  33.     Error_Handler();
  34.   }

  35.     /**Configure Regular Channel
  36.     */
  37.   sConfig.Channel = ADC_CHANNEL_1;
  38.   sConfig.Rank = 1;
  39.   sConfig.SingleDiff = ADC_SINGLE_ENDED;
  40.   sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
  41.   sConfig.OffsetNumber = ADC_OFFSET_NONE;
  42.   sConfig.Offset = 0;
  43.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  44.   {
  45.     Error_Handler();
  46.   }

  47.     /**Configure Regular Channel
  48.     */
  49.   sConfig.Channel = ADC_CHANNEL_2;
  50.   sConfig.Rank = 2;
  51.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  52.   {
  53.     Error_Handler();
  54.   }

  55.     /**Configure Regular Channel
  56.     */
  57.   sConfig.Channel = ADC_CHANNEL_3;
  58.   sConfig.Rank = 3;
  59.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  60.   {
  61.     Error_Handler();
  62.   }

  63.     /**Configure Regular Channel
  64.     */
  65.   sConfig.Channel = ADC_CHANNEL_4;
  66.   sConfig.Rank = 4;
  67.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  68.   {
  69.     Error_Handler();
  70.   }

  71. }
  72. /* ADC2 init function */
  73. void MX_ADC2_Init(void)
  74. {
  75.   ADC_ChannelConfTypeDef sConfig;

  76.     /**Common config
  77.     */
  78.   hadc2.Instance = ADC2;
  79.   hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
  80.   hadc2.Init.Resolution = ADC_RESOLUTION_12B;
  81.   hadc2.Init.ScanConvMode = ADC_SCAN_ENABLE;
  82.   hadc2.Init.ContinuousConvMode = DISABLE;
  83.   hadc2.Init.DiscontinuousConvMode = DISABLE;
  84.   hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
  85.   hadc2.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T4_TRGO;
  86.   hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  87.   hadc2.Init.NbrOfConversion = 4;
  88.   hadc2.Init.DMAContinuousRequests = DISABLE;
  89.   hadc2.Init.EOCSelection = ADC_EOC_SEQ_CONV;
  90.   hadc2.Init.LowPowerAutoWait = DISABLE;
  91.   hadc2.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
  92.   if (HAL_ADC_Init(&hadc2) != HAL_OK)
  93.   {
  94.     Error_Handler();
  95.   }

  96.     /**Configure Regular Channel
  97.     */
  98.   sConfig.Channel = ADC_CHANNEL_6;
  99.   sConfig.Rank = 1;
  100.   sConfig.SingleDiff = ADC_SINGLE_ENDED;
  101.   sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
  102.   sConfig.OffsetNumber = ADC_OFFSET_NONE;
  103.   sConfig.Offset = 0;
  104.   if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  105.   {
  106.     Error_Handler();
  107.   }

  108.     /**Configure Regular Channel
  109.     */
  110.   sConfig.Channel = ADC_CHANNEL_7;
  111.   sConfig.Rank = 2;
  112.   if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  113.   {
  114.     Error_Handler();
  115.   }

  116.     /**Configure Regular Channel
  117.     */
  118.   sConfig.Channel = ADC_CHANNEL_8;
  119.   sConfig.Rank = 3;
  120.   if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  121.   {
  122.     Error_Handler();
  123.   }

  124.     /**Configure Regular Channel
  125.     */
  126.   sConfig.Channel = ADC_CHANNEL_9;
  127.   sConfig.Rank = 4;
  128.   if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  129.   {
  130.     Error_Handler();
  131.   }

  132. }

  133. static uint32_t HAL_RCC_ADC12_CLK_ENABLED=0;

  134. void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
  135. {

  136.   GPIO_InitTypeDef GPIO_InitStruct;
  137.   if(adcHandle->Instance==ADC1)
  138.   {
  139.   /* USER CODE BEGIN ADC1_MspInit 0 */

  140.   /* USER CODE END ADC1_MspInit 0 */
  141.     /* Peripheral clock enable */
  142.     HAL_RCC_ADC12_CLK_ENABLED++;
  143.     if(HAL_RCC_ADC12_CLK_ENABLED==1){
  144.       __HAL_RCC_ADC12_CLK_ENABLE();
  145.     }
  146.   
  147.     /**ADC1 GPIO Configuration   
  148.     PA0     ------> ADC1_IN1
  149.     PA1     ------> ADC1_IN2
  150.     PA2     ------> ADC1_IN3
  151.     PA3     ------> ADC1_IN4
  152.     */
  153.     GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3;
  154.     GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  155.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  156.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  157.     /* Peripheral DMA init*/
  158.   
  159.     hdma_adc1.Instance = DMA1_Channel1;
  160.     hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
  161.     hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
  162.     hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
  163.     hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
  164.     hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
  165.     hdma_adc1.Init.Mode = DMA_CIRCULAR;
  166.     hdma_adc1.Init.Priority = DMA_PRIORITY_LOW;
  167.     if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
  168.     {
  169.       Error_Handler();
  170.     }

  171.     __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc1);

  172.   /* USER CODE BEGIN ADC1_MspInit 1 */

  173.   /* USER CODE END ADC1_MspInit 1 */
  174.   }
  175.   else if(adcHandle->Instance==ADC2)
  176.   {
  177.   /* USER CODE BEGIN ADC2_MspInit 0 */

  178.   /* USER CODE END ADC2_MspInit 0 */
  179.     /* Peripheral clock enable */
  180.     HAL_RCC_ADC12_CLK_ENABLED++;
  181.     if(HAL_RCC_ADC12_CLK_ENABLED==1){
  182.       __HAL_RCC_ADC12_CLK_ENABLE();
  183.     }
  184.   
  185.     /**ADC2 GPIO Configuration   
  186.     PC0     ------> ADC2_IN6
  187.     PC1     ------> ADC2_IN7
  188.     PC2     ------> ADC2_IN8
  189.     PC3     ------> ADC2_IN9
  190.     */
  191.     GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3;
  192.     GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  193.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  194.     HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  195.     /* Peripheral DMA init*/
  196.   
  197.     hdma_adc2.Instance = DMA2_Channel1;
  198.     hdma_adc2.Init.Direction = DMA_PERIPH_TO_MEMORY;
  199.     hdma_adc2.Init.PeriphInc = DMA_PINC_DISABLE;
  200.     hdma_adc2.Init.MemInc = DMA_MINC_ENABLE;
  201.     hdma_adc2.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
  202.     hdma_adc2.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
  203.     hdma_adc2.Init.Mode = DMA_CIRCULAR;
  204.     hdma_adc2.Init.Priority = DMA_PRIORITY_LOW;
  205.     if (HAL_DMA_Init(&hdma_adc2) != HAL_OK)
  206.     {
  207.       Error_Handler();
  208.     }

  209.     __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc2);

  210.   /* USER CODE BEGIN ADC2_MspInit 1 */

  211.   /* USER CODE END ADC2_MspInit 1 */
  212.   }
  213. }

  214. void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle)
  215. {

  216.   if(adcHandle->Instance==ADC1)
  217.   {
  218.   /* USER CODE BEGIN ADC1_MspDeInit 0 */

  219.   /* USER CODE END ADC1_MspDeInit 0 */
  220.     /* Peripheral clock disable */
  221.     HAL_RCC_ADC12_CLK_ENABLED--;
  222.     if(HAL_RCC_ADC12_CLK_ENABLED==0){
  223.       __HAL_RCC_ADC12_CLK_DISABLE();
  224.     }
  225.   
  226.     /**ADC1 GPIO Configuration   
  227.     PA0     ------> ADC1_IN1
  228.     PA1     ------> ADC1_IN2
  229.     PA2     ------> ADC1_IN3
  230.     PA3     ------> ADC1_IN4
  231.     */
  232.     HAL_GPIO_DeInit(GPIOA, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);

  233.     /* Peripheral DMA DeInit*/
  234.     HAL_DMA_DeInit(adcHandle->DMA_Handle);
  235.   /* USER CODE BEGIN ADC1_MspDeInit 1 */

  236.   /* USER CODE END ADC1_MspDeInit 1 */
  237.   }
  238.   else if(adcHandle->Instance==ADC2)
  239.   {
  240.   /* USER CODE BEGIN ADC2_MspDeInit 0 */

  241.   /* USER CODE END ADC2_MspDeInit 0 */
  242.     /* Peripheral clock disable */
  243.     HAL_RCC_ADC12_CLK_ENABLED--;
  244.     if(HAL_RCC_ADC12_CLK_ENABLED==0){
  245.       __HAL_RCC_ADC12_CLK_DISABLE();
  246.     }
  247.   
  248.     /**ADC2 GPIO Configuration   
  249.     PC0     ------> ADC2_IN6
  250.     PC1     ------> ADC2_IN7
  251.     PC2     ------> ADC2_IN8
  252.     PC3     ------> ADC2_IN9
  253.     */
  254.     HAL_GPIO_DeInit(GPIOC, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);

  255.     /* Peripheral DMA DeInit*/
  256.     HAL_DMA_DeInit(adcHandle->DMA_Handle);
  257.   /* USER CODE BEGIN ADC2_MspDeInit 1 */

  258.   /* USER CODE END ADC2_MspDeInit 1 */
  259.   }
  260. }
复制代码

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

无薪税绵 回答时间:2016-11-22 08:22:37
楼主试试关闭ADC1,单独使用ADC2看正常不。
如果不正常,就是ADC2未正常初始化。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

zhulikai 回答时间:2016-11-22 08:22:52
帮顶了
z258121131 回答时间:2016-11-22 09:02:56
帮顶,楼主解决后发一下。
zhcj66 回答时间:2016-11-22 09:05:55
帮顶,楼主用ADC1的代码在改为ADC2试试

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

chaplin1999-262 回答时间:2016-11-22 09:14:50
adc2 pc端口除了adc外有没有接5v的外设?接的话,好像会有影响!

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

囧囧 回答时间:2016-11-22 09:48:55
楼主不要随意修改自动生成的代码部分,这样如果有地方配置错了,再次使用cube配置时,会覆盖掉你修改的代码的。你只能在
/* USER CODE BEGIN ADC2_MspDeInit 1 */

  /* USER CODE END ADC2_MspDeInit 1 */
这样的结构内部添加/修改你的代码,或者另外独立建立文件,如果没有使用代码管理,你会发现你所修改的内容,再次使用cube配置时被改的体无完肤,你会欲哭无泪的
ataudio 回答时间:2016-11-22 13:52:12
EOCSelection 的配置不一样。
配置过程自查,按照前面网友说的,单独配置每一个ADC,都正常了,再合在一起使用,调试。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

五哥1 回答时间:2016-11-22 17:01:43
前面的都说了,代码呀,外设有无+5V设备呀,交换ADC1和ADC2呀,都可以试一下,就是没有解决,也是一种解决问题的思路,把结果给大家共享下吧

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

peter001 回答时间:2016-11-24 00:31:32
学习了
zbber 回答时间:2016-11-24 07:27:05
EOCSelection 的配置不一样
剑鱼 回答时间:2016-11-24 13:04:35
xuezhimeng2010 发表于 2016-11-22 09:45
首先楼主这代码不是cube完全自动生成的,也就是说你自己修改过,至于你修改了哪部分就不得而知了。
另外你a ...

抱歉,刚出差回来,没有及时回复。
按您给的代码试了,还是不行,和以前一样。
另:
hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1
hadc2.Init.ClockPrescale r= ADC_CLOCK_ASYNC_DIV1
中ADC_CLOCK_ASYNC_DIV1用ADC_CLOCK_SYNC_PCLK_DIV1替代,否则
while(HAL_ADCEx_Calibration_Start(&hadc2, ADC_SINGLE_ENDED) != HAL_OK)过不去。

关闭ADC1单独使用DAC2也不行。
目前只有将原来定义在ADC2的端子定义在ADC1里一切正常。
剑鱼 回答时间:2016-11-24 13:08:53
zbber 发表于 2016-11-24 07:27
EOCSelection 的配置不一样

在EOCSelection中用ADC_EOC_SEQ_CONV或ADC_EOC_SINGLE_CONV都一样。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版