STM32f407系统定时器时钟配置、计算

STM32f407系统定时器时钟配置、计算

1. 外部晶振的选择

##确定自己单片机的外部晶振
系统默认配置为25M,即打开官方库文件参数HSE Frequency(Hz) 一般为25000000

 HSE Frequency(Hz)                      | 25000000
----------

 #if !defined  (HSE_VALUE) 
  #define HSE_VALUE    ((uint32_t)25000000) /*!<Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
... ... ...

我自己的单片机外部晶振为8M,将参数改为8000000

2. 系统时钟确定

2.1 改完之后参照stm32f4时钟树

时钟树

2.2 首先明确自己的系统总时钟

找到自己程序PLL Parameters部分(工程system_stm32f4xx.c)

/************************* PLL Parameters***************************/
/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
//锁相环压腔振荡器时钟
//PLL_VCO =(HSE_VALUE/PLL_M)* PLL_N=8/ 8* 336 = 336MHz
#define PLL_M      8
#define PLL_N      336

/* SYSCLK = PLL_VCO / PLL_P */
// 系统时钟SYSCLK = PLL_VCO / PLL_P=336 / 2 = 168MHz 
#define PLL_P      2

/* USB OTG FS, SDIO and RNG Clock =  PLL_VCO / PLLQ */
//USB,SD卡时钟= PLL_VCO / PLLQ=336 / 7 = 48MHz
#define PLL_Q      7

/*******************************************************************/

3. 计算出自己系统时钟为168M

##3.1 对应时钟线
这里需要计算各个定时器分配所得的计数时钟频率
在这里插入图片描述

3.2 找到APB1,APB2配置部分

APB1

3.3 程序位置

    /* Select regulator voltage output Scale 1 mode, System frequency up to 168 MHz */
    RCC->APB1ENR |= RCC_APB1ENR_PWREN;
    PWR->CR |= PWR_CR_VOS;

    /* HCLK = SYSCLK / 1*/
    RCC->CFGR |= RCC_CFGR_HPRE_DIV1;
      
    /* PCLK2 = HCLK / 2*/
    RCC->CFGR |= RCC_CFGR_PPRE2_DIV2;
    
    /* PCLK1 = HCLK / 4*/
    RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;

    /* Configure the main PLL */
    RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) |
                   (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24);

3.4 位置计算

计算位置
15:13位为 010 ----->AHB2 不分频
12:10位为 101 ----->AHB1 4分频

定时器时钟

e. 原则“非1即2”

明确APB1得到时钟84M,APB2计数时钟频率168M

4. 系统默认情况:

4.1 定时周期、频率的计算

/***************************************************
 *默认配置:外部时钟启动失败,系统会自动使用内部时钟
 *HCLK = SYSCLK / 1 = 168MHz ,AHB×总线时钟
 *PCLK2 = HCLK / 2 = 84MHz
 *PCLK1 = HCLK / 4 = 42MHz
 * arr:自动重装载值
 * psc:时钟预分频树
 * 定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.
 * Ft=定时器工作频率,单位:Mhz
*****************************************************/

4.2 实例验证演示

实例演示

STM32F407中,时钟系统是非常重要的,它提供了系统和外设的时钟信号。系统时钟(SYSCLK)是所有外设时钟的源头,它通过分频来提供给各个外设。在STM32F407中,有几种不同的时钟源可供选择,包括HSI(高速内部时钟)、HSE(高速外部时钟)、LSI(低速内部时钟)和LSE(低速外部时钟)。其中,HSI和HSE可以作为PLL(锁相环)的输入,而PLL则可以提供两个不同的输出时钟。\[1\]\[3\] 在STM32F407中,时钟配置是通过system_stm32f4xx.c文件来实现的。这个文件包含了整个系统时钟配置信息,可以通过ST官方提供的时钟配置工具stm32f4xx_Clock_Configuration_V1.0.0.xls来生成该文件。这个工具提供了一个图形化界面,可以方便地配置各个时钟寄存器的值。\[2\] 总结起来,STM32F407时钟系统是由HSI、HSE、LSI和LSE等时钟源以及PLL来提供时钟信号的。通过合理配置这些时钟源和PLL的参数,可以满足不同外设的时钟需求。 #### 引用[.reference_title] - *1* *2* [STM32F407时钟配置](https://blog.csdn.net/husterxmh/article/details/52372403)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [stm32f407探索者开发板(十)——时钟系统精讲](https://blog.csdn.net/m0_52592798/article/details/128884650)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值