cancel
Showing results for 
Search instead for 
Did you mean: 

STM32L552 Nucleo board: HSE error

krook
Associate II

Hi, I am trying to program a STM32L552ZEQ to use HSE instead of the default clock, but I am doing something wrong.

I attach the reference manual, as well as the user manual for my specific board. In the user manual, on page 24, it is stated that there is a HSE with 16 MHz clock frequency. I try to enable this by setting the HSEBYP and HSEON bits in `RCC->CR`, like so

```

RCC->CR |= RCC_CR_HSEBYP_Msk | RCC_CR_HSEON_Msk;
while(!(RCC->CR & RCC_CR_HSERDY_Msk));

```

Using GDB I observe the change to the register value happening as expected. After setting it, I am waiting for the hardware to set the HSERDY bit, indicating that everything went OK. But this bit is never set. I never seem to get out of this while-loop. I observe the bit not being set using e.g. GDB.

I looked at the reference manual and saw that MCO is fed to OSC_IN, which seems correct.

diagr.png

I then thought that it appears as if the MCO can be connected to several different sources, one of which being the HSE. I look at the reference manual, and find this

Screenshot from 2024-10-10 16-02-41.pngScreenshot from 2024-10-10 16-02-28.png

I modify my code to configure MCOSEL to have the value `0100`, to indicate that we should output the HSE to the MCO pin. I am using the CMSIS header files to access the correct addresses, and it seems as if the define for MCOSEL_2 carries the right value (4).

```

// the define is in the CMSIS header-file, but I paste it here for clarity

#define RCC_CFGR_MCOSEL_2 (0x4UL << RCC_CFGR_MCOSEL_Pos) /*!< 0x04000000 */
RCC->CFGR |= RCC_CFGR_MCOSEL_2;
```
This seems to make no difference at all, and I am now a bit unsure of how to progress.
 
Thanks in advance for any tips that might make me able to figure this out.
1 ACCEPTED SOLUTION

Accepted Solutions
Chris21
Senior

It looks like you have done the correct things with the hardware and software.

I wonder about R19 on the ST-LINK:

Chris21_0-1728661162724.png

It looks like that would need to be present.

 

View solution in original post

21 REPLIES 21
krook
Associate II

I should add that these clock configurations are the first things that are happening inside my main function.

Andrew Neil
Evangelist III

I suggest that you start by doing this with CubeMX.

Even if you don't want to go forward with CubeMX, it should give you a starting point to work from ...

Andrew Neil
Evangelist III

@krook wrote:

In the user manual, on page 24, it is stated that there is a HSE with 16 MHz clock frequency. .


It also states that, by default, this is not implemented:

AndrewNeil_0-1728569939656.png

AndrewNeil_1-1728570015518.png

 

So have you made the necessary hardware changes?

I am not sure how to do it with CubeMX either, and I've failed to install CubeMX when I've tried. I'd rather understand why my code doesn't work. I don't think there is a lot missing, I've just misunderstood some minor detail.

I am not sure that I have. I've ever made modifications like this, where can I read more about that? I thought I could implement it in software.

I see now that there seems to be no HSE configuration available to me without modifying the board. What do you think I can do to get a more accurate and performant clock than the default MSI RC Oscillator 4 MHz?

Chris21
Senior

I would connect the solder bridges to use the 8 MHz MCO from the ST-LINK.

I think the default hardware configuration should be that the solder bridges are set for the 8MHz MCO from the ST-Link?

Correction: UM says it isn't (credit @Chris21 )

Chris21_0-1728573444753.png