hp-freund schrieb:
> Bernd K. schrieb:
>> Daraus schließe ich daß der Support für STM32F4xx im GNU-ARM-Plugin
>> überhaupt noch nicht implementiert oder komplett ungetestet ist.
> Wenn Du danach:
>
1 | > #if defined(STM32F401xE)
|
2 | > void __attribute__ ((weak, alias ("Default_Handler")))
|
3 | > SPI4_IRQHandler(void);
|
4 | > #endif
|
5 | >
|
> einfügst, comiliert es mit Warnungen an anderen Stellen.
Das hab ich ausprobiert und es kompiliert in der Tat.
Das nächste Problem war dann die Takt-Konfiguration, die passte
überhaupt nicht und nach langem Herumstochern hab ich jetzt tief
vergraben in der STM32Cube_FW_F4_V1.3.0 was passendes gefunden das sieht
nun nachdem ichs umbenannt und für das gnuarmplugin-Template passend
gemacht habe folgendermaßen aus (in der vom plugin erzeugten
_initialize_hardware.c die configure_system_clock() durch dieses
ersetzt):
1 | /**
|
2 | * @brief System Clock Configuration
|
3 | * The system Clock is configured as follow :
|
4 | * System Clock source = PLL (HSI)
|
5 | * SYSCLK(Hz) = 84000000
|
6 | * HCLK(Hz) = 84000000
|
7 | * AHB Prescaler = 1
|
8 | * APB1 Prescaler = 2
|
9 | * APB2 Prescaler = 1
|
10 | * HSI Frequency(Hz) = 16000000
|
11 | * PLL_M = 16
|
12 | * PLL_N = 336
|
13 | * PLL_P = 4
|
14 | * PLL_Q = 7
|
15 | * VDD(V) = 3.3
|
16 | * Main regulator output voltage = Scale2 mode
|
17 | * Flash Latency(WS) = 2
|
18 | * @param None
|
19 | * @retval None
|
20 | */
|
21 | void configure_system_clock()
|
22 | {
|
23 | RCC_ClkInitTypeDef RCC_ClkInitStruct;
|
24 | RCC_OscInitTypeDef RCC_OscInitStruct;
|
25 |
|
26 | /* Enable Power Control clock */
|
27 | __PWR_CLK_ENABLE();
|
28 |
|
29 | /* The voltage scaling allows optimizing the power consumption when the device is
|
30 | clocked below the maximum system frequency, to update the voltage scaling value
|
31 | regarding system frequency refer to product datasheet. */
|
32 | __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2);
|
33 |
|
34 | /* Enable HSI Oscillator and activate PLL with HSI as source */
|
35 | RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
|
36 | RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
37 | RCC_OscInitStruct.HSICalibrationValue = 0x10;
|
38 | RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
39 | RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
|
40 | RCC_OscInitStruct.PLL.PLLM = 16;
|
41 | RCC_OscInitStruct.PLL.PLLN = 336;
|
42 | RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4;
|
43 | RCC_OscInitStruct.PLL.PLLQ = 7;
|
44 | HAL_RCC_OscConfig(&RCC_OscInitStruct);
|
45 |
|
46 | /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
|
47 | clocks dividers */
|
48 | RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
|
49 | RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
50 | RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
51 | RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
|
52 | RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
53 | HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
|
54 | }
|
Des Weiteren in der ebenfalls vom Plugin erzeugten BlinkLed.h die wohl
ursprünglich auf eines der Discovery boards zugeschnitten war die
korrekten Port und Pinnummern für die grüne LED geändert:
1 | #define BLINK_PORT_NUMBER (0)
|
2 | #define BLINK_PIN_NUMBER (5)
|
Und jetzt blinkt es und lässt sich auch debuggen.
Das war ja eine schwere Geburt, da soll noch mal einer sagen ARM wäre
einfach, und bis jetzt hab ich kaum an der Oberfläche gekratzt. Es hat
ganz offensichtlich schon seinen Grund warum man gerne simplere und
leichter zu nutzende Architekturen einsetzt wenn die zu lösende Aufgabe
kein schwereres Kaliber zwingend erfordert.