Lågkristallen startar inte igång min STM32 - Felsökning

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Lågkristallen startar inte igång min STM32 - Felsökning

Inlägg av DanielM »

Jag tänker använda min LSE för att driva min RTC hos min STM32:a och då har jag satt dit en sådan.
Skärmklipp.PNG
För att ST rekommenderade den.
Skärmklipp.PNG
Jag har noterat att med denna kristall så ska man ha high mode aktiverat.
Skärmklipp.PNG
High mode:
Skärmklipp.PNG
Valt high mode i STM32CubeIDE:
Skärmklipp.PNG
Utplaceringen av min komponent.
Skärmklipp.PNG
Men när jag startar min STM32 när LSE är aktiverad, då hamnar jag här. Sök efter pilen <-------------------------------------------.
Då är frågan. Varför blir det så?

Kod: Markera allt

/*------------------------------ LSE Configuration -------------------------*/ 
  if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)
  {
    FlagStatus       pwrclkchanged = RESET;
    
    /* Check the parameters */
    assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState));

    /* Update LSE configuration in Backup Domain control register    */
    /* Requires to enable write access to Backup Domain of necessary */
    if(__HAL_RCC_PWR_IS_CLK_DISABLED())
    {
      __HAL_RCC_PWR_CLK_ENABLE();
      pwrclkchanged = SET;
    }
    
    if(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP))
    {
      /* Enable write access to Backup domain */
      SET_BIT(PWR->CR, PWR_CR_DBP);
      
      /* Wait for Backup domain Write protection disable */
      tickstart = HAL_GetTick();

      while(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP))
      {
        if((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)
        {
          return HAL_TIMEOUT;
        }
      }
    }

    /* Set the new LSE configuration -----------------------------------------*/
    __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState);
    /* Check the LSE State */
    if(RCC_OscInitStruct->LSEState != RCC_LSE_OFF)
    {
      /* Get Start Tick */
      tickstart = HAL_GetTick();
      
      /* Wait till LSE is ready */  
      while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET)
      {
        if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE)
        {
          return HAL_TIMEOUT; <---------------------------------------------HÄR hamnar den tillslut.
        }
      }
    }
    else
    {
      /* Get Start Tick */
      tickstart = HAL_GetTick();
      
      /* Wait till LSE is disabled */  
      while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET)
      {
        if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE)
        {
          return HAL_TIMEOUT;
        }
      }
    }
__HAL_RCC_GET_FLAG() funktionen ser ut så här. Omöjligt att förstå vad dom har gjort.

Kod: Markera allt

(((((((uint8_t)((((uint8_t)2U) << 5U) | ((uint8_t)__builtin_clz(__RBIT((0x1UL << (1U)))))))) >> 5U) == ((uint8_t)1U))  ? ((RCC_TypeDef *) ((0x40000000UL + 0x00020000UL) + 0x00001000UL))->CR   : \
                                       (((((uint8_t)((((uint8_t)2U) << 5U) | ((uint8_t)__builtin_clz(__RBIT((0x1UL << (1U)))))))) >> 5U) == ((uint8_t)2U))? ((RCC_TypeDef *) ((0x40000000UL + 0x00020000UL) + 0x00001000UL))->BDCR : \
                                       (((((uint8_t)((((uint8_t)2U) << 5U) | ((uint8_t)__builtin_clz(__RBIT((0x1UL << (1U)))))))) >> 5U) == ((uint8_t)4U))? ((RCC_TypeDef *) ((0x40000000UL + 0x00020000UL) + 0x00001000UL))->CFGR : \
                                                                              ((RCC_TypeDef *) ((0x40000000UL + 0x00020000UL) + 0x00001000UL))->CSR) & (1U << ((((uint8_t)((((uint8_t)2U) << 5U) | ((uint8_t)__builtin_clz(__RBIT((0x1UL << (1U)))))))) & ((uint8_t)0x1FU))))
Kondensatorerna jag använder är följande:
  • 15 pF - Fungerade inte
  • 4.7 pF - Fungerade inte
Skärmklipp.PNG
När jag mäter med mitt oscilloskop så får jag ingen fyrkantsvåg. Bara ett rak streck som förflyttar sig uppåt när den får kontakt med LSE. Det får jag inte heller på HSE (Externa high speed crystal). Den är ju på 8 MHz. Den fungerar utmärkt. Troligtvis sär mitt oscilloskop fö gammalt för att mäta frekvenser, trots att den har uS som valbar uppdateringsfrekvens.


Vad finns det för slutsatser här?
  • Kristallen är sönder? Jag kan ju mäta spänningen på kristallen (GND och valfri pinne PC14 eller PC15 för LSE). Dock ingen fyrkantsvåg, bara rakt streck.
  • Felaktiga kondensatorer? Jag har införskaffat en samling nu. Allt från 1.0 pF till 22 nF.
  • Bug i koden? Jag tänkte om koden allmänt är för snäv?
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Senast redigerad av DanielM 16 november 2021, 19:33:03, redigerad totalt 1 gång.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45176
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Lågkristallen startar inte igång min STM32 - Felsökning

Inlägg av TomasL »

Answer
In a commonly used approximation, the crystal capacitors rely on three parameters:
The Cl which is the crystal equivalent capacitance the crystal must see to operate at its typical frequency. This value is given by the crystal manufacturer.
The Ci which is the internal capacitance of the MCU oscillator (refer to “40. Electrical Characteristics” of the respective device datasheet).
The Cs which is the stray capacitance of the circuit board. The Cs is usually negligible as crystal is connected very close to the MCU.
C1 and C2 being the capacitance on XIN and XOUT pins, the calculation formula is:
Cl = (C1 * C2) / (C1 + C2) + Ci + Cs (1)

If we consider C1 = C2 = C and Cs negligible:
(1) => Cl = C / 2 + Ci (2)
(2) => C = 2(Cl - Ci)
Vilket betyder att du bör ha runt 25pF kondensatorer.

Sedan skall man vara försiktig med att mäta med ett skope på kristaller, då proben kapasitans mycket väl kan sparka igång kristallen.
Man skall alltid använda aktiva prober med 1pF kapacitans eller liknande, och mäta på rätt processorpinne.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Lågkristallen startar inte igång min STM32 - Felsökning

Inlägg av DanielM »

Oj. Detta är jag mycket osäker på om jag har sådana prober. Men jag testar att löda dit en 22 pF.

2(12.5 pF - 1.3 pF) = 22.4 pF. Jag antar att Ci är shuntkapacitansen.

Då tror jag väljer 22 pF
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45176
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Lågkristallen startar inte igång min STM32 - Felsökning

Inlägg av TomasL »

he Ci which is the internal capacitance of the MCU oscillator
Du får titta i databladet på din MCU
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Lågkristallen startar inte igång min STM32 - Felsökning

Inlägg av DanielM »

Oj, läste fel.

Det står inte vad Ci ska vara. Men det står iallafall att jag ska använda en kristall som har inbyggda kondensatorer.
Hmm...jag valde ju en kristall som är rekommenderad av ST. Alltså betyder det bara att jag behöver bara ta bort mina kondensatorer?
Skärmklipp.PNG
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45176
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Lågkristallen startar inte igång min STM32 - Felsökning

Inlägg av TomasL »

Nej, du har inte använt en resonator, utan en ren kristall, utan kondingar
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Lågkristallen startar inte igång min STM32 - Felsökning

Inlägg av DanielM »

Jag får inget mer information än detta. Här säger dom att Cs = 5 pF eller 10 pF.
Skärmklipp.PNG
Skärmklipp.PNG
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45176
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Lågkristallen startar inte igång min STM32 - Felsökning

Inlägg av TomasL »

Ci hittar du i databladet, i sektionen för elektriska data.

Ofta är det så att man får labba sig fram till lämpliga värden.
Användarvisningsbild
rvl
Inlägg: 5721
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: Lågkristallen startar inte igång min STM32 - Felsökning

Inlägg av rvl »

Vad sa de gula varningstrianglarna i CubeIDE?
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Lågkristallen startar inte igång min STM32 - Felsökning

Inlägg av DanielM »

TomasL skrev: 16 november 2021, 20:17:04 Ci hittar du i databladet, i sektionen för elektriska data.

Ofta är det så att man får labba sig fram till lämpliga värden.
Ja. Här. 5 pF.

Alltså blir mina externa kondensatorer C = 2*(12.5 - 5) = 15 pF. Vilket jag hade från början, men fungerade inte.
Skärmklipp.PNG
rvl skrev: 16 november 2021, 20:21:23 Vad sa de gula varningstrianglarna i CubeIDE?
Dom markerar bara att det finns begräsningar i vad jag kan göra just där. Mycket smidigt. Jag ser vad min processor använder för enheter och vilka enheter som är upptagna om jag väljer specifika enheter.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
ghu
Inlägg: 585
Blev medlem: 6 juni 2010, 14:28:18

Re: Lågkristallen startar inte igång min STM32 - Felsökning

Inlägg av ghu »

Dina problem kan bero på dålig layout på ditt kretskort. 32 kHz är ju en väldigt låg frekvens som inte är särskilt känslig för lite kass layout men om layouten är mycket dålig så fungerar inte ens kristaller vid denna låga frekvens.

Om det är kristallen med kondensatorer runt som är ritad i layouten av kretskortet i ditt tidigare inlägg så verkar kondensatorernas inkoppling till GND på processorn vara katastrofal. Den ena verkar inte inkopplad alls och den andra med mycket lång ledningsbana till GND på processorn
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Lågkristallen startar inte igång min STM32 - Felsökning

Inlägg av DanielM »

ghu skrev: 16 november 2021, 20:33:16 Om det är kristallen med kondensatorer runt som är ritad i layouten av kretskortet i ditt tidigare inlägg så verkar kondensatorernas inkoppling till GND på processorn vara katastrofal. Den ena verkar inte inkopplad alls och den andra med mycket lång ledningsbana till GND på processorn
Dom har anslutning till GND. Det har jag bekräftat.
Ja, det kan vara kristallens placering som är problemet då varken dessa fungerar.
  • 4.7 pF
  • 15 pF
  • 22 pF
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45176
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Lågkristallen startar inte igång min STM32 - Felsökning

Inlägg av TomasL »

Har du jordplan under och runt kristallen, det syns liksom inte.
Längden på en ledare till jordplanet bör inte vara längre än någon mm, typ.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Lågkristallen startar inte igång min STM32 - Felsökning

Inlägg av DanielM »

Det är en runt liten prick under kristallen. Men jag vet inte om det är ett jordplan.
Skärmklipp.PNG
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45176
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Lågkristallen startar inte igång min STM32 - Felsökning

Inlägg av TomasL »

Jordplan har du på mönsterkortet, ett eller flera stycken.
Skriv svar