Skip to main content
DMcGo.1
Associate II
September 16, 2020
Question

STM32H753 Clock Configuration: DIVP1 drop-down can not be set to 1.

  • September 16, 2020
  • 3 replies
  • 1176 views

I was trying out CubeMX for an STM32H753 part and noticed in the Clock Configuration tab that the DIVP1 drop-down can not be set to 1. Shouldn't this be possible?

 

According to the reference manual the DIVP1 field of the RCC_PLL1DIVR register should be possible to set to 0 meaning divide by 1. And in fact I have manually used this configuration in my project in order to get a 480 MHz output from PLL1 and it works fine to set this field to 0. Is this an oversight in CubeMX?

This topic has been closed for replies.

3 replies

TDK
Super User
September 16, 2020

I would argue the RM is ambiguous here. Certainly the number 1 is odd. Maybe it considers a divisor of 1 not an actual divisor and so it's allowed.

0693W000003RsPBQA0.png

"If you feel a post has answered your question, please click ""Accept as Solution""."
DMcGo.1
DMcGo.1Author
Associate II
September 16, 2020

I interpreted it as meaning 1 was allowed since otherwise in the table "0000000: ....." should state "Not allowed" like it is below for 0000010. I used this setting for two different parts now (STM32H743 and STM32H753) and it works fine. 12M crystal, multiplier 40 and divisor 1 to get a 480 MHz system clock (frequency verified). This is in a project not using CMSIS or CubeMX.

JMate.2
Associate
May 15, 2023

It appears that there is an inconsistency between the reference manual and ST's peripheral library. The STM32H753 reference manual does say that you are allowed to set DIVP to 0 for a divide value of 1:

0693W000003RsPBQA0.pngHowever, the comment to the function for setting the PLL1 P Coefficient says that this is not allowed on the STM32H753 family line. From stm32h7xx_ll_rcc.h:

/**
 * @brief Set PLL1 P Coefficient
 * @note This API shall be called only when PLL1 is disabled.
 * @rmtoll PLL1DIVR P1 LL_RCC_PLL1_SetP
 * @param P parameter can be a value between 2 (or 1*) and 128 (ODD division factor not supported)
 *
 * (*) : For stm32h72xxx and stm32h73xxx family lines.
 */
__STATIC_INLINE void LL_RCC_PLL1_SetP(uint32_t P)
{
 MODIFY_REG(RCC->PLL1DIVR, RCC_PLL1DIVR_P1, (P-1UL) << RCC_PLL1DIVR_P1_Pos);
}

Hopefully ST can provide some clarification.