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

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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版