STM32 - Fehler in CMSIS system_stm32l0xx.c

OP #4401410
Lesenswert?

Nachdem ich bei einem STM32L051 die HSI Frequenz heraufgesetzt hatte, 
rief ich SystemCoreClockUpdate() auf. Und meine Kontroll-LED spielte 
verrückt.

system_stm32l0xx.c Zeile 249:
1
    case 0x0C:  /* PLL used as system clock */
2
      (...)
3
      if (pllsource == 0x00)
4
      {
5
        /* HSI oscillator clock selected as PLL clock entry */
6
        SystemCoreClock = (((HSI_VALUE) * pllmul) / plldiv);    <--- Fehler
7
      }
8
      else
9
      {
10
        /* HSE selected as PLL clock entry */
11
        SystemCoreClock = (((HSE_VALUE) * pllmul) / plldiv);
12
      }
13
      break;
14
      (...)

HSI_VALUE ist mit einem define auf 16MHz gesetzt.
Es wird dabei nicht nachgefragt, ob der HSI nicht vielleicht mit 
HSI16DIVF gestartet worden war.

Korrekt sollte es sein:
1
uint32_t hsi_value = (RCC->CR & RCC_CR_HSIDIVEN) ? HSI_VALUE / 4 : HSI_VALUE;
2
SystemCoreClock = ((hsi_value * pllmul) / plldiv);

Muss vielleicht erwaehen, dass ich zum ersten Mal mit HSI arbeite.
Könnte also sein, dass dieser Fehler auch in anderen system_stm32xxx 
Files vorhanden ist.
#4401672
Lesenswert?

Bei mir sieht die so aus:
1
void SystemCoreClockUpdate() {
2
}

Und käme ich auf die Idee die Taktfrequenz im laufenden Betrieb zu 
ändern dann würde SystemCoreClock genau dort geupdatet wo es 
vernünftigerweise hingehört, nämlich dort wo der Takt geändert wurde und 
wo man nicht anhand der Registerwerte umständlich herumraten muß was man 
eben gerade explizit getan hat.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren