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

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

[复制链接]
渺小的人类 提问时间:2018-4-10 20:59 /
悬赏10ST金币已解决
我用的板子是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;

最佳答案

查看完整内容

CUBE生成的是HAL库的,这个可以通过对比法找答案,既然HAL库的程序能用,说明不是硬件问题,大胆猜测下,是哪个参数错误导致的
收藏 评论8 发布时间:2018-4-10 20:59

举报

8个回答
五哥1 回答时间:2018-4-10 20:59:20
CUBE生成的是HAL库的,这个可以通过对比法找答案,既然HAL库的程序能用,说明不是硬件问题,大胆猜测下,是哪个参数错误导致的

评分

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

查看全部评分

feixiang20 回答时间:2018-4-11 02:59:14
论坛里有ST IoT之路,B-L475E-IOT01A开发板试玩(转载)的帖子,参考下吧,既然你是修改官方程序,那么你可以先试验官方的,然后慢慢调整你需要的。

评分

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

查看全部评分

渺小的人类 回答时间:2018-4-11 09:08:19
feixiang20 发表于 2018-4-11 02:59
论坛里有ST IoT之路,B-L475E-IOT01A开发板试玩(转载)的帖子,参考下吧,既然你是修改官方程序,那么你可以 ...

我上手这块板子就是因为看了这个帖子,帖子里的所有步骤和操作我都亲手做了一遍,现在要把这块板子应用到实际项目中,所以才会添加ADC。
五哥1 回答时间:2018-4-11 18:57:43
pc0在板子上是空脚吗?
渺小的人类 回答时间:2018-4-11 21:43:06
五哥1 发表于 2018-4-11 18:57
pc0在板子上是空脚吗?

是空脚,连接在arduino接口上,用户可以自定义l
butterflyspring 回答时间:2018-4-12 11:40:11
建议你直接将cubex 的ADC移植,不要添加在systermclock_config里面..

评分

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

查看全部评分

渺小的人类 回答时间:2018-4-12 21:07:00
butterflyspring 发表于 2018-4-12 11:40
建议你直接将cubex 的ADC移植,不要添加在systermclock_config里面..

我刚发现我发的程序被截去了一部分,我的ADC时钟是直接使用系统时钟的。
渺小的人类 回答时间:2018-4-14 21:09:08
虽然为什么官方程序无法使用ADC的问题还是没有弄清楚,不过通过Cube生成的程序可以使用ADC,也算是有了一个解决方法,就先这样吧,有时间再把问题搞清楚。

所属标签

相似问题

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