OpenEdv-开源电子网

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

战舰stm32的例程中系统时钟的建立在哪呢?

[复制链接]

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-9-27
在线时间
0 小时
发表于 2013-10-8 16:09:21 | 显示全部楼层 |阅读模式
RCC_Config()类似这样的函数?设置系统时钟是外部晶振还是内部高速晶振,AHB时钟,APB时钟,对这些时钟的初始化在哪里呢?我怎么没找到呢?

我问这个问题主要是我想用HSI做为PLL的输入,然后倍频给SYSCLK,我想使用HSI作为系统时钟,我该怎么设置呢?(用库函数)。



QQ截图20131008160756.jpg
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

156

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2013-9-24
在线时间
0 小时
发表于 2013-10-8 16:27:28 | 显示全部楼层
。。。在system_stm32f10x.c里面。。。。貌似HSI不能倍频的。。。
人需要沐浴阳光,也必将经历风雨
回复 支持 反对

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-9-27
在线时间
0 小时
 楼主| 发表于 2013-10-8 18:48:36 | 显示全部楼层
回复【2楼】LOVE_FYD:
---------------------------------
HSI/2给PLL 然后PLL倍频不就可以啦?
我下面写的有问题么?
大家给看看,谢谢
void RCC_Configuration(void)

{
RCC_DeInit();//将外设 RCC寄存器重设为缺省值
RCC_HSICmd(ENABLE);//使能HSI
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET)
{
} //等待HSI晶振就绪
if(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)!=RESET)
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //flash读取缓冲,加速
FLASH_SetLatency(FLASH_Latency_2);//flash操作的延时

RCC_AdjustHSICalibrationValue(0x1F);/* Set HSI calibration(校准) value to c0x1F (maximum) */

RCC_HCLKConfig(RCC_SYSCLK_Div1);//AHB使用系统时钟
RCC_PCLK2Config(RCC_HCLK_Div1); //APB2(高速)为HCLK的一半
RCC_PCLK1Config(RCC_HCLK_Div2); //APB1(低速)为HCLK的一半

//注:AHB主要负责外部存储器时钟。PB2负责AD,I/O,高级TIM,串口1。APB1负责DA,USB,SPI,I2C,CAN,串口2345,普通TIM。
RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16); //设置 LL 时钟源及倍频系数
//8/2=4 
//使能或者失能 LL,这个参数可以取:ENABLE或者DISABLE
RCC_PLLCmd(ENABLE);//如果PLL被用于系统时钟,那么它不能被失能

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
} //等待指定的 RCC 标志位设置成功 等待PLL初始化成功
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);   //设置系统时钟(SYSCLK) 设置PLL为系统时钟源

//等待PLL成功用作于系统时钟的时钟源
// 0x00:HSI 作为系统时钟
// 0x04:HSE作为系统时钟
// 0x08:PLL作为系统时钟
/* while(RCC_GetSYSCLKSource() != 0x08)
{
}
*/
}
}
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-8 22:41:05 | 显示全部楼层
在:system_stm32f10x.c里面。
void SystemInit (void)
{
  /* Reset the RCC clock configuration to the default reset state(for debug purpose) */
  /* Set HSION bit */
  RCC->CR |= (uint32_t)0x00000001;

  /* Reset SW, HPRE, PRE1, PRE2, ADCPRE and MCO bits */
#ifndef STM32F10X_CL
  RCC->CFGR &= (uint32_t)0xF8FF0000;
#else
  RCC->CFGR &= (uint32_t)0xF0FF0000;
#endif /* STM32F10X_CL */   
  
  /* Reset HSEON, CSSON and LLON bits */
  RCC->CR &= (uint32_t)0xFEF6FFFF;

  /* Reset HSEBYP bit */
  RCC->CR &= (uint32_t)0xFFFBFFFF;

  /* Reset LLSRC, LLXTPRE, LLMUL and USBPRE/OTGFSPRE bits */
  RCC->CFGR &= (uint32_t)0xFF80FFFF;

#ifdef STM32F10X_CL
  /* Reset LL2ON and LL3ON bits */
  RCC->CR &= (uint32_t)0xEBFFFFFF;

  /* Disable all interrupts and clear pending bits  */
  RCC->CIR = 0x00FF0000;

  /* Reset CFGR2 register */
  RCC->CFGR2 = 0x00000000;
#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
  /* Disable all interrupts and clear pending bits  */
  RCC->CIR = 0x009F0000;

  /* Reset CFGR2 register */
  RCC->CFGR2 = 0x00000000;      
#else
  /* Disable all interrupts and clear pending bits  */
  RCC->CIR = 0x009F0000;
#endif /* STM32F10X_CL */
    
#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
  #ifdef DATA_IN_ExtSRAM
    SystemInit_ExtMemCtl(); 
  #endif /* DATA_IN_ExtSRAM */
#endif 

  /* Configure the System clock frequency, HCLK, CLK2 and CLK1 prescalers */
  /* Configure the Flash Latency cycles and enable prefetch buffer */
  SetSysClock();

#ifdef VECT_TAB_SRAM
  SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
#else
  SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
#endif 
}
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2013-9-27
在线时间
0 小时
 楼主| 发表于 2013-10-9 15:45:58 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
恩,是的,原子老师,是在这里,我上边实现用HSI作为PLL的输入,PLL倍频后作为系统时钟,我那样配置,对么?我验证了一下,好像是对的哈?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-9 18:12:11 | 显示全部楼层
可以仿真看寄存器状态,就知道对没对了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-12 13:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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