How to properly set clock speed for STM32F4xx devices
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的更多相关文章
- 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 ...
- STM32F4XX devices vector table for EWARM toolchain.
;/******************** (C) COPYRIGHT 2015 STMicroelectronics ******************** ;* File Name : sta ...
- stm32F4各个库文件的作用分析
system_stm32f4xx.c:This file contains the system clock configuration for STM32F4xx devices. /** **** ...
- 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 ...
- simulation clock gen unit (推荐)
//Normal Clock Block always begin:clk_blk clk <=; # clk<=; #; end //Improved Clock Block, impr ...
- RFID 读写器 Reader Writer Cloner
RFID读写器的工作原理 RFID的数据采集以读写器为主导,RFID读写器是一种通过无线通信,实现对标签识别和内存数据的读出和写入操作的装置. 读写器又称为阅读器或读头(Reader).查询器(Int ...
- [ZZ] GTX 280 GPU architecture
http://anandtech.com/show/2549 Now that NVIDIA’s has announced its newest GPU architecture (the GeFo ...
- Debugging JTAG Connectivity Problems
2013-12-04 22:34:26 转自:http://processors.wiki.ti.com/index.php/Debugging_JTAG_Connectivity_Problems ...
- RFID Reader 线路图收集
This 125 kHz RFID reader http://www.serasidis.gr/circuits/RFID_reader/125kHz_RFID_reader.htm http:// ...
随机推荐
- 游程编码(Run Length Code)
一.什么是游程编码 游程编码是一种比较简单的压缩算法,其基本思想是将重复且连续出现多次的字符使用(连续出现次数,某个字符)来描述. 比如一个字符串: AAAAABBBBCCC 使用游程编码可以将其描述 ...
- redhat7配置本地yum源
1.首先是要有一个iso文件,并将这个文件挂载到某个目录 挂载: 配置: 检验: yum list 现在你就可以在没有网的情况下,安装软件了~~~
- Expression Tree Build
The structure of Expression Tree is a binary tree to evaluate certain expressions.All leaves of the ...
- Linux 抽象网络设备简介
Linux 抽象网络设备简介 和磁盘设备类似,Linux 用户想要使用网络功能,不能通过直接操作硬件完成,而需要直接或间接的操作一个 Linux 为我们抽象出来的设备,既通用的 Linux 网络设备来 ...
- oracle赋某表truncate权限
一.ins用户下创建存储过程 二.mobapp用户下赋权:执行存储过程的权限 三.odso_insert用户下执行存储过程,即可truncate表 查看odso_insert用户拥有的权限 一.ins ...
- Project Euler Problem3
Largest prime factor Problem 3 The prime factors of 13195 are 5, 7, 13 and 29. What is the largest p ...
- vs 连接过程报错 dll 分析 ------- DLL动态链接库
1:编译成功,说明代码没有问题了2:连接报错,说明 exe 在查找dll 的入口地址过程,找不到合适的信息,这些信息保存在 dll 对应的 *.lib 文件里面 说明:exe如果生成成功了lib 这 ...
- selenium玩转svg操作
今天写脚本发现页面有svg结构,里面的元素无法定位,查找很多资料,然后就记录下来 初步尝试直接在页面中获取svg中包含元素的xpath,直接利用selenium方法访问,无法捕获到相关元素信息. SV ...
- JPA 菜鸟教程 15 继承-一个表-SINGLE_TABLE
原地址:http://blog.csdn.net/JE_GE/article/details/53678422 继承映射策略 一个类继承结构一个表的策略,最终只生成一个表,这是继承映射的默认策略. 举 ...
- 洛谷P3375KMP字符串匹配
传送门 #include <iostream> #include <cstdio> #include <cstring> #include <algorith ...