Guten Abend,
zum Ende der Woche, hab ich noch ein "kleines Problem", dessen Ursprung
ich nicht identifizieren kann.
Ich nutze einen STM32L476, an dessen Wakup-Pins mehrere Taster
angeschlossen sind. Die Taster sind mit einem externen Pullup
angeschlossen. Der Controller so solange im Shutdown-Mode" verbleiben,
bis ein Wakeup durch einen Taster ausgelöst wird, worauf später eine
Aktion (aktuell beschreiben eines Displays) durchgeführt werden soll.
Jedoch verhält sich der Controller eigenartig:
- Nach dem Programmieren des Controllers, wird der Inhalt des Displays 2
mal gewechselt.
- Nach Ab- und erneutem Anschalten der Spannungsversorgung startet der
Controller durchgehend neu und beschreibt dabei jedesmal das Display.
Das ganze klingt für mich nach irgendwelchen Eventflags, welche den
Reset und PowerOn betrifft, allerdings suche ich bisher vergeblich :(
Hier der betreffende Quellcode:
1 | void SystemClock_Config (void) {
|
2 | RCC_ClkInitTypeDef RCC_ClkInitStruct;
|
3 |
|
4 | /* activate the sysclock source */
|
5 | __HAL_RCC_HSI_ENABLE();
|
6 |
|
7 | /* Sysclock */
|
8 | RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2|RCC_CLOCKTYPE_HCLK;
|
9 | RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
|
10 | RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
11 | RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
|
12 | RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
13 | HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1);
|
14 | }
|
15 |
|
16 | int main(void)
|
17 | {
|
18 | /* clock initialization */
|
19 | SystemInit();
|
20 | SystemClock_Config();
|
21 | HAL_Init();
|
22 | debug_interface_init();
|
23 |
|
24 | __HAL_RCC_PWR_CLK_ENABLE();
|
25 |
|
26 | // Display wird hier beschrieben
|
27 |
|
28 | // Clear all interrupt flag
|
29 | __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF1);
|
30 | __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF2);
|
31 | __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF4);
|
32 |
|
33 | __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
|
34 | __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
|
35 |
|
36 | RCC->CSR |= RCC_CSR_RMVF;
|
37 |
|
38 | HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1_LOW); // Button Center
|
39 | HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN2_LOW); // Button Left
|
40 | HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN4_LOW); // Button Right
|
41 |
|
42 | /* Set the RIS controller into deep sleep */
|
43 | HAL_PWREx_EnterSHUTDOWNMode();
|
44 |
|
45 | while(1) {}
|
46 | }
|
Ich nutze die "System Workbench" als Entwicklungsumgebung und die STM32
HAL von STM für den L4 in der Version 1.5.0.
Vielleicht hat einer von euch eine Idee, woran das liegen könnte.