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

st-img
chrome
st-img
firefox
st-img
safari
st-img
ie8及以上
shequ.stmicroelectronics.cn
  • ST意法半导体官网
  • STM32中文官网
  • ST全球论坛
登录/注册
  • 首页
  • 技术问答
  • 话题
  • 资源
  • 创客秀
  • 视频
  • 标签
  • 积分商城
  • 每日签到
LSweet

LSweet

 

回答数 0 关注数 0
关注 私信
  • 动态99
  • 提问
  • 回答0
  • 创客秀 0
  • 分享 0
  • 关注0
4 回答

STM32F030K6T6+CubeMX+DMA+AD 无法读出电压值

STM32F0 STM32CubeMX DMA ADC
菜菜大兵 菜菜大兵 回答时间: 2021-12-29 09:49

CUBE生成代码初始化部分可能需要调整,上回我使用UART加DMA,先初始化UART再初始化DMA,这样只能接收最后一个字节,把DMA初始化放前面 ,UART初始化放后面,就正常了。AD加上DMA,我估计是一样的,你试下,先DMA初始化,后AD初始化。

赞0
1 回答

STM32F030K6T6+CubeMX+DMA+AD 无法读出电压值

STM32F0 STM32CubeMX
LSweet LSweet 回答时间: 2021-10-20 22:14

利用CubeMX 6.3.0 生成AD读取程序无法取出寄存器值,一直为零 应为IO不够用用的串口下载程序 ADC_HandleTypeDef hadc; DMA_HandleTypeDef hdma_adc; /* ADC init function */ void MX_ADC_Init(void) {   ADC_ChannelConfTypeDef sConfig = {0};   /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)   */   hadc.Instance = ADC1;   hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;   hadc.Init.Resolution = ADC_RESOLUTION_12B;   hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;   hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_BACKWARD;   hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV;   hadc.Init.LowPowerAutoWait = ENABLE;   hadc.Init.LowPowerAutoPowerOff = DISABLE;   hadc.Init.ContinuousConvMode = ENABLE;   hadc.Init.DiscontinuousConvMode = DISABLE;   hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START;   hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;   hadc.Init.DMAContinuousRequests = ENABLE;   hadc.Init.Overrun = ADC_OVR_DATA_PRESERVED;   if (HAL_ADC_Init(&hadc) != HAL_OK)   {     Error_Handler();   }   /** Configure for the selected ADC regular channel to be converted.   */   sConfig.Channel = ADC_CHANNEL_0;   sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;   sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5;   if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)   {     Error_Handler();   }   /** Configure for the selected ADC regular channel to be converted.   */   sConfig.Channel = ADC_CHANNEL_1;   if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)   {     Error_Handler();   }   /** Configure for the selected ADC regular channel to be converted.   */   sConfig.Channel = ADC_CHANNEL_2;   if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)   {     Error_Handler();   }   /* USER CODE BEGIN ADC_Init 2 */ //  ADC1->CFGR1 &= (uint32_t)~ADC_CFGR1_DMACFG; //  ADC1->CFGR1 |= (uint32_t)ADC_CFGR1_DMACFG;   /* USER CODE END ADC_Init 2 */ } void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle) {   GPIO_InitTypeDef GPIO_InitStruct = {0};   if(adcHandle->Instance==ADC1)   {   /* USER CODE BEGIN ADC1_MspInit 0 */   /* USER CODE END ADC1_MspInit 0 */     /* ADC1 clock enable */     __HAL_RCC_ADC1_CLK_ENABLE();     __HAL_RCC_GPIOA_CLK_ENABLE();     /**ADC GPIO Configuration     PA0     ------> ADC_IN0     PA1     ------> ADC_IN1     PA2     ------> ADC_IN2     */     GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2;     GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;     GPIO_InitStruct.Pull = GPIO_NOPULL;     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);     /* ADC1 DMA Init */     /* ADC Init */     hdma_adc.Instance = DMA1_Channel1;     hdma_adc.Init.Direction = DMA_PERIPH_TO_MEMORY;     hdma_adc.Init.PeriphInc = DMA_PINC_DISABLE;     hdma_adc.Init.MemInc = DMA_MINC_ENABLE;     hdma_adc.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;     hdma_adc.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;     hdma_adc.Init.Mode = DMA_CIRCULAR;     hdma_adc.Init.Priority = DMA_PRIORITY_LOW;     if (HAL_DMA_Init(&hdma_adc) != HAL_OK)     {       Error_Handler();     }     __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc);   } } void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle) {   if(adcHandle->Instance==ADC1)   {   /* USER CODE BEGIN ADC1_MspDeInit 0 */   /* USER CODE END ADC1_MspDeInit 0 */     /* Peripheral clock disable */     __HAL_RCC_ADC1_CLK_DISABLE();     /**ADC GPIO Configuration     PA0     ------> ADC_IN0     PA1     ------> ADC_IN1     PA2     ------> ADC_IN2     */     HAL_GPIO_DeInit(GPIOA, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2);     /* ADC1 DMA DeInit */     HAL_DMA_DeInit(adcHandle->DMA_Handle);   /* USER CODE BEGIN ADC1_MspDeInit 1 */   /* USER CODE END ADC1_MspDeInit 1 */   } } 还有初始化 HAL_ADCEx_Calibration_Start(&hadc); HAL_Delay(100); HAL_ADC_Start_DMA(&hadc, ADC_Value, 150); 处理函数 void read_V(void) {   for(i=0,ad1=0,ad2=0,ad3=0; i<150;)   {     ad1 += ADC_Value[i++];     ad2 += ADC_Value[i++];     ad3 += ADC_Value[i++];   }   ad1 /= 50;   ad2 /= 50;   ad3 /= 50;   ChongDDY= ad1+ad2+ad3; }

赞0
LSweet LSweet


阅读作者更多的帖子

所在话题

参与活动

  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16