Lågkristallen startar inte igång min STM32 - Felsökning
Re: Lågkristallen startar inte igång min STM32 - Felsökning
Oscillator design guide for STM8AF/AL/S, STM32 MCUs and MPUs
https://www.st.com/resource/en/applicat ... ronics.pdf
https://www.st.com/resource/en/applicat ... ronics.pdf
Re: Lågkristallen startar inte igång min STM32 - Felsökning
Du menar kretskortet? Ja, jordplan har jag.
Japp. Denna har jag läst. Jag hänvisade även till den i min första post.
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.
Re: Lågkristallen startar inte igång min STM32 - Felsökning
Läst och läst, du har ju uppenbarligen inte gjort som de skrivit.
Re: Lågkristallen startar inte igång min STM32 - Felsökning
Jag har lusläst denna manual riktigt noga.
Re: Lågkristallen startar inte igång min STM32 - Felsökning
Men du har ju INTE gjort på det sättet de rekommenderat.
Re: Lågkristallen startar inte igång min STM32 - Felsökning
Jag tycker det.
Vad mer kan dom begära?
Vad mer kan dom begära?
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Lågkristallen startar inte igång min STM32 - Felsökning
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?
Hur många lager är kortet?
Re: Lågkristallen startar inte igång min STM32 - Felsökning
Det är 4 lager på kortet.
Så guard-ring är mycket viktig när det kommer till att sätta dit en kristall?
Så guard-ring är mycket viktig när det kommer till att sätta dit en kristall?
Re: Lågkristallen startar inte igång min STM32 - Felsökning
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?
Men jordplanet saknas ju fortfarande, du har en lång jordledare från den ena kondensatorn, varför det?
Vilken lageruppbyggnad har du då?Det är 4 lager på kortet.
Re: Lågkristallen startar inte igång min STM32 - Felsökning
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.
Edit:
Efter att ha plockat ut batteriet så hamnar jag här. Positivt.
Edit:
Efter att ha plockat ut batteriet igen så startar inte LSE igen....
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;
}
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;
}
}
Efter att ha plockat ut batteriet igen så startar inte LSE igen....
Re: Lågkristallen startar inte igång min STM32 - Felsökning
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.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.
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.
- Klas-Kenny
- Inlägg: 11344
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: Lågkristallen startar inte igång min STM32 - Felsökning
Hur ser LSE-delarna ut i "Clock Configuration" i STM32Cube?
Re: Lågkristallen startar inte igång min STM32 - Felsökning
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å.
Re: Lågkristallen startar inte igång min STM32 - Felsökning
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.
Jag bara markerar LSE och sedan är det klart. Detta är inte från mitt CubeMX.Klas-Kenny skrev: ↑17 november 2021, 07:14:15 Hur ser LSE-delarna ut i "Clock Configuration" i STM32Cube?
Enligt databladet så SKALL det inte användas något Rext för LSE. Bara HSE.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
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?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.
Re: Lågkristallen startar inte igång min STM32 - Felsökning
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?