stm32系统时钟配置问题

程序如下voidUseSysClkInit(void){/*将外设RCC寄存器重设为缺省值*/RCC_DeInit();/*使能内部高速晶振(HSI)*/RCC_HSIC... 程序如下
void UseSysClkInit(void)
{
/* 将外设 RCC 寄存器重设为缺省值 */
RCC_DeInit();

/* 使能内部高速晶振(HSI) */
RCC_HSICmd( ENABLE );

/* 检查 HSI 是否就绪 */
while( SET != RCC_GetFlagStatus( RCC_FLAG_HSIRDY ) );

/* HSI 振荡器时钟经2分频后作为 PLL 输入时钟 */
/* PLL 输入时钟 ×4 */
RCC_PLLConfig( RCC_PLLSource_HSI_Div2, RCC_PLLMul_4 );

/* 使能 PLL */
RCC_PLLCmd( ENABLE );

/* 检查 PLL 是否就绪 */
while( SET != RCC_GetFlagStatus( RCC_FLAG_PLLRDY ) );

/* 选择 PLL 作为系统时钟 */
RCC_SYSCLKConfig( RCC_SYSCLKSource_PLLCLK );

/* 判断 PLL 是否是系统时钟 */
while( 0x08 != RCC_GetSYSCLKSource() );
}
问题:PLL使能后,PLL一直无法准备就绪(即:跳不过while( SET != RCC_GetFlagStatus( RCC_FLAG_PLLRDY ) );循环)。
求大神解答。
互联型STM32F107系列的芯片
展开
 我来答
  • 你的回答被采纳后将获得:
  • 系统奖励15(财富值+成长值)+难题奖励30(财富值+成长值)+提问者悬赏10(财富值+成长值)
匿名用户
推荐于2017-11-26
展开全部
上面所给的程序是使用内部晶振的,而通常开发板都会使用外部晶振通过倍频使用。

内部晶振最高只能倍频到64MHz,而使用外部晶振能够倍频到72MHz。
如果板子上确实有外部晶振,请使用外部晶振!

使用外部晶振配置实例如下:
使用HSE时钟,程序设置时钟参数流程:
1、将RCC寄存器重新设置为默认值 RCC_DeInit;
2、打开外部高速时钟晶振HSE RCC_HSEConfig(RCC_HSE_ON);
3、等待外部高速时钟晶振工作 HSEStartUpStatus = RCC_WaitForHSEStartUp();
4、设置AHB时钟 RCC_HCLKConfig;
5、设置高速AHB时钟 RCC_PCLK2Config;
6、设置低速速AHB时钟 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()
更多追问追答
追问

你好,谢谢你的回答。

我用的是stm32互联网型的芯片。

通过PLL倍频HSI 振荡器时钟经2分频后的作为系统时钟。

我只是想测试下这样可不可以。但发现运行起来PLL无法就绪。

追答
为了继续研究这个问题,我决定亲自试验一下!

我用的是stm32f103zet6 ,实验的结果是,那段代码是可以用的。

void UseSysClkInit(void) 函数没有问题。

请检查硬件或其他方面的问题吧。 希望能够采纳。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式