你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 2314|回复: 4

stm32的systemint使用

[复制链接]

12

主题

14

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-12-5 09:11:57 | 显示全部楼层 |阅读模式
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步,程序也能运行,请问有什么不同?
<
回复

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2011-12-5 09:49:58 | 显示全部楼层

RE:stm32的systemint使用

1、systeninit(),是初始化系统时钟,只需要你#define一个对应的版本ST就可以了。
2、写法不一样,但是最终的结果是一样的,都是配置相同系统时钟。
3、不配置时钟也能工作。但是其中延时、模块配置都会出现问题,因为这个时候的系统时钟并不是72MHz。
回复 支持 反对

使用道具 举报

12

主题

14

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2011-12-5 10:20:22 | 显示全部楼层

回复:stm32的systemint使用

回复第 2 楼 于2011-12-05 01:49:58发表:
1、systeninit(),是初始化系统时钟,只需要你#define一个对应的版本ST就可以了。
2、写法不一样,但是最终的结果是一样的,都是配置相同系统时钟。
3、不配置时钟也能工作。但是其中延时、模块配置都会出现问题,因为这个时候的系统时钟并不是72MHz。 

如果是一样的,那用systeminit(),只要   #define SYSCLK_FREQ_72MHz  72000000使能,就可以了?比1-12步骤简单,那还要写12步?
/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
/* #define SYSCLK_FREQ_24MHz  24000000 */
/* #define SYSCLK_FREQ_36MHz  36000000 */
/* #define SYSCLK_FREQ_48MHz  48000000 */
/* #define SYSCLK_FREQ_56MHz  56000000 */
#define SYSCLK_FREQ_72MHz  72000000
 
 
#ifdef SYSCLK_FREQ_HSE
  uint32_t SystemCoreClock         = SYSCLK_FREQ_HSE;        /*!&lt; System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_24MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_24MHz;        /*!&lt; System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_36MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_36MHz;        /*!&lt; System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_48MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_48MHz;        /*!&lt; System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_56MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_56MHz;        /*!&lt; System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_72MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_72MHz;        /*!&lt; System Clock Frequency (Core Clock) */
#else /*!&lt; HSI Selected as System Clock source */
  uint32_t SystemCoreClock         = HSI_VALUE;        /*!&lt; System Clock Frequency (Core Clock) */
#endif
回复 支持 反对

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2011-12-5 15:38:10 | 显示全部楼层

RE:stm32的systemint使用

systeminit()这个已经就写好了,只需要你定义你的MCU类型、系统时钟的频率就可以了。
回复 支持 反对

使用道具 举报

3

主题

185

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-12-5 17:29:58 | 显示全部楼层

回复:stm32的systemint使用

主要就是配置时钟,这个设计到很多的参数。如果你是学习的话,完全可以不用,自己配置玩玩,加强学习。
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版