OpenEdv-开源电子网

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

关于系统时钟初始化函数“void Stm32_Clock_Init(u8 PLL);”的讨论,有问题请教大家

[复制链接]

15

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2013-11-9
在线时间
0 小时
发表于 2013-11-9 14:15:15 | 显示全部楼层 |阅读模式
void Stm32_Clock_Init(u8 PLL)
{
unsigned char temp=0;   
MYRCC_DeInit(); //问题1:这个初始化函数有什么用?STM32上电自动复位吗?在led交替闪烁程序里我把这句注释掉也是可行的  
  RCC->CR|=0x00010000;  
while(!(RCC->CR>>17));
RCC->CFGR=0X00000400; 
PLL-=2;
RCC->CFGR|=PLL<<18;  
RCC->CFGR|=1<<16;
FLASH->ACR|=0x32; //问题2:这个是怎么实现延时2个周期的?  

RCC->CR|=0x01000000;
while(!(RCC->CR>>25));
RCC->CFGR|=0x00000002;
while(temp!=0x02)    
{   
temp=RCC->CFGR>>2;
temp&=0x03;
}    
}    
其中:
void MYRCC_DeInit(void)
{
  RCC->APB1RSTR = 0x00000000;
RCC->APB2RSTR = 0x00000000; //问题3:这两句写1跟写0有什么区别?写0无作用,写1复位外设。我们用IO口时不是应该复位端口吗?怎么还是置0?
 
  RCC->AHBENR = 0x00000014; 
  RCC->APB2ENR = 0x00000000;   
  RCC->APB1ENR = 0x00000000;   
//RCC->CR |= 0x00000001;    //问题4:这句可以注释掉吧?我是这样想的:STM32上电后内部时钟工作,开始执行第一条代码,在外部时钟未工作之前都是内部时钟在起作用,等PLL作为系统时钟设置成功后,也就是“void Stm32_Clock_Init(u8 PLL);”函数里的这个循环
        while(temp!=0x02)    
{   
temp=RCC->CFGR>>2;
temp&=0x03;
}    
成功后切换到外部时钟,这样对吗?


 
RCC->CFGR &= 0xF8FF0000;    
RCC->CR &= 0xFEF6FFFF;   
RCC->CR &= 0xFFFBFFFF;    
RCC->CFGR &= 0xFF80FFFF; 
RCC->CIR = 0x00000000;   
 
#ifdef  VECT_TAB_RAM
MY_NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x1000);
#else   
MY_NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);
#endif
}
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2013-11-9 19:44:27 | 显示全部楼层
1,这个就是复位一些外设,不加影响也不大,因为你按复位键,就会对这些外设寄存器进行复位的。
2,这个硬件设计好了的,至于为什么,你得问ST设计芯片的人了。 
3,这里是复位结束,其实在前面应该加多2句,设置为1,的比较好点。
4,是可以去掉。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2013-11-9
在线时间
0 小时
 楼主| 发表于 2013-11-9 21:20:07 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
嗯,谢谢哈! 关于问题2:FLASH->ACR|=0x32;这个是怎么来的,咋按位或上0x32就延时两个周期,延时3个4个周期怎么实现?

关于问题3:在我的led闪烁灯项目中我是用到PB8和PB9交替输出高低电平,而PB端口的复位在APB2外设复位寄存器RCC_APB2RSTR第三位,我令其为1,即RCC->APB2RSTR = 0x00000008;(1000B)。可是这样led就不交替闪烁了,什么原因啊?求解
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2013-11-9 23:27:29 | 显示全部楼层
回复【3楼】电子狂飙:
---------------------------------
请看:STM32F10xxx闪存编程参考手册.pdf
FLASH->ACR寄存器的描述。
1就是一直复位吧?你复位结束要清零啊。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2013-4-8
在线时间
0 小时
发表于 2013-11-10 21:03:49 | 显示全部楼层
RCC->CR |= 0x00000001;

问题4为什么可以去掉??这个语句在外部时钟选定之间,应该是先使用内部时钟,如果去掉了,不是没有了时钟可以使用了吗????

回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2013-11-10 22:19:59 | 显示全部楼层
回复【5楼】天都神王:
---------------------------------
你可以看看数据手册么?
可以自己动手么?可以的话,翻一下,找下RCC->CR的寄存器,默认值是多少。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2013-11-9
在线时间
0 小时
 楼主| 发表于 2013-11-14 10:39:33 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
嗯 了解了!非常感谢!
回复 支持 反对

使用道具 举报

15

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2013-11-9
在线时间
0 小时
 楼主| 发表于 2013-12-12 22:57:56 | 显示全部楼层
回复【5楼】天都神王:
---------------------------------
默认RCC->CR=0x00000083;使用内部时钟的
回复 支持 反对

使用道具 举报

62

主题

202

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2013-11-15
在线时间
85 小时
发表于 2014-3-16 00:28:24 | 显示全部楼层
回复【楼主位】电子狂飙:
---------------------------------
能解释一下这个地方吗?
while(temp!=0x02)    
{   
temp=RCC->CFGR>>2;
temp&=0x03;
}
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-3-16 14:28:05 | 显示全部楼层
回复【9楼】归荑洵:
---------------------------------
RCC->CFGR第2,3位是什么意思?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-13 16:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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