zoukankan      html  css  js  c++  java
  • 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

    STM32F4xxMAX CLOCK
    in MHz
    APB1 CLOCK
    in MHz </2>
    APB2 CLOCK
    in MHz </1>
    PLL_MPLL_NPLL_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.

    STM32F4xxMAX CLOCK
    in MHz
    APB1 CLOCK
    in MHz
    APB2 CLOCK
    in MHz
    DEFAULT PLL
    INPUT CLOCK
    PLL_MPLL_NPLL_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
  • 相关阅读:
    javascript--Date
    PL/SQL的命令行窗口中执行脚本
    关于资产新增接口问题描述
    ORA-00600: internal error code, arguments: [kqludp2], [0x08D226918], [0], [], [], [], [], [], [], [], [], []
    Oracle 表空间扩容
    EBS 创建会计科目 小结
    EBS AP 创建会计科目失败
    EBS GL 日记账行“账户说明”段说明显示不全
    EBS 修改系统名称
    EBS 修改系统颜色
  • 原文地址:https://www.cnblogs.com/shangdawei/p/4686379.html
Copyright © 2011-2022 走看看