Hi,
Ich habe vor vieeelen Jahren ein Atmega8 zum Spielen gehabt und das LCD
HD44780 mittels der LCD Routinen hier im Forum zum Laufen gebracht:
https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung#Die_LCD_Routinen
Nun habe ich ein STM32F407 Discovery Board und würde die LCD Routinen
gerne abändern.
Allerdings verweifle ich gerade daran, die nötigen #defines anzupassen,
auch weil das ganze Headerfile ganz anders aufgebaut zu sein scheint im
Vergleich zum AVR.
Weiß jemand mehr, ob es ein STM32F407 Pendant zu den PORTx und Px0 gibt?
(Ob nun PortD und PD0 oder PORTB und PB0 ist zweitrangig).
Aus dem STM32F407 Header file kann ich folgendes entnehmen:
1 | #define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
|
2 | #define GPIOB ((GPIO_TypeDef *) GPIOB_BASE)
|
3 | #define GPIOC ((GPIO_TypeDef *) GPIOC_BASE)
|
4 | #define GPIOD ((GPIO_TypeDef *) GPIOD_BASE)
|
5 | #define GPIOE ((GPIO_TypeDef *) GPIOE_BASE)
|
6 | #define GPIOF ((GPIO_TypeDef *) GPIOF_BASE)
|
7 | #define GPIOG ((GPIO_TypeDef *) GPIOG_BASE)
|
8 | #define GPIOH ((GPIO_TypeDef *) GPIOH_BASE)
|
9 | #define GPIOI ((GPIO_TypeDef *) GPIOI_BASE)
|
1 | /*!< AHB1 peripherals */
|
2 | #define GPIOA_BASE (AHB1PERIPH_BASE + 0x0000UL)
|
3 | #define GPIOB_BASE (AHB1PERIPH_BASE + 0x0400UL)
|
4 | #define GPIOC_BASE (AHB1PERIPH_BASE + 0x0800UL)
|
5 | #define GPIOD_BASE (AHB1PERIPH_BASE + 0x0C00UL)
|
6 | #define GPIOE_BASE (AHB1PERIPH_BASE + 0x1000UL)
|
7 | #define GPIOF_BASE (AHB1PERIPH_BASE + 0x1400UL)
|
8 | #define GPIOG_BASE (AHB1PERIPH_BASE + 0x1800UL)
|
9 | #define GPIOH_BASE (AHB1PERIPH_BASE + 0x1C00UL)
|
10 | #define GPIOI_BASE (AHB1PERIPH_BASE + 0x2000UL)
|
AHB1PERIPH_BASE ist die Base Addresse des jeweiligen Bus, an dem die
GPIOs hängen.
Das Setzen und Löschen eines jeweiligen Pins scheint jedoch fundamental
unterschiedlich zu sein beim STM32, weil es ein Set- und ein Reset
Register gibt, die mit 1 geschrieben werden müssen, um den jeweiligen
Pin zu setzen oder zu löschen.
Da ich keinen Atmega8 und kein AVR Studio mehr habe, kann ich nicht
selbst nachgucken, ob man überhaupt die PORTD und PD0 auf einen STM32
übertragen kann.
Gibt es hier einen, der sowohl AVR als auch STM32 verwendet und sich mal
näher mit den Headerfiles auseinandergesetzt hat?
Gruß,