Hallo,
beim STM32F072 will ich externe Interrupts benutzen und dazu habe ich
die Standard Peripheral Libraries mit dazugenommen (Vers. 1.3.0,) und
ins Projekt die Files (.c->.cpp umbenannt und .h) mit aufgenommen:
- stm32f0xx_exti.*
- stm32f0xx_misc.*
- stm32f0xx_syscfg.*
Beim compilieren bekomme ich jetzt die Fehlermeldung
> projektspez-file.cpp:246:24: error: 'assert_param' was not declared in this
scope
Andere Files aus anderen Ordnern haben nicht das Problem.
Das Projekt selbst besteht uas 2 Teilen, einem projektspezifischen Teil
und einem allgemeinen Teil, also weniger projektspezifisch.
Mit der Compileroption -DUSE_STDPERIPH_DRIVER ändert sich überhaupt
nichts, auch nicht, wenn ich wenn ich die das Headerfile stm32_assert.h
in den projektspezifischen Ordner kopiere, so wie es im headerfile steht
(This file should be copied to the application folder and renamed to
stm32_assert.h).
Entwicklungs-IDE ist übrigens CooCoox 1.7.8
Mein Problem ist übrigens ähnlich bzw gleich wie hier, nur hilft der Tip
mit -DUSE_STD.... nicht: Beitrag "[STM32_StdPeriph] Verzweiflung mit makefile"
Oder mal ganz allgemein gefragt: Ist das die richtige Vorgehensweise um
ext. Interrupts zu gebrauchen? Wenn ich es mit ein paar Anweisungen
mache reagiert der Prozessor nicht mehr.
In hal_conf.cpp steht u. a.
1 | // PB2 konfigurieren:
|
2 | GPIO_Port_Config.IRQPin.GPIO_Port = GPIOB;
|
3 | GPIO_Port_Config.IRQPin.GPIO_Pin.Pin = GPIO_PIN_2;
|
4 | GPIO_Port_Config.IRQPin.GPIO_Pin.Mode = GPIO_MODE_INPUT; // GPIO_MODE_IT_RISING;
|
5 | GPIO_Port_Config.IRQPin.GPIO_Pin.Pull = GPIO_PULLDOWN;
|
6 | GPIO_Port_Config.IRQPin.GPIO_Pin.Speed = GPIO_SPEED_FREQ_MEDIUM;
|
7 |
|
8 | // PB2 als ext. Interrupt mit steigender Flanke
|
9 | SYSCFG->EXTICR[0] |= 0x0100;
|
10 | EXTI->RTSR |= EXTI_RTSR_TR2;
|
11 | EXTI->IMR |= EXTI_IMR_MR2;
|
12 | NVIC_SetPriority(EXTI2_3_IRQn, 2);
|
13 |
|
14 | // hier hängt sich scheinbar der Prozessor auf, jedenfalls bekomme ich
|
15 | // nach diesem Befehl keine Reaktion mehr, z. B. LED einschalten.
|
16 | NVIC_EnableIRQ(EXTI2_3_IRQn); // Hier endet das Programm ......
|
In main.cpp steht u.a.:
1 | void EXTI2_3_IRQHandler(void)
|
2 | {
|
3 | // Kontrollfunktion um den Int. zu checken
|
4 | }
|
Die manuelle Geschichte mit ext. Interrupts habe ich übrigens von
http://www.hertaville.com/external-interrupts-on-the-stm32f0.html
--
edit: 2. Parameter bei NVIC_SetPriority() vergessen :(