STM32L1xx HAL_GPIO_Init-Problem

Ich entwickle eine Anwendung für ein Universitätsprojekt auf meinem STM32L1DISCO-Board mit der STM32L152RC-MCU.

Ich habe die Pins konfiguriert und den Init-Code über STM32CubeMX generiert. Als IDE verwende ich Atollic TrueSTUDIO.

Das Problem ist, dass der generierte Init-Code auf meiner MCU nicht ausgeführt werden kann. Nachdem ich viel Zeit mit dem Debuggen verbracht hatte, stellte ich fest, dass das Problem im Code diese eine Zeile ist, die die HAL gpio-Bibliothek verwendet:

HAL_GPIO_Init(IDD_CNT_EN_GPIO_Port, &GPIO_InitStruct);

Auch wenn der vorhergehende Code korrekt ist,

  GPIO_InitTypeDef GPIO_InitStruct;

  /* GPIO Ports Clock Enable */

 __HAL_RCC_GPIOC_CLK_ENABLE();

  __HAL_RCC_GPIOA_CLK_ENABLE();

__HAL_RCC_GPIOB_CLK_ENABLE();

  /*Configure GPIO pin Output Level */

HAL_GPIO_WritePin(IDD_CNT_EN_GPIO_Port, IDD_CNT_EN_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin : IDD_CNT_EN_Pin */

GPIO_InitStruct.Pin = IDD_CNT_EN_Pin;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

Nachdem ich den Code während des Debuggens Zeile für Zeile durchlaufen hatte, stellte ich fest, dass die HAL-GPIO-Init-Funktion nicht ausgeführt wird und stattdessen den Laufzeitfehler ausgibt: „Target not Responding, retrying...“.

Wenn ich die HAL GPIO Init-Zeile kommentiere, läuft das Programm ohne Probleme durch.

STM32CubeMX enthält die HAL-Bibliothek im Code. Oben drauf steht,

"stm32l1xx_hal.h" einschließen

Ich bin mir also nicht sicher, was das Problem verursacht, das ich sehe. Ich würde mich sehr über Ihre Hilfe freuen, da ich nicht weiß, was ich als nächstes versuchen soll.

Danke schön.

Sie sollten in den Code der Init-Funktion einsteigen und genauer prüfen, was falsch sein kann. Was ich auch einmal hatte, aber nicht direkt mit GPIO-Pins zu tun hatte, war, dass in STM32CubeMx, in Sys, Debug nicht auf Serial Wire eingestellt war. Dies führte dazu, dass während der Initialisierung plötzlich Debugging / Verbindungsabbruch auftauchte.
Hallo Michel, danke für den Kommentar. Ich habe Ihren Vorschlag ausprobiert und festgestellt, dass der Übeltäter dieser Codesatz in der HAL_GPIO_Init-Funktion ist: /* IO-Richtungsmodus konfigurieren (Eingabe, Ausgabe, alternativ oder analog) */ temp = GPIOx->MODER; CLEAR_BIT(temp, GPIO_MODER_MODER0 << (Position * 2)); SET_BIT(temp, (GPIO_Init->Modus & GPIO_MODE) << (Position * 2)); GPIOx->MODER = temp; Irgendeine Idee, warum diese Codezeilen für die MCU problematisch sein könnten?
Nein, tut mir leid, ich habe mich nicht so sehr damit befasst ... sind Sie sicher, dass Sie den richtigen Board-/CPU-Typ in CubeMx verwendet haben? Sie können auch einen anderen GPIO-Pin ausprobieren (vielleicht gibt es irgendwo einen Konflikt).
Welcher Pin ist das IDD_CNT_EN_GPIO? PA13 oder PA14 zufällig? Das hört sich so an, als würden Sie einen der SWD-Pins neu konfigurieren. Selbst ein Hardfault würde dieses Verhalten nicht verursachen.

Antworten (1)

IDD_CNT_ENist mit der integrierten Leistungsmessschaltung verbunden. Wenn es nicht richtig verwendet wird, wird es vorübergehend die V DD- Stromversorgung unterbrechen und die MCU zurücksetzen.

Schauen Sie sich die Schaltpläne in der Bedienungsanleitung an

Geben Sie hier die Bildbeschreibung ein

Die Einstellung IDD_CNT_ENauf Low-Ausgang startet den externen Timer U3. Nach einer Verzögerung von 150 ms wird der FET 1 in hochgeschaltet Q13und der 1-kΩ-Shunt-Widerstand wird nun in Reihe mit V DD geschaltet , um die Genauigkeit der Leistungsmessung zu verbessern. Die MCU sollte sich innerhalb von 150 ms nach dem Einstellen auf „Niedrig“ in den LOWPOWER-, STOP- oder STANDBY-Modus versetzen, in dem der Verbrauch deutlich unter 1 mA liegt, und ihn in weniger als 150 ms nach Eintreffen des Wecksignals auf PA0 wieder auf „Hoch“ setzen.U3U20R22IDD_CNT_EN

Danke Berendi, Jan und Michel. Sie alle haben das Problem auf den Punkt gebracht: Es war der IDD_CNT_EN-Pin-Konflikt mit der Einstellung als GPIO. Die Verwendung eines anderen Pins für GPIO funktioniert einwandfrei. Problem gelöst. Danke noch einmal!