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

查看: 2310|回复: 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;        /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_24MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_24MHz;        /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_36MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_36MHz;        /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_48MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_48MHz;        /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_56MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_56MHz;        /*!< System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_72MHz
  uint32_t SystemCoreClock         = SYSCLK_FREQ_72MHz;        /*!< System Clock Frequency (Core Clock) */
#else /*!< HSI Selected as System Clock source */
  uint32_t SystemCoreClock         = HSI_VALUE;        /*!< 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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版