Hier ein paar Hinweise zu den von mir erstellten Librarys
1. Zu BUGs
2. Zu Port-Pin-Strukturen
3. Zu Compiler Einstellungen
4. Zu den Projektfiles
Die Librarys die ich hochlade, sind von mir alle mit dem Discovery-Board und der beschriebenen ToolChain getestet…was aber nicht bedeutet das sie 100% Fehlerfrei sind. Falls Ihr Fehler findet schreibt sie mir bitte, dann kann ich die beheben.
Die Port-Pins werden im STM32F4 etwas anders gehandhabt als z.B. auf dem ATMega. Um die Librarys so flexibel wie möglich zu halten, habe ich bei einigen eine Struktur in die C-Files eingefügt, in die alle benutzten Port-Pins eingetragen werden müssen.
Das beste Beispiel ist die Library “03-Digital-Out”. Um festzulegen welche Port-Pins als Ausgang benutzt werden sollen, müssen zunächst ALLE im H-File in der Enumeration aufgelistet werden. Wichtig ist hier, das der erste Eintrag bei “0″ beginnt und dann immer um “1″ inkrementiert wird.
Beispiel :
1 2 3 4 5 6 7 | typedef enum { DOUT_PB2 = 0, // PB2-Pin DOUT_PB7 = 1, // PB7-Pin DOUT_PC6 = 2, // PC6-Pin DOUT_PC13 = 3 // PC13-Pin }DOUT_NAME_t; |
Dann gibt es noch einen Define in der die Anzahl der Elemente eingtragen werden muss
1 | #define DOUT_ANZ 4 // Anzahl von DOUT_NAME_t |
Im C-File muss dann die Struktur mit allen Elementen aus der Enumeration gefüllt werden. Hier findet dann auch die Zuordnung zu den Port-Pins und den Clock-Registern statt. Eventuell gibt es noch einen Eintrag für Init-Pegel oder Pull-Ups oder sonstiges.
Beispiel :
1 2 3 4 5 6 7 | DOUT_PIN_t DOUT_PIN[] = { // Name ,PORT , PIN , CLOCK , Init {DOUT_PB2 ,GPIOB,GPIO_Pin_2 ,RCC_AHB1Periph_GPIOB,Bit_RESET}, {DOUT_PB7 ,GPIOB,GPIO_Pin_7 ,RCC_AHB1Periph_GPIOB,Bit_RESET}, {DOUT_PC6 ,GPIOC,GPIO_Pin_6 ,RCC_AHB1Periph_GPIOC,Bit_RESET}, {DOUT_PC13,GPIOC,GPIO_Pin_13,RCC_AHB1Periph_GPIOC,Bit_RESET}, }; |
Wichtig ist hier das die Reihenfolge mit der Enumeration übereinstimmt und alle Parameter richtig gesetzt werden.
Port kann sein :
1 | GPIOA bis GPIOI |
Pin kann sein :
1 | GPIO_Pin_0 bis GPIO_Pin_15 |
Clock kann sein :
1 | RCC_AHB1Periph_GPIOA bis RCC_AHB1Periph_GPIOI |
In der restlichen Library muss nichts geändert werden. Alle Funktionen greifen auf die Struktur zu und arbeiten mit diesen Daten.
3. Zu Compiler Einstellungen :
Ich habe Grundsätzlich die Compiler Optimierung AUS = “none”
und benutze auch nicht die Hardware-FPU
Falls ihr andere Einstellungen benutzt, kann es zu Fehlern kommen, weil z.B. Delay-Schleifen wegoptimiert werden oder zu schnell ablaufen.
Ich lade alle STM32F4-Librarys in zwei “Formaten” hoch. Einmal die reinen Quellfiles die benötigt werden (plus Main.c als Beispielvorlage) und zum zweiten meinen kompletten CooCox-Projektordern in dem sich alle notwendigen LIBs von ST befinden.
Im Ordner “Projektname/Debug/bin/” befindet sich das compilierte Binär-File das ihr z.B. mit dem ST-Link-Utility direkt auf das Discovery-Board flashen könnt. Mit diesem File könnt ihr (falls Fehler auftauchen) die Softwareseite ausschließen (weil das File von mir getestet wurde und funktioniert)
Hi;
Thanks for your sharings. They are very precious. I began to use coocox by help of you.
However, I could not achieve to use malloc with coocox. Allocating heap memory and malloc are not explained clearly very well in other sources. Can you explain and give an example of aloocating memory and malloc in Coocox for STM32
Thank you very much
First you have to aktivate “C Library” in the CoIDE Peripherals.
Than insert an include in your main.c
thats it