http://stm32f4-discovery.com/2015/01/properly-set-clock-speed-stm32f4xx-devices/

I see that you have problems with your devices when you don’t know even

(and you don’t even ask) on which speed your device is actually running.

Speed of your device depends on PLL settings or clock source you have selected for system core clock.

In most cases system core clock’s source is PLL output.

To get proper value, you check ALWAYS first these settings when something is not working.

Because I’m tired of questions that something is not working but then your MCU clock is totally failed.

STM32F4xx series MCUs have ALL 16MHz RC oscillator inside which can be used for PLL input clock.

It is not so accurate but it works just well if you don’t have connected external clock.

External clock is probably your crystal you have connected.

In this example we will talk in case that you have external crystal connected.

If your clock is not properly set, then you have problems with everything.

USB not working, USART baudrate failed, timer’s clock not OK…

This content has only sense, if you use Standard Peripheral Drivers and not HAL drivers from ST!

To be able to get your MCU to full speed, you have to do the following changes:

  • In file stm32F4xx.h set HSE_VALUE to match your crystal frequency (In Hz)

    • In case of any STM32F4xx Discovery board, select HSE_VALUE =8000000
    • In other case, you can set this to your crystal
    • If you have an option for global defines in your compiler, then addHSE_VALUE=8000000 to your defines.
    • If you don’t use external crystal or clock, then you don’t need to change anything
  • In file system_stm32f4xx.c set PLL_M value to match your crystal frequency (In MHz)
    • In case of any STM32F4xx Discovery board, select PLL_M = 8
    • This will divide input clock with 8 to get 1MHz on the input for PLL
    • If you don’t use external clock, then this value MUST be set to 16,
      because internal RC will be used for PLL
  • Now you can expect top speed for your device.

Some informations about Nucleo boards:

  • Nucleo boards don’t use external clock by default,
    but they have pins for adding external crystal.
  • In case you don’t add external crystal or clock, then set PLL_M value to 16
  • I have at home set F401 Nucleo board with external capacitor 8MHz
    (so PLL_M is set to 8 and HSE_VALUE set to 8000000) and
    F411 without external capacitor (PLL_M set to 16)

STM32F4xx Clocks

Proper PLL settings to get maximum clocks
(except of PLL_M parameter everything should be already defined in system_stm32f4xx.c file).

SystemCoreClock = (( INPUT_CLOCK (HSE_OR_HSI_IN_HZ) / PLL_M) * PLL_N) / PLL_P

STM32F4xx MAX CLOCK
in MHz
APB1 CLOCK
in MHz </2>
APB2 CLOCK
in MHz </1>
PLL_M PLL_N PLL_P
STM32F401 84 42 84 Must match input frequency in MHz (HSE or HSI) 336 4
STM32F411 100 50 100 Must match input frequency in MHz (HSE or HSI) 400 4
STM32F405 168 42 84 Must match input frequency in MHz (HSE or HSI) 336 2
STM32F407 168 42 84 Must match input frequency in MHz (HSE or HSI) 336 2
STM32F415 168 42 84 Must match input frequency in MHz (HSE or HSI) 336 2
STM32F417 168 42 84 Must match input frequency in MHz (HSE or HSI) 336 2
STM32F427 180 45 90 Must match input frequency in MHz (HSE or HSI) 360 2
STM32F429 180 45 90 Must match input frequency in MHz (HSE or HSI) 360 2
STM32F437 180 45 90 Must match input frequency in MHz (HSE or HSI) 360 2
STM32F439 180 45 90 Must match input frequency in MHz (HSE or HSI) 360 2
STM32F446 180 45 90 Must match input frequency in MHz (HSE or HSI) 360 2

Settings for STM32F4xx boards

This settings should be used in case of any STM32F4xx boards used.

STM32F4xx MAX CLOCK
in MHz
APB1 CLOCK
in MHz
APB2 CLOCK
in MHz
DEFAULT PLL
INPUT CLOCK
PLL_M PLL_N PLL_P
STM32F401
-Discovery
84 42 84 HSE 8MHz 8 336 4
STM32F411
-Discovery
100 50 100 HSE 8MHz 8 400 4
STM32F4
-Discovery
168 42 84 HSE 8MHz 8 336 2
STM32F429
-Discovery
180 45 90 HSE 8MHz 8 360 2
Nucleo F401 84 42 84 HSI 16MHz HSE_VALUE / 1MHz in case
of external crystal or 
16 in case of internal
HSI RC oscillator
336 4
Nucleo F411 100 50 100 HSI 16MHz HSE_VALUE / 1MHz in case
of external crystal or 
16 in case of internal
HSI RC oscillator
400 4

How to properly set clock speed for STM32F4xx devices的更多相关文章

  1. IPC,Hz(Hertz) and Clock Speed

    How do we measure a CPU's work? Whether it's fast or not depends on three factors: IPC, Hz, Clock sp ...

  2. STM32F4XX devices vector table for EWARM toolchain.

    ;/******************** (C) COPYRIGHT 2015 STMicroelectronics ******************** ;* File Name : sta ...

  3. stm32F4各个库文件的作用分析

    system_stm32f4xx.c:This file contains the system clock configuration for STM32F4xx devices. /** **** ...

  4. get back to the slower clock rate that allows it to save more power

    http://www.howtogeek.com/177790/why-you-cant-use-cpu-clock-speed-to-compare-computer-performance/ Wh ...

  5. simulation clock gen unit (推荐)

    //Normal Clock Block always begin:clk_blk clk <=; # clk<=; #; end //Improved Clock Block, impr ...

  6. RFID 读写器 Reader Writer Cloner

    RFID读写器的工作原理 RFID的数据采集以读写器为主导,RFID读写器是一种通过无线通信,实现对标签识别和内存数据的读出和写入操作的装置. 读写器又称为阅读器或读头(Reader).查询器(Int ...

  7. [ZZ] GTX 280 GPU architecture

    http://anandtech.com/show/2549 Now that NVIDIA’s has announced its newest GPU architecture (the GeFo ...

  8. Debugging JTAG Connectivity Problems

    2013-12-04 22:34:26 转自:http://processors.wiki.ti.com/index.php/Debugging_JTAG_Connectivity_Problems ...

  9. RFID Reader 线路图收集

    This 125 kHz RFID reader http://www.serasidis.gr/circuits/RFID_reader/125kHz_RFID_reader.htm http:// ...

随机推荐

  1. Hash::make与Hash::check

    调用方法之前要先去引用: use Illuminate\Support\Facades\Hash; 可以调用 Hash 门面上的 make 方法对存储密码进行哈希: $pwd = Hash::make ...

  2. 机器学习&深度学习视频资料汇总

      第一部分 基础语言   pandax视频教程 链接: https://pan.baidu.com/s/1pLqavVX 密码: fath python入门到精通 链接: https://pan.b ...

  3. JS种this的四种用法

    记住以下四点: 1.没调用对象就指向全局对象 2.有对象就指向调用对象 3.用new构造就指向新对象 4.通过 apply 或 call 或 bind 来改变 this 的所指. 1.测试一:没调用对 ...

  4. 2017/05/22 java 基础 随笔

    多态:一种事物多种形态 前提:1.子父类继承关系 2.方法复写.重写 3.父类引用指向子类对象 成员变量: package com.huawei; public class Demo1 { publi ...

  5. springcloud服务安全连接

    Spring Cloud可以增加HTTP Basic认证来增加服务连接的安全性. 1.加入security启动器 在maven配置文件中加入Spring Boot的security启动器. <d ...

  6. python基础-装饰器,生成器和迭代器

    学习内容 1.装饰器 2.生成器 3.迭代器 4.软件目录结构规范 一:装饰器(decorator) 1.装饰器定义:本质就是函数,用来装饰其他函数,即为其他函数添加附加功能. 2.装饰器原则:1)不 ...

  7. Batch Normalization 与 Caffe中的 相关layer

    在机器学习领域,通常假设训练数据与测试数据是同分布的,BatchNorm的作用就是深度神经网络训练过程中, 使得每层神经网络的输入保持同分布. 原因:随着深度神经网络层数的增加,训练越来越困难,收敛越 ...

  8. Servlet 3.0 新特性详解

    转自:http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/#major3 Servlet 是 Java EE 规范体系的重要组成部分,也是 ...

  9. c++中的前置声明

    引用google c++编码规范: When you include a header file you introduce a dependency that will cause your cod ...

  10. Ubuntu出现apt-get: Package has no installation candidate问题

    今天在安装 vim 的时候出现了 Package 'vim' has no installation candidate的问题 解决方法如下:# apt-get update# apt-get upg ...