Moin,
eigentlich ganz einfach: Ich möchte im Programm an mehreren Stellen Port
Bits einstellen für die jeweilige Hardware und zwar dort, wo die HW auch
verwendet wird und nicht einmal global und dann nie wieder.
1 | /* Init des 7 Segment Treibers auf SPI 1 */
|
2 | void Init_MAX7219() {
|
3 |
|
4 | GPIO_InitTypeDef GPIO_InitStruct;
|
5 | SPI_InitTypeDef SPI_InitStruct;
|
6 |
|
7 | /* ----- PE5 als CS konfigurieren -------- */
|
8 | RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
|
9 | GPIO_SetBits(GPIOE,SEG7_CS); // Glitch vermeiden CS = HIGH (DISABLE)
|
10 | GPIO_InitStruct.GPIO_Pin = SEG7_CS;
|
11 | GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
|
12 | GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
|
13 | GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
|
14 | GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
|
15 | GPIO_Init(GPIOE, &GPIO_InitStruct);
|
16 |
|
17 | [.......]
|
Trotz Debuggen lässt sich nicht herausfinden, wie ich es vermeide, dass
ich eine alte Konfiguration auf PORTE überschreibe, die schon frueher
gemacht wurde wo zb Bit 3,8.9,.. definiert wurden.
Es gibt die Funktion
GPIO_StructInit (&GPIO_InitStructure);
die mir den Struct auf Default stellt. Gibt es auch eine Funktion, die
mir die bisherige Konfiguration einliest, dann schreibe ich etwas dazu
und update den Port nur?
Zum Vergleich: Beim AVR lese ich das "Data Diretion Register" ein, model
mein Bit dazu und schreibe es zurück.
Ich hoffe das war jetzt verständlich beschrieben :-)
Gruss,
Christian