STM32L151的时钟

  最近在使用stm32l151开发一个项目,其中要用到ADC通道测量电池电量。我在网上参照别人stm32f系列的ADC通道使用代码,结果发现ADC通道实际并没有打开,用不了。使用

ADC_GetFlagStatus(ADC1, ADC_FLAG_ADONS);

函数查询ADC状态,返回的结果是“RESET”,即ADC已经被使用了,所以不能再次被用。遇到这种外设不能启动的情况,肯定首先想到的就是时钟的问题,可实际我已经调用了

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

开启了属于ADC1的时钟。查询其他步骤,也没有其他问题。
  这时候只好硬着头皮翻看stm32的芯片手册,看到ADC那一章。如下图:
STM32L151的时钟_第1张图片
咦,不对呀,ADC时钟竟然是由HSI提供的,而不是APB2提供的时钟。赶紧看看是这一页是不是有错误,再看看stm32l151整个的时钟树:
STM32L151的时钟_第2张图片
明明白白,ADC的时钟就是由HSI提供的,于是调用开启HSI时钟的函数

RCC_HSICmd(ENABLE);

ADC功能就可以正常使用了。

你可能感兴趣的:(stm32l151)