OpenEdv-开源电子网

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

stm32的systemint使用问题

[复制链接]

38

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
238
金钱
238
注册时间
2011-7-12
在线时间
0 小时
发表于 2011-12-5 09:09:20 | 显示全部楼层 |阅读模式
 

void RCC_Configuration(void)
{
         ErrorStatus HSEStartUpStatus;
         //SystemInit();                                                    //完全可以使用此函数配置,但是为了学习咱先不用
         RCC_DeInit();                                                      //复位RCC模块的寄存器,复位成缺省值
         RCC_HSEConfig(RCC_HSE_ON);                           //开启HSE时钟,咱是用HSE的时钟作为PLL的时钟源
         HSEStartUpStatus = RCC_WaitForHSEStartUp(); //获取HSE启动状态

         if(HSEStartUpStatus == SUCCESS)                      //如果HSE启动成功
        {
                  FLASH_PrefetchBufferCmd(ENABLE);          //开启FLASH的预取功能
                  FLASH_SetLatency(FLASH_Latency_2);      //FLASH延迟2个周期(这里我也不明白,先用吧)
   
                 RCC_HCLKConfig(RCC_SYSCLK_Div1);        //配置HCLK,PCLK2,PCLK1,PLL
                 RCC_PCLK2Config(RCC_HCLK_Div1);
                 RCC_PCLK1Config(RCC_HCLK_Div2);

                 RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
                 RCC_PLLCmd(ENABLE);                              //启动PLL
                 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)

                 {}                                                              //等待PLL启动完成
                 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);  //配置系统时钟
                 while(RCC_GetSYSCLKSource() !=0x80)          //检查是否将HSE 9倍频后作为系统时钟

                 {} 
         }

}

 设置时钟流程:

1.将RCC寄存器重新设置为默认值        RCC_DeInit

2.打开外部高速时钟晶振HSE              RCC_HSEConfig(RCC_HSE_ON);

3.等待外部高速时钟晶振工作              HSEStartUpStatus = RCC_WaitForHSEStartUp();

4.设置AHB时钟                                RCC_HCLKConfig;

5.设置高速APB2时钟                         RCC_PCLK2Config;

6.设置低速速APB1时钟                      RCC_PCLK1Config

7.设置PLL                                       RCC_PLLConfig

8.打开PLL                                       RCC_PLLCmd(ENABLE);

9.等待PLL工作                      while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) 

10.设置系统时钟                              RCC_SYSCLKConfig

11.判断是否PLL是系统时钟               while(RCC_GetSYSCLKSource() != 0x08)

12.打开要使用的外设时钟                  RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd()

 

 

1.使用systeninit()和不使用有什么区别?

2.使用systeninit()和设置时钟流程的1-12步骤有什么区别?

3.我写程序不用systeminit().也不适用设置时钟流程的1-12步骤,只使用第12步,程序也能运行,请问有什么不同?

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

使用道具 举报

19

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
218
金钱
218
注册时间
2011-8-8
在线时间
0 小时
发表于 2011-12-5 09:38:44 | 显示全部楼层
只使用第12步,那就用的是默认内部8M时钟;配置过可以达到72M;还是不要看库函数了,直接看寄存器吧。
世界上有10种人,一种是懂二进制的,另一种是不懂二进制的。。。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-12-5 10:18:29 | 显示全部楼层
回复【楼主位】天马:
---------------------------------
systeninit就是一个函数,只是st的人把他潜入到.s文件里面去了,在执行main函数之前就运行了这个函数,所以在main函数里面就不需要管时钟这些东西了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

38

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
238
金钱
238
注册时间
2011-7-12
在线时间
0 小时
 楼主| 发表于 2012-2-11 09:20:22 | 显示全部楼层
 

 回复【3楼】正点原子:
---------------------------------
如果使用systeninit();APB1时钟是72/2=36M,
如果不加systeninit();
只使用     RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd(),APB1时钟能达到多少?



回复 支持 反对

使用道具 举报

38

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
238
金钱
238
注册时间
2011-7-12
在线时间
0 小时
 楼主| 发表于 2012-2-11 09:20:37 | 显示全部楼层
回复【2楼】sixear:
---------------------------------
如果使用systeninit();APB1时钟是72/2=36M, 
如果不加systeninit(); 
只使用     RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd(),APB1时钟能达到多少? 



回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-2-11 10:50:47 | 显示全部楼层
回复【5楼】天马:
---------------------------------
看手册,明明说了.APB1最大就是36M.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-2-11 10:52:59 | 显示全部楼层


我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2012-2-6
在线时间
3 小时
发表于 2012-2-12 17:05:27 | 显示全部楼层
APB1必定是APB2的一半么
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-2-12 18:28:01 | 显示全部楼层
回复【8楼】masski:
---------------------------------
当然不是.看你的分频设置i.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 22:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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