OpenEdv-开源电子网

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

STM32的系统时钟初始化函数的流程?

[复制链接]

8

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2011-7-8
在线时间
2 小时
发表于 2011-7-8 14:32:04 | 显示全部楼层 |阅读模式
请问原子:你那些直接操作寄存器的例程,比如初始化系统时钟那个例程,写这些程序的流程你是看什么资料来定的,我在网上也找不到相关的资料来看。
看你的例程,针对每个寄存的操作,看资料还能知道为什么要填这样的值,但什么时候操作哪个寄存器,总应该有个顺序吧?好像资料上看不到什么地方讲到这个顺序的问题哦?
我在QQ群上问,没人理我,根据你的指示,就来到这里问了,希望指点一二!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2011-7-8 15:04:14 | 显示全部楼层
你指这个函数?
void Stm32_Clock_Init(u8 LL)
{
unsigned char temp=0;   
MYRCC_DeInit();   //复位并配置向量表
RCC->CR|=0x00010000;  //外部高速时钟使能HSEON
while(!(RCC->CR>>17));//等待外部时钟就绪
RCC->CFGR=0X00000400; //APB1=DIV2;APB2=DIV1;AHB=DIV1;
PLL-=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;
}    
}
这个我最初是根据MDK自带的例子一步步改为寄存器操作的.现在来看,也不难理解.
首先,程序开始运行的时候,是不是应该先对寄存器先复位一下?
其次,复位了之后,我是不是第一步要做的就是要设置系统时钟?
时钟设置完了,就可以开始其他操作了.
整个Stm32_Clock_Init的功能也就完了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2011-7-8
在线时间
2 小时
 楼主| 发表于 2011-7-8 15:53:46 | 显示全部楼层
对,我是说这个,谢谢你!
我还想问一下,你看的MDK的例子在哪里下载的呢?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2011-7-8 16:04:55 | 显示全部楼层
MDK的安装目录有.
D:\Keil3.80\ARM\Examples\ST\STM32F10xFWLib
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2011-7-8
在线时间
2 小时
 楼主| 发表于 2011-7-8 16:11:26 | 显示全部楼层
哦,谢谢!
回复 支持 反对

使用道具 举报

8

主题

18

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2019-11-4
在线时间
5 小时
发表于 2019-11-4 16:29:56 | 显示全部楼层
正点原子 发表于 2011-7-8 15:04
你指这个函数?
void&nbsp;Stm32_Clock_Init(u8&nbspLL)
{
        unsigned&nbsp;char&nbsp;temp=0;&nbsp;&nbsp; ...

原子哥,小弟初学者,这段代码中PLL-=2;//抵消2个单位 必须有?为什么要这么做?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-29 03:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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