OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10867|回复: 8

等待锁定的问题~

[复制链接]

11

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2011-8-18
在线时间
0 小时
发表于 2011-8-18 19:51:01 | 显示全部楼层 |阅读模式

在void Stm32_Clock_Init(u8 PLL)
{
 unsigned char temp=0;  
 MYRCC_DeInit();    //复位并配置向量表
 RCC->CR|=0x00010000;  //外部高速时钟使能HSEON
 while(!(RCC->CR>>17));//等待外部时钟就绪
 RCC->CFGR=0X00000400; //APB1=DIV2;APB2=DIV1;AHB=DIV1;
 LL-=2;//抵消2个单位
 RCC->CFGR|=PLL<<18;   //设置PLL值 2~16
 RCC->CFGR|=1<<16;   //PLLSRC ON
 FLASH->ACR|=0x32;   //FLASH 2个延时周期

 RCC->CR|=0x01000000;  //PLLON
 while(!(RCC->CR>>25));//等待PLL锁定
 RCC->CFGR|=0x00000002;//PLL作为系统时钟 
 while(temp!=0x02)     //等待PLL作为系统时钟设置成功
 {  
  temp=RCC->CFGR>>2;
  temp&=0x03;
 }   
}   中的while(!(RCC->CR>>17));//等待外部时钟就绪
这个右移运算符怎么理解呢?高手指点~~

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
218
金钱
218
注册时间
2011-8-8
在线时间
0 小时
发表于 2011-8-18 20:18:41 | 显示全部楼层
回复【楼主位】神之箭:
---------------------------------
RCC的CR  17位之前就剩下 LL的使能位  LL的就绪位,和时钟锁定位,在此时这些位都是零。
(RCC->CR>>17)就把地17位挪到了最后,以前低于17位的被挤掉了,前面了自动补零了,也就是说只剩下17这一位。
世界上有10种人,一种是懂二进制的,另一种是不懂二进制的。。。
回复 支持 反对

使用道具 举报

11

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2011-8-18
在线时间
0 小时
 楼主| 发表于 2011-8-18 22:19:17 | 显示全部楼层
回复【2楼】sixear:
---------------------------------
意思也就是说移位以后CR寄存器是0x00000001了吧?那么那个while语句怎么解释呢?如何说明就绪了呢?就绪了就要跳出while循环的,还是不太明白~~
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-8-18 22:35:17 | 显示全部楼层
while
就是不停的等待,直到条件满足
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

11

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2011-8-18
在线时间
0 小时
 楼主| 发表于 2011-8-18 23:47:31 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
原子哥。while(!(RCC->CR>>17));具体是什么意思呢?怎么执行的?我以前只是在51的按键检测那里用过这样的语句,但是对于寄存器怎么解释呢?望指教~
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-8-19 00:27:02 | 显示全部楼层
回复【5楼】神之箭:
---------------------------------
简单的c语言问题啊
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

19

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
218
金钱
218
注册时间
2011-8-8
在线时间
0 小时
发表于 2011-8-19 08:53:45 | 显示全部楼层
回复【3楼】神之箭:
---------------------------------
当时钟未就绪 (RCC->CR>>17)为0,while(!(RCC->CR>>17));会一直执行空操作。
当时钟就绪(RCC->CR>>17)为1,while的循环条件不满足,于是跳出执行后面的语句。
搞清楚
while();
与通常的
while()
{}
还是有一点点不同的……
世界上有10种人,一种是懂二进制的,另一种是不懂二进制的。。。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-8-19 09:11:04 | 显示全部楼层
楼上正解.
回复 支持 反对

使用道具 举报

11

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2011-8-18
在线时间
0 小时
 楼主| 发表于 2011-8-19 13:13:44 | 显示全部楼层
回复【7楼】sixear:
哦哦~~明白了,明白了,移位的目的原来就是让17为变成1后把它放到最低位上致使表达式为1~非后为0 ~~恩恩~谢谢~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 20:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表