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系列的芯片 展开
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(财富值+成长值)
1个回答
意法半导体(中国)投资有限公司
2023-06-12
展开全部
推荐于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()
内部晶振最高只能倍频到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()
更多追问追答
追答
为了继续研究这个问题,我决定亲自试验一下!
我用的是stm32f103zet6 ,实验的结果是,那段代码是可以用的。
void UseSysClkInit(void) 函数没有问题。
请检查硬件或其他方面的问题吧。 希望能够采纳。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询