硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2833|回复: 6
收起左侧

[有问必答] 请问一下F107修改晶振问题

[复制链接]

18

主题

321

回帖

375

积分

高级会员

积分
375
发表于 2018-7-3 23:03:09 | 显示全部楼层 |阅读模式
STM32F107是互联型MCU,官方库里面默认的是外接25M晶振,然后通过25/5  x 8 /5  x9=72M
STM32F103直接8x9=72M

现在把F107的外部晶振修改为8M,修改了STM32F10X.h里面HSE为8M
  1. #if !defined  HSE_VALUE
  2. #ifdef STM32F10X_CL   
  3.   #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
  4. #else
  5.   #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
  6. #endif /* STM32F10X_CL */
  7. #endif /* HSE_VALUE */
复制代码
在sysytem_stm32f10X.c里面72M不做修改就能直接倍频到72M
  1. #if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
  2. /* #define SYSCLK_FREQ_HSE    HSE_VALUE */
  3. #define SYSCLK_FREQ_24MHz  24000000
  4. #else
  5. /* #define SYSCLK_FREQ_HSE    HSE_VALUE */
  6. /* #define SYSCLK_FREQ_24MHz  24000000 */
  7. /* #define SYSCLK_FREQ_36MHz  36000000 */
  8. /* #define SYSCLK_FREQ_48MHz  48000000 */
  9. /* #define SYSCLK_FREQ_56MHz  56000000 */
  10. #define SYSCLK_FREQ_72MHz  72000000
  11. #endif
复制代码
回复

使用道具 举报

18

主题

321

回帖

375

积分

高级会员

积分
375
 楼主| 发表于 2018-7-4 09:14:34 | 显示全部楼层
问题已解决,如我前面所说,如果只修改stm32f10x.h里面的HSE_VALUE是会导致主频率低于72M,如何修改参考3楼说明(感谢三楼)。
原来是25/5  x8=40   40/5=8   8x9=72
所以现在需要修改为 8/2 x10=40   40/5=8  8x9=72.
这样就好了。
问题已解决,感谢每个回复的人。
回复

使用道具 举报

18

主题

321

回帖

375

积分

高级会员

积分
375
 楼主| 发表于 2018-7-3 23:04:26 | 显示全部楼层
如果仅仅只过了上述修改,那么整体系统时钟会慢3.1倍吗?KEIL5.25里面好像已经不能通过已经仿真查看PRCC了。
回复

使用道具 举报

5

主题

18

回帖

33

积分

新手上路

积分
33
发表于 2018-7-4 00:11:20 | 显示全部楼层
我的是STM32F105RCT6 HSE是8M
我这样设置的分频系数实测SYSCLK是72M
QQ拼音截图20180704000924.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106649
QQ
发表于 2018-7-4 00:12:28 | 显示全部楼层
宏定义是不是没有选择,选上

QQ截图20180704001158.png
回复

使用道具 举报

18

主题

321

回帖

375

积分

高级会员

积分
375
 楼主| 发表于 2018-7-4 08:34:39 | 显示全部楼层
p00equal1 发表于 2018-7-4 00:11
我的是STM32F105RCT6 HSE是8M
我这样设置的分频系数实测SYSCLK是72M
我的设置是这样的,好像和你的有点不太一样
  1.     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;

  2. #ifdef STM32F10X_CL
  3.     /* Configure PLLs ------------------------------------------------------*/
  4.     /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */
  5.     /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */
  6.         
  7.     RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |
  8.                               RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);
  9.     RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |
  10.                              RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);
  11.   
  12.     /* Enable PLL2 */
  13.     RCC->CR |= RCC_CR_PLL2ON;
  14.     /* Wait till PLL2 is ready */
  15.     while((RCC->CR & RCC_CR_PLL2RDY) == 0)
  16.     {
  17.     }
复制代码
回复

使用道具 举报

18

主题

321

回帖

375

积分

高级会员

积分
375
 楼主| 发表于 2018-7-4 08:36:03 | 显示全部楼层
eric2013 发表于 2018-7-4 00:12
宏定义是不是没有选择,选上

创建工程模板时就加上宏定义了
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-27 21:26 , Processed in 0.202765 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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