野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9137|回复: 3

有关系统时钟及编译的问题

[复制链接]
发表于 2017-10-27 10:25:36 | 显示全部楼层 |阅读模式
本帖最后由 地主斌 于 2017-10-27 10:28 编辑

一、按照时钟树指示(图1),如果我采用内部时钟HSI经最大的倍频PLLMUL*16后得到的SYSCLK频率应该为:(8M/2)*16=64M,Cortex系统时钟=SYSCLK/8=8M。现在问题来了,这个8M的频率是不是就是我的程序里面int main()主程序中的运行频率呢?如果是的话,我就不能理解了,我以前stm8如果用内部HSI时的main()主程序运行频率都能达到16M,为什么stm32才有8M这么低呢?
5.png
二、我自己用了个stm32f105RB作为主控,按照火哥的视频例子打算程序配置一下跑个8M的Cortex系统时钟。1、我把Device的器件改为STM32F105RB。2、按照“RRC.h”文件的要求'#ifndef STM32F10X_CL ',在C/C++的Define把“STM32F10X_CL,”已添加;在编译时,如果我选择倍频为16时系统会报错。我试过只能将倍频改为9才不报错。请问一下是哪个位置没操作好呢?
1.png 4.png 2.png 3.png

STM32F105RB测试开发程序.rar

3.27 MB, 下载次数: 5

回复

使用道具 举报

发表于 2017-10-27 11:06:34 | 显示全部楼层
1、sysclk就是系统时钟,即 你说的 64M

2、sysclk / 8 或者不 分频是 给 systick 的时钟

3、有关时钟树更加具体的你参考 我们 书里面的 RCC 章节,或者看视频,我有详细的讲解。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-27 12:45:35 | 显示全部楼层
fire 发表于 2017-10-27 11:06
1、sysclk就是系统时钟,即 你说的 64M

2、sysclk / 8 或者不 分频是 给 systick 的时钟

#ifndef STM32F10X_CL
#define RCC_PLLMul_2                    ((uint32_t)0x00000000)
#define RCC_PLLMul_3                    ((uint32_t)0x00040000)
#define RCC_PLLMul_4                    ((uint32_t)0x00080000)
#define RCC_PLLMul_5                    ((uint32_t)0x000C0000)
#define RCC_PLLMul_6                    ((uint32_t)0x00100000)
#define RCC_PLLMul_7                    ((uint32_t)0x00140000)
#define RCC_PLLMul_8                    ((uint32_t)0x00180000)
#define RCC_PLLMul_9                    ((uint32_t)0x001C0000)
#define RCC_PLLMul_10                   ((uint32_t)0x00200000)
#define RCC_PLLMul_11                   ((uint32_t)0x00240000)
#define RCC_PLLMul_12                   ((uint32_t)0x00280000)
#define RCC_PLLMul_13                   ((uint32_t)0x002C0000)
#define RCC_PLLMul_14                   ((uint32_t)0x00300000)
#define RCC_PLLMul_15                   ((uint32_t)0x00340000)
#define RCC_PLLMul_16                   ((uint32_t)0x00380000)
#define IS_RCC_PLL_MUL(MUL) (((MUL) == RCC_PLLMul_2) || ((MUL) == RCC_PLLMul_3)   || \
                              ((MUL) == RCC_PLLMul_4) || ((MUL) == RCC_PLLMul_5)   || \
                              ((MUL) == RCC_PLLMul_6) || ((MUL) == RCC_PLLMul_7)   || \
                              ((MUL) == RCC_PLLMul_8) || ((MUL) == RCC_PLLMul_9)   || \
                              ((MUL) == RCC_PLLMul_10) || ((MUL) == RCC_PLLMul_11) || \
                              ((MUL) == RCC_PLLMul_12) || ((MUL) == RCC_PLLMul_13) || \
                              ((MUL) == RCC_PLLMul_14) || ((MUL) == RCC_PLLMul_15) || \
                              ((MUL) == RCC_PLLMul_16))
按上述代码的理解是不是如果定义了“#ifndef STM32F10X_CL”就不编译下面的程序,哪么理解为105、107的器件就不能实现9以上的倍频设置。他是芯片硬件限制这么高的倍频还是什么原因要写这段限制代码呢?
回复 支持 反对

使用道具 举报

发表于 2017-10-27 14:07:29 | 显示全部楼层
地主斌 发表于 2017-10-27 12:45
#ifndef STM32F10X_CL
#define RCC_PLLMul_2                    ((uint32_t)0x00000000)
#define RC ...

芯片限制
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-27 03:40 , Processed in 0.027825 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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