STM32L0 Systick bleibt stehen (erhöht sich nicht)

OP #4885896
Lesenswert?

Guten Tag zusammen,
ich bin vor kurzem geschaeftlich von AVR auf ARM (STM32L0xx) umgstiegen.
Im Moment bin ich dabei mit dem STM32L053 Discovery Board ein LoRa Modem 
(SX1272) mithilfe der LMic Library von IBM zum laufen zu bekommen.
Entschieden wurde, dass moeglichst viel von den STMCube HAL Libraries 
benutzt werden sollen.

Die Base habe ich mir von Cube MX generieren lassen und habe nun die von 
der LMic benoetigten Funktionen implementiert.
Das Programm bricht allerdings bei Aufruf von HAL_Delay() ab, ergo das 
Delay wird niemals wieder verlassen.

Bei einem Printf in die while Schleife der Delay Funktion zeigt sich, 
dass der Systick (angeblich) haengen bleibt und sich nicht weiter 
erhoeht. Wenn ich jedoch den Systick bei HAL_IncTick() auslese wird er 
weiter erhoeht so wie es sein sollte. Da ich noch relativ neu auf dem 
ARM/STM32 Gebiet bin, weiss ich im Moment nicht weiter und hoffe mir 
kann da jemand helfen.

Die Funktionen sind vom Cube MX generiert worden und lediglich durch die 
printf's von mir ergaenzt worden.

__weak void HAL_Delay(__IO uint32_t Delay)
{
  uint32_t tickstart = 0U;
  tickstart = HAL_GetTick();
  DBG_PRINTF("Tickstart: %u - DELAY: %u\n", tickstart, Delay);
  while((HAL_GetTick() - tickstart) < Delay)
  {
    DBG_PRINTF("SYSTICK: %u\n", HAL_GetTick());
  }
  DBG_PRINTF("DELAY finished: %u\n", uwTick);
}

__weak void HAL_IncTick(void)
{
  uwTick++;
  DBG_PRINTF("Tick: %u\n", uwTick);
}

Vielen Dank schonmal,
Mfg Bob
#4886026
Lesenswert?

Habe mal in eines meiner aktuellen Codes geguckt (STM32L051):
1
//=================================
2
// Init
3
//=================================
4
void MyApp::Init( void ) {
5
    FLASH->ACR   |= FLASH_ACR_PRE_READ;
6
    //FLASH->ACR   |= FLASH_ACR_PRFTEN;     // enable prefetch
7

8
    RCC->APB1ENR |= RCC_APB1ENR_PWREN;     // Enable Periph. Power
9
    RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;  // System configuration controller clock enabled
10
    SysTick_Config(2097); // starts SysTick with 1ms and enables SysTick-interrupt
11
    NVIC_SetPriority(SysTick_IRQn, INT_PRIORITY_SYSTICK);
12
...
Gast #4886058
Lesenswert?

Robert K. schrieb:

> Entschieden wurde, dass moeglichst viel von den STMCube HAL Libraries
> benutzt werden sollen.

Das macht man als Hobbyist dann, wenn man keine Ahnung von Controllern 
hat und auch keine haben will, sondern nur im Arduino-Stil irgendwas mal 
eben schnell zurechthacken will.

Wie "toll" diese Idee geschäftlich ist, merkst Du gerade daran, daß Du 
bereits an Trivialitäten mit dem Systick hängst.

Aber Hauptsache die Zeit für vernünftige Einarbeitung und Lektüre des 
reference manuals gespart. Das wird noch richtig lustig, wenn Du 
irgendwas Ernsthafteres debuggen sollst und weder einen Plan vom 
Controller hast noch durch die verbuggte und chaotische ST-Software 
durchsteigst...

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