OpenEdv-开源电子网

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

STM32F407VG使用内部时钟PLL不能超过48M?

[复制链接]

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2013-1-16
在线时间
4 小时
发表于 2016-1-14 14:38:24 | 显示全部楼层 |阅读模式
1金钱
一块STM32F407VG板子,使用外部8M晶振正常,使用407的16M HSI做锁相环的输入,锁相环输出只能最大输出48M,大于48M时调式进不去main()函数。手册中没有见到用HSI总线频率不能超过48M啊,哪位大侠用过HSI,请指点下。谢谢。部分代码如下:
system_stm32f4xx.c中,修改了下面这个函数,使用了HSI。
static void SetSysClock(void)
{
__IO uint32_t StartUpCounter = 0, HSIStatus = 0;


  /* Wait till HSE is ready and if Time out is reached exit */
  do
  {
    HSIStatus = RCC->CR & RCC_CR_HSIRDY;
    StartUpCounter++;
  } while((HSIStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

  if ((RCC->CR & RCC_CR_HSIRDY) != RESET)
  {
    HSIStatus = (uint32_t)0x01;//我的代码下面没判断这个HSIStatus的值
  }
  else
  {
    HSIStatus = (uint32_t)0x00;
  }
       

     RCC->APB1ENR |= RCC_APB1ENR_PWREN;
     PWR->CR |= PWR_CR_VOS;//这个不知道干吗用,去掉我的程序也能运行
     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//选择系统时钟源为PLL
     RCC_HCLKConfig(RCC_SYSCLK_Div1);//选择HCLK时钟源
     RCC_PCLK1Config(RCC_HCLK_Div4);//选择AHB1总线时钟源
     RCC_PCLK2Config(RCC_HCLK_Div2);

     RCC_PLLConfig(RCC_PLLSource_HSI,8,192,8,8);//主要是这个函数配置,PLLM=8,PLLN=192,PLLP=8,这样算出的PLL输出是16M*192/(8*8)=48M,把PLLP设置成6,4,2的话程序不能运行到main函数中去
     RCC_PLLCmd(ENABLE);
     while(((RCC->CR )& (RCC_CR_PLLRDY)) == 0)
    {                       
    }
                  /* Configure Flash prefetch, Instruction cache, Data cache and wait state */
   FLASH->ACR = FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS;
                 /* Select the main PLL as system clock source */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
    RCC->CFGR |= RCC_CFGR_SW_PLL;

    /* Wait till the main PLL is used as system clock source */
    while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);
    {
    }

}




最佳答案

查看完整内容[请看2#楼]

今天试了下,可以168的。f4内部晶振16M,将PLL_M设为16,PLL_N 336,PLL_Q 7,PLL_P 2, 亲测可用
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2016-12-19
在线时间
30 小时
发表于 2016-1-14 14:38:25 | 显示全部楼层
今天试了下,可以168的。f4内部晶振16M,将PLL_M设为16,PLL_N 336,PLL_Q 7,PLL_P 2,
亲测可用
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-1-14 23:23:01 | 显示全部楼层
没遇到过.板子自己设计的?
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2013-1-16
在线时间
4 小时
 楼主| 发表于 2016-1-16 10:11:13 | 显示全部楼层
板子是自己设计的,请问有内部晶振,PLL能跑到168M的例子吗?
回复

使用道具 举报

16

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
374
金钱
374
注册时间
2016-4-4
在线时间
54 小时
发表于 2016-11-16 17:42:17 | 显示全部楼层
解决了楼主 我也遇到类似的问题
回复

使用道具 举报

43

主题

481

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1352
金钱
1352
注册时间
2014-12-24
在线时间
321 小时
发表于 2016-11-16 21:39:51 | 显示全部楼层
pll的工作频率范围内根本没有48m,最低都要192m,你这个48哪里来的
回复

使用道具 举报

16

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
374
金钱
374
注册时间
2016-4-4
在线时间
54 小时
发表于 2016-11-17 21:10:44 | 显示全部楼层
jinggx 发表于 2016-11-16 21:39
pll的工作频率范围内根本没有48m,最低都要192m,你这个48哪里来的

请问大神成功配置过吗 我都是死在了pll时钟等待上了
回复

使用道具 举报

43

主题

481

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1352
金钱
1352
注册时间
2014-12-24
在线时间
321 小时
发表于 2016-11-17 21:59:04 | 显示全部楼层
qq997758497 发表于 2016-11-17 21:10
请问大神成功配置过吗 我都是死在了pll时钟等待上了

论坛开发板的例子程序,都有啊,库函数,寄存器的,都有啊
回复

使用道具 举报

16

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
374
金钱
374
注册时间
2016-4-4
在线时间
54 小时
发表于 2016-11-17 22:34:29 | 显示全部楼层
jinggx 发表于 2016-11-17 21:59
论坛开发板的例子程序,都有啊,库函数,寄存器的,都有啊

例程用的都是外部晶振把 刚才找到问题了 卡死是因为没有焊上外部晶振而等待的是外部的就绪 改成等待内部的就好了 算是找到问题了把
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 07:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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