[求助] 请教STM32L152的启动时钟设置问题

ZHANGXUEJIE   2016-7-29 10:45 楼主
我的硬件是STM32L152ZD,现在的状态是通过跟踪,程序一直运行在启动文件中。即启动文件中调用SystemInit (void),SystemInit (void)中又调用SetSysClock(void)。现在问题是 程序一直在do---wile()中循环,应该是在等待HSE稳定吧。资料上不是说STM32L1XX系列上电默认时钟就是HSI吗?附上SetSysClock(void)函数片段。库是V1.3.1.。。先谢谢大家了
static void SetSysClock(void)
{
  __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
  
  /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/
  /* Enable HSE */
  RCC->CR |= ((uint32_t)RCC_CR_HSEON);

  /* Wait till HSE is ready and if Time out is reached exit */
  do
  {
    HSEStatus = RCC->CR & RCC_CR_HSERDY;
    StartUpCounter++;
  } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

  if ((RCC->CR & RCC_CR_HSERDY) != RESET)
  {
    HSEStatus = (uint32_t)0x01;
  }
  else
  {
    HSEStatus = (uint32_t)0x00;
  }
  
  if (HSEStatus == (uint32_t)0x01)

回复评论 (8)

2推荐 huaiqiao 

楼主,我对您的疑问回答如下:
1、对时钟的理解,不能抛开时钟树,这个是必须的。因为我个人觉得时钟树贯穿于stm32的每个程序中。(因为你初始化外设的时候,第一步总是在使能总线时钟);所以,您理解的时候,借助手册中RCC的时钟树那个章节。

时钟树.png

2、如果时钟树理解起来比较麻烦,也可以使用CubeMX来配合理解时钟。
下图,我只是拿个图片来举个例子。

c.png


3、 SetSysClock(void)这个函数一开始,就执行RCC->CR |= ((uint32_t)RCC_CR_HSEON),所以这个地方就是使能HSE,具体的理解,您可以参考RCC的CR寄存器,和RCC_CR_HSEON的宏定义来理解。
我举个例子:
RCC_CR_HSEON被宏定义为((uint32_t)0x00010000),如果执行这个语句RCC->CR |= ((uint32_t)RCC_CR_HSEON),那么CR寄存器的第16位被置位,所以根据参考手册CR寄存器的说明。HSE振荡器打开
     后面的do,while循环。那么do,while循环有个特点,先执行,后判断。所以理解起来,应该是先去看do里面的语句, HSEStatus = RCC->CR & RCC_CR_HSERDY;这个的理解和刚才第一句的理解是一样的。(就是根据RCC_CR_HSERDY的宏定义值)。想必while的判断,也是如此。
4、后面你的这个 SetSysClock(void)没复制全,所以没法再做详细的说明。其实说白了,你理解了C语言,再结合时钟树及RCC的寄存器,这个时钟设置的理解就不困难了。


点赞  2016-7-29 22:51
引用: huaiqiao 发表于 2016-7-29 22:51
楼主,我对您的疑问回答如下:
1、对时钟的理解,不能抛开时钟树,这个是必须的。因为我个人觉得时钟树贯 ...

谢谢!大概明白了
点赞  2016-8-2 09:44
引用: huaiqiao 发表于 2016-7-29 22:51
楼主,我对您的疑问回答如下:
1、对时钟的理解,不能抛开时钟树,这个是必须的。因为我个人觉得时钟树贯 ...

太有耐心了  支持下
点赞  2016-8-2 09:59
引用: ZHANGXUEJIE 发表于 2016-8-2 09:44
谢谢!大概明白了

恩恩,多想想,多看看。。。多比较。。。。多理解,你就清楚时钟树了。
点赞  2016-8-2 10:08
引用: 柠檬酸钠 发表于 2016-8-2 09:59
太有耐心了  支持下

呵呵,谢谢。每个人都是从不知道到知道过来的。或许有人这么耐心的讲解了,走的弯路可能会更少一些。
点赞  2016-8-2 10:09
引用: huaiqiao 发表于 2016-8-2 10:09
呵呵,谢谢。每个人都是从不知道到知道过来的。或许有人这么耐心的讲解了,走的弯路可能会更少一些。

嗯 ,不懂就要问是应该有的心态。
欢迎来论坛多发帖多交流
点赞  2016-8-2 10:57
引用: 柠檬酸钠 发表于 2016-8-2 10:57
嗯 ,不懂就要问是应该有的心态。
欢迎来论坛多发帖多交流

我也是不懂的就向别人请教,不懂不可怕。可怕的是不问。。。
O(∩_∩)O哈哈~。。。。。大家相互学习么
点赞  2016-8-2 15:02
lz。中文手册来一份
点赞  2017-7-28 20:48
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复