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

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Wihelm
Inlägg: 588
Blev medlem: 18 juni 2019, 17:30:19
Ort: Nybro

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

Inlägg av Wihelm »

Oscillator design guide for STM8AF/AL/S, STM32 MCUs and MPUs
https://www.st.com/resource/en/applicat ... ronics.pdf
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 »

Du menar kretskortet? Ja, jordplan har jag.
Wihelm skrev: 16 november 2021, 20:56:42 Oscillator design guide for STM8AF/AL/S, STM32 MCUs and MPUs
https://www.st.com/resource/en/applicat ... ronics.pdf

Japp. Denna har jag läst. Jag hänvisade även till den i min första post.
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 »

Läst och läst, du har ju uppenbarligen inte gjort som de skrivit.
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 har lusläst denna manual riktigt noga.
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 »

Men du har ju INTE gjort på det sättet de rekommenderat.
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 tycker det.
Vad mer kan dom begära?
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 »

Jag kan inte se något jordplan direkt under kristallen och oscilatorpinnarna, kan ej heller se någon Guard-ring runt kristallen.
Hur många lager är kortet?
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 4 lager på kortet.

Så guard-ring är mycket viktig när det kommer till att sätta dit en kristall?
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 »

Viktig och viktig, inte nödvändigtvis, det beror ju på övrig design, men den hjälper till.
Men jordplanet saknas ju fortfarande, du har en lång jordledare från den ena kondensatorn, varför det?
Det är 4 lager på kortet.
Vilken lageruppbyggnad har du då?
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 »

Vad menar du exakt med "jordplanet"? Som jag vet så har jag ett jordplan.

Jag har planen:
Signal/GND
GND
Vcc
GND/Signal

Edit:
Efter att ha varit med lödpennnan och rör lite lödningar på pinnarna för min uC så har jag lyckats komma förbi LSE starten.
Nu faller jag på RTC.

Kod: Markera allt

HAL_StatusTypeDef RTC_EnterInitMode(RTC_HandleTypeDef *hrtc)
{
  uint32_t tickstart = 0U;

  /* Check if the Initialization mode is set */
  if ((hrtc->Instance->ISR & RTC_ISR_INITF) == (uint32_t)RESET)
  {
    /* Set the Initialization mode */
    hrtc->Instance->ISR = (uint32_t)RTC_INIT_MASK;

    tickstart = HAL_GetTick();
    /* Wait till RTC is in INIT state and if Time out is reached exit */
    while ((hrtc->Instance->ISR & RTC_ISR_INITF) == (uint32_t)RESET)
    {
      if ((HAL_GetTick() - tickstart) > RTC_TIMEOUT_VALUE)
      {
        return HAL_TIMEOUT;
      }
    }
  }

  return HAL_OK;
}
Edit:

Efter att ha plockat ut batteriet så hamnar jag här. Positivt.

Kod: Markera allt

HAL_StatusTypeDef HAL_RTC_Init(RTC_HandleTypeDef *hrtc)
{
  /* Check the RTC peripheral state */
  if (hrtc == NULL)
  {
    return HAL_ERROR;
  }

  /* Check the parameters */
  assert_param(IS_RTC_ALL_INSTANCE(hrtc->Instance));
  assert_param(IS_RTC_HOUR_FORMAT(hrtc->Init.HourFormat));
  assert_param(IS_RTC_ASYNCH_PREDIV(hrtc->Init.AsynchPrediv));
  assert_param(IS_RTC_SYNCH_PREDIV(hrtc->Init.SynchPrediv));
  assert_param(IS_RTC_OUTPUT(hrtc->Init.OutPut));
  assert_param(IS_RTC_OUTPUT_POL(hrtc->Init.OutPutPolarity));
  assert_param(IS_RTC_OUTPUT_TYPE(hrtc->Init.OutPutType));

#if (USE_HAL_RTC_REGISTER_CALLBACKS == 1)
  if(hrtc->State == HAL_RTC_STATE_RESET)
  {
    /* Allocate lock resource and initialize it */
    hrtc->Lock = HAL_UNLOCKED;

    hrtc->AlarmAEventCallback          =  HAL_RTC_AlarmAEventCallback;        /* Legacy weak AlarmAEventCallback      */
    hrtc->AlarmBEventCallback          =  HAL_RTCEx_AlarmBEventCallback;      /* Legacy weak AlarmBEventCallback      */
    hrtc->TimeStampEventCallback       =  HAL_RTCEx_TimeStampEventCallback;   /* Legacy weak TimeStampEventCallback   */
    hrtc->WakeUpTimerEventCallback     =  HAL_RTCEx_WakeUpTimerEventCallback; /* Legacy weak WakeUpTimerEventCallback */
    hrtc->Tamper1EventCallback         =  HAL_RTCEx_Tamper1EventCallback;     /* Legacy weak Tamper1EventCallback     */
    hrtc->Tamper2EventCallback         =  HAL_RTCEx_Tamper2EventCallback;     /* Legacy weak Tamper2EventCallback     */
#if defined(RTC_TAMPER3_SUPPORT)
    hrtc->Tamper3EventCallback         =  HAL_RTCEx_Tamper3EventCallback;     /* Legacy weak Tamper3EventCallback     */
#endif /* RTC_TAMPER3_SUPPORT */

    if(hrtc->MspInitCallback == NULL)
    {
      hrtc->MspInitCallback = HAL_RTC_MspInit;
    }
    /* Init the low level hardware */
    hrtc->MspInitCallback(hrtc);

    if(hrtc->MspDeInitCallback == NULL)
    {
      hrtc->MspDeInitCallback = HAL_RTC_MspDeInit;
    }
  }
#else
  if (hrtc->State == HAL_RTC_STATE_RESET)
  {
    /* Allocate lock resource and initialize it */
    hrtc->Lock = HAL_UNLOCKED;

    /* Initialize RTC MSP */
    HAL_RTC_MspInit(hrtc);
  }
#endif /* (USE_HAL_RTC_REGISTER_CALLBACKS) */

  /* Set RTC state */
  hrtc->State = HAL_RTC_STATE_BUSY;

  /* Disable the write protection for RTC registers */
  __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);

  /* Set Initialization mode */
  if (RTC_EnterInitMode(hrtc) != HAL_OK)
  {
    /* Enable the write protection for RTC registers */
    __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);

    /* Set RTC state */
    hrtc->State = HAL_RTC_STATE_ERROR;

    return HAL_ERROR;
  }
  else
  {
    /* Clear RTC_CR FMT, OSEL and POL Bits */
    hrtc->Instance->CR &= ((uint32_t)~(RTC_CR_FMT | RTC_CR_OSEL | RTC_CR_POL));
    /* Set RTC_CR register */
    hrtc->Instance->CR |= (uint32_t)(hrtc->Init.HourFormat | hrtc->Init.OutPut | hrtc->Init.OutPutPolarity);

    /* Configure the RTC PRER */
    hrtc->Instance->PRER = (uint32_t)(hrtc->Init.SynchPrediv);
    hrtc->Instance->PRER |= (uint32_t)(hrtc->Init.AsynchPrediv << 16U);

    /* Exit Initialization mode */
    hrtc->Instance->ISR &= (uint32_t)~RTC_ISR_INIT;

    /* If  CR_BYPSHAD bit = 0, wait for synchro else this check is not needed */
    if ((hrtc->Instance->CR & RTC_CR_BYPSHAD) == RESET)
    {
      if (HAL_RTC_WaitForSynchro(hrtc) != HAL_OK)
      {
        /* Enable the write protection for RTC registers */
        __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);

        hrtc->State = HAL_RTC_STATE_ERROR;

        return HAL_ERROR;  <-------------------------------- Här hamnar jag nu
      }
    }

    hrtc->Instance->TAFCR &= (uint32_t)~RTC_TAFCR_ALARMOUTTYPE;
    hrtc->Instance->TAFCR |= (uint32_t)(hrtc->Init.OutPutType);

    /* Enable the write protection for RTC registers */
    __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);

    /* Set RTC state */
    hrtc->State = HAL_RTC_STATE_READY;

    return HAL_OK;
  }
}
Edit:

Efter att ha plockat ut batteriet igen så startar inte LSE igen.... :humm:
xxargs
Inlägg: 10183
Blev medlem: 23 september 2006, 14:28:27
Ort: Södertälje

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

Inlägg av xxargs »

DanielM skrev: 16 november 2021, 21:00:36 Du menar kretskortet? Ja, jordplan har jag.
Wihelm skrev: 16 november 2021, 20:56:42 Oscillator design guide for STM8AF/AL/S, STM32 MCUs and MPUs
https://www.st.com/resource/en/applicat ... ronics.pdf

Japp. Denna har jag läst. Jag hänvisade även till den i min första post.
Var är då platsen för Rext-motståndet på din PCB-utsnitt i början av tråden ??? dvs motståndet som sätts på oscillatorns utgång i serie mot kristallerna (med sina kapacitanser) - jag ser den inte, och det blir knepigt att sätta in sådan i efterhand om det visar sig att den krävs för att osccillatorn skall starta - och egentligen behöver du också plats för en extern Feedback motstånd om eventuell inbyggd i kristalldriven inte finns eller är av för hög värde.

En klockkristall 32768 Ohm kan behöva 200k - 1 MOhm som Rext i serie för att inte drivas för hårt då det typisk bara klarar 0.1 µWatt i last, medans det kanske räcker med 600 Ohm för en 16 MHz-kristall som klarar 500 µWatt

Nu har jag inte läst på för just din använda MCU och hur dess kristalldrivare ser ut och vilka moder den har - men Rext-motståndet kommer du med stor sannolikhet ändå behöva och det mesta som behövs för att räkna ut det (och kapacitanserna) verka stå i guiden - och första steget att ta hem databladet för använda kristall - det är den som styr hur resten skall dimensioneras!.

Rext har tillsammans med kapacitanserna på var sida av kristallen en lågpassverkande effekt som underlättar starten av oscillatorn och att det inte börja på en överton eller en spurre.

Den andra delen är feedback-motståndet som är kopplat mellan oscilatorns ut och in (eller redan finns inbyggd i kristalloscilator-drivern) - är den aktiverad i din MCU? - det är olika värden för olika kristaller och frekvensområden och kan vara så hög som 10 MOhm för en 32768 Hz klockkristall medan det nöjer sig med 1 MOhm för 16 MHz-kristall

En klassisk sätt att kolla om feedback-motståndet är aktivt är att sätta tummen över kristallens anslutning - går oscillatorn igång efter man tagit bort tummen igen så har man feedback-beskymmer (ingen alls) eller att kristall med kringkomponenter som Rext och C1 och C2 är dåligt matchade mot varandra.

---

Sedan är som andra redan skrivit att jordning och jordplan samt hålla ledarna mellan CPU och kristall så korta som möjligt av största vikt.
Användarvisningsbild
Klas-Kenny
Inlägg: 11292
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

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

Inlägg av Klas-Kenny »

Hur ser LSE-delarna ut i "Clock Configuration" i STM32Cube?
Janson1
Inlägg: 1338
Blev medlem: 1 december 2016, 09:06:02
Ort: Marks Kommun

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

Inlägg av Janson1 »

Jag tycker guidelinen för kristallens placering på bilden borde varit tvärtom. Dvs kristallen så nära kretsen som möjligt och ev kondensatorer utanför. Och så lika längd på benen som möjligt vilket dom gjort också.
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 »

Janson1 skrev: 17 november 2021, 08:03:47 Jag tycker guidelinen för kristallens placering på bilden borde varit tvärtom. Dvs kristallen så nära kretsen som möjligt och ev kondensatorer utanför. Och så lika längd på benen som möjligt vilket dom gjort också.
Jag har gjort exakt som de visar. Jag vet inte när saker och ting inte fungerar när det kommer till kristallen. Men det kommer säkertligen visa sig.
Klas-Kenny skrev: 17 november 2021, 07:14:15 Hur ser LSE-delarna ut i "Clock Configuration" i STM32Cube?
Jag bara markerar LSE och sedan är det klart. Detta är inte från mitt CubeMX.
Bild
xxargs skrev: 17 november 2021, 00:46:15 Var är då platsen för Rext-motståndet på din PCB-utsnitt i början av tråden ??? dvs motståndet som sätts på oscillatorns utgång i serie mot kristallerna (med sina kapacitanser) - jag ser den inte, och det blir knepigt att sätta in sådan i efterhand om det visar sig att den krävs för att osccillatorn skall starta - och egentligen behöver du också plats för en extern Feedback motstånd om eventuell inbyggd i kristalldriven inte finns eller är av för hög värde.

En klockkristall 32768 Ohm kan behöva 200k - 1 MOhm som Rext i serie för att inte drivas för hårt då det typisk bara klarar 0.1 µWatt i last, medans det kanske räcker med 600 Ohm för en 16 MHz-kristall som klarar 500 µWatt

Nu har jag inte läst på för just din använda MCU och hur dess kristalldrivare ser ut och vilka moder den har - men Rext-motståndet kommer du med stor sannolikhet ändå behöva och det mesta som behövs för att räkna ut det (och kapacitanserna) verka stå i guiden - och första steget att ta hem databladet för använda kristall - det är den som styr hur resten skall dimensioneras!.

Rext har tillsammans med kapacitanserna på var sida av kristallen en lågpassverkande effekt som underlättar starten av oscillatorn och att det inte börja på en överton eller en spurre.

Den andra delen är feedback-motståndet som är kopplat mellan oscilatorns ut och in (eller redan finns inbyggd i kristalloscilator-drivern) - är den aktiverad i din MCU? - det är olika värden för olika kristaller och frekvensområden och kan vara så hög som 10 MOhm för en 32768 Hz klockkristall medan det nöjer sig med 1 MOhm för 16 MHz-kristall
Enligt databladet så SKALL det inte användas något Rext för LSE. Bara HSE.


En klassisk sätt att kolla om feedback-motståndet är aktivt är att sätta tummen över kristallens anslutning - går oscillatorn igång efter man tagit bort tummen igen så har man feedback-beskymmer (ingen alls) eller att kristall med kringkomponenter som Rext och C1 och C2 är dåligt matchade mot varandra.

---

Sedan är som andra redan skrivit att jordning och jordplan samt hålla ledarna mellan CPU och kristall så korta som möjligt av största vikt.
Jag har ett oscilloskåp, men jag verkar inte kunna se någon fyrkatsvåg. Mest bara ett rakt streck. Jag mätte spänningen också på båda sidorna av min kristall. 0.9V och 0.7V. Är inte detta lite för lite?
Janson1
Inlägg: 1338
Blev medlem: 1 december 2016, 09:06:02
Ort: Marks Kommun

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

Inlägg av Janson1 »

Nu kan jag inte cube eller nästan nån annan IDE heller (Heter det så?) Men det finns ju en del olika kombinationer för just oscillatorn man kan prova rent mjukvarumässigt och se om det blir bättre. Rent spontant så låter det som lite för lite spänning på kristallen, jag har för mig det brukar var ungefär halva drivspänningen?
Skriv svar