B-L475E-IOT01A板子为什么会无法使用ADC

2019-07-14 14:41发布

我用的板子是ST公司的B-L475E-IOT01A ,程序是在官方的例程上修改的,主要是在Periph_Config()里添加了ADC的时钟,在main()函数里添加了MX_ADC1_Init(),程序里的时钟是我按照cubemx里配套的B-L475E-IOT01A板子的时钟树修改的,目前我定位错误定位到HAL_ADC_Init()函数里的LL_ADC_EnableInternalRegulator(hadc->Instance),这个函数应该是使能内部电压稳压器,但是不知道为什么,使能失败了,所以ADC初始化失败了。我目前将程序里所有能关的部件都关了,只配置了USART,RTC和ADC,相互之间应该不影响了,我配置为ADC的引脚是PC0。希望能有位用过B-L475E-IOT01A或者了解STM32l475的前辈指点迷津。关键代码如下,如果有问题请大家指明,这个问题对我来说很急,所以会一定会回复,欢迎大家讨论。
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct;//振荡器初始化
  RCC_ClkInitTypeDef RCC_ClkInitStruct;//时钟初始化

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE|RCC_OSCILLATORTYPE_MSI;
  RCC_OscInitStruct.LSEState = RCC_LSE_ON;//打开低速外部时钟
  RCC_OscInitStruct.MSIState = RCC_MSI_ON;
  RCC_OscInitStruct.MSICalibrationValue = 0;
  RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_11;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_MSI;
  RCC_OscInitStruct.PLL.PLLM = 6;
  RCC_OscInitStruct.PLL.PLLN = 20;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7;
  RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
  RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)//有问题
  {
    Error_Handler();
  }

  /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
     clocks dividers */
  RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
  {
    Error_Handler();
  }

  /* Enable MSI PLL mode */
  HAL_RCCEx_EnableMSIPLLMode();
}

void Periph_Config(void)
{
  RCC_PeriphCLKInitTypeDef PeriphClkInit;
  PeriphClkInit.PeriphClockSelection  = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_USART1//设备时
                                       |RCC_PERIPHCLK_USART3|RCC_PERIPHCLK_I2C2
                                       |RCC_PERIPHCLK_RNG  |RCC_PERIPHCLK_ADC;
  PeriphClkInit.Usart1ClockSelection  = RCC_USART1CLKSOURCE_PCLK2;
  PeriphClkInit.Usart3ClockSelection  = RCC_USART3CLKSOURCE_PCLK1;
  PeriphClkInit.I2c2ClockSelection    = RCC_I2C2CLKSOURCE_PCLK1;
  PeriphClkInit.RngClockSelection     = RCC_RNGCLKSOURCE_PLLSAI1;
  PeriphClkInit.RTCClockSelection     = RCC_RTCCLKSOURCE_LSE;
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。