STM32
直播中

马占云

7年用户 1537经验值
私信 关注
[问答]

如何对STM32f407系统定时器的时钟进行配置呢

如何对STM32f407系统定时器的时钟进行配置呢?
怎样去计算STM32f407系统定时器的时钟频率呢?

回帖(1)

寇昕

2021-11-24 14:34:37
  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配置部分
  
  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 实例验证演示
  
举报

更多回帖

发帖
×
20
完善资料,
赚取积分