Author Topic: STM32 timer interrupt issue  (Read 4210 times)

0 Members and 1 Guest are viewing this topic.

Offline hussamaldeanTopic starter

  • Supporter
  • ****
  • Posts: 266
  • Country: iq
STM32 timer interrupt issue
« on: October 12, 2018, 02:57:07 pm »
Hi all
I am currently learning STM32 and I reached timer interrupt section and I am applying the examples from this page

http://docs.leaflabs.com/static.leaflabs.com/pub/leaflabs/maple-docs/latest/lang/api/hardwaretimer.html#lang-hardwaretimer-setoverflow
the first one works just fine but the second one which is the following


Quote
int count3 = 0;
int count4 = 0;

// We'll use timers 3 and 4
HardwareTimer timer3(3);
HardwareTimer timer4(4);

void setup() {
    // Set up the button for input
    pinMode(BOARD_BUTTON_PIN, INPUT_PULLUP);

    // Set up timers to add 1 to their counts each time
    // their interrupts fire.
    timer3.setMode(TIMER_CH1, TIMER_OUTPUT_COMPARE);
    timer4.setMode(TIMER_CH1, TIMER_OUTPUT_COMPARE);
    timer3.pause();
    timer4.pause();
    timer3.setCount(0);
    timer4.setCount(0);
    timer3.setOverflow(30000);
    timer4.setOverflow(30000);
    timer3.setCompare(TIMER_CH1, 1000);   // somewhere in the middle
    timer4.setCompare(TIMER_CH1, 1000);
    timer3.attachCompare1Interrupt(handler3);
    timer4.attachCompare1Interrupt(handler4);
    timer3.refresh();
    timer4.refresh();
    timer3.resume();
    timer4.resume();
}

void loop() {
    // Display the running counts
    SerialUSB.print("Count 3: ");
    SerialUSB.print(count3);
    SerialUSB.print("\t\tCount 4: ");
    SerialUSB.println(count4);

    // While the button is held down, pause timer 4
    for (int i = 0; i < 1000; i++) {
        if (digitalRead(BOARD_BUTTON_PIN)) {
            timer4.pause();
        } else {
            timer4.resume();
        }
        delay(1);
    }
}

void handler3(void) {
    count3++;
}

void handler4(void) {
    count4++;
}


but I am getting the following error during compiling the code

Quote
Arduino: 1.8.7 (Mac OS X), Board: "Generic STM32F103C series, STM32F103C8 (20k RAM. 64k Flash), Serial, 72Mhz (Normal), Smallest (default)"

/Applications/Arduino.app/Contents/Java/arduino-builder -dump-prefs -logger=machine -hardware /Applications/Arduino.app/Contents/Java/hardware -hardware /Users/hussamaldean/Library/Arduino15/packages -hardware /Users/hussamaldean/Documents/Arduino/hardware -tools /Applications/Arduino.app/Contents/Java/tools-builder -tools /Applications/Arduino.app/Contents/Java/hardware/tools/avr -tools /Users/hussamaldean/Library/Arduino15/packages -built-in-libraries /Applications/Arduino.app/Contents/Java/libraries -libraries /Users/hussamaldean/Documents/Arduino/libraries -fqbn=stm32duino:STM32F1:genericSTM32F103C:device_variant=STM32F103C8,upload_method=serialMethod,cpu_speed=speed_72mhz,opt=osstd -ide-version=10807 -build-path /var/folders/qc/my7b6wln3hq_1zs75vtl91mh0000gn/T/arduino_build_286857 -warnings=all -build-cache /var/folders/qc/my7b6wln3hq_1zs75vtl91mh0000gn/T/arduino_cache_490199 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.stm32tools.path=/Users/hussamaldean/Library/Arduino15/packages/stm32duino/tools/stm32tools/2018.9.24 -prefs=runtime.tools.stm32tools-2018.9.24.path=/Users/hussamaldean/Library/Arduino15/packages/stm32duino/tools/stm32tools/2018.9.24 -prefs=runtime.tools.arm-none-eabi-gcc.path=/Users/hussamaldean/Library/Arduino15/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1 -prefs=runtime.tools.arm-none-eabi-gcc-4.8.3-2014q1.path=/Users/hussamaldean/Library/Arduino15/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1 -verbose /var/folders/qc/my7b6wln3hq_1zs75vtl91mh0000gn/T/arduino_modified_sketch_148543/sketch_oct12f.ino
/Applications/Arduino.app/Contents/Java/arduino-builder -compile -logger=machine -hardware /Applications/Arduino.app/Contents/Java/hardware -hardware /Users/hussamaldean/Library/Arduino15/packages -hardware /Users/hussamaldean/Documents/Arduino/hardware -tools /Applications/Arduino.app/Contents/Java/tools-builder -tools /Applications/Arduino.app/Contents/Java/hardware/tools/avr -tools /Users/hussamaldean/Library/Arduino15/packages -built-in-libraries /Applications/Arduino.app/Contents/Java/libraries -libraries /Users/hussamaldean/Documents/Arduino/libraries -fqbn=stm32duino:STM32F1:genericSTM32F103C:device_variant=STM32F103C8,upload_method=serialMethod,cpu_speed=speed_72mhz,opt=osstd -ide-version=10807 -build-path /var/folders/qc/my7b6wln3hq_1zs75vtl91mh0000gn/T/arduino_build_286857 -warnings=all -build-cache /var/folders/qc/my7b6wln3hq_1zs75vtl91mh0000gn/T/arduino_cache_490199 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.stm32tools.path=/Users/hussamaldean/Library/Arduino15/packages/stm32duino/tools/stm32tools/2018.9.24 -prefs=runtime.tools.stm32tools-2018.9.24.path=/Users/hussamaldean/Library/Arduino15/packages/stm32duino/tools/stm32tools/2018.9.24 -prefs=runtime.tools.arm-none-eabi-gcc.path=/Users/hussamaldean/Library/Arduino15/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1 -prefs=runtime.tools.arm-none-eabi-gcc-4.8.3-2014q1.path=/Users/hussamaldean/Library/Arduino15/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1 -verbose /var/folders/qc/my7b6wln3hq_1zs75vtl91mh0000gn/T/arduino_modified_sketch_148543/sketch_oct12f.ino
Using board 'genericSTM32F103C' from platform in folder: /Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24
Using core 'maple' from platform in folder: /Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24
Detecting libraries used...
/Users/hussamaldean/Library/Arduino15/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/arm-none-eabi-g++ -c -g -Os -w -DDEBUG_LEVEL=DEBUG_NONE -std=gnu++11 -ffunction-sections -fdata-sections -nostdlib --param max-inline-insns-single=500 -fno-rtti -fno-exceptions -DBOARD_generic_stm32f103c -DVECT_TAB_ADDR=0x8000000 -DERROR_LED_PORT=GPIOC -DERROR_LED_PIN=13 -w -x c++ -E -CC -mcpu=cortex-m3 -DF_CPU=72000000L -DARDUINO=10807 -DARDUINO_GENERIC_STM32F103C -DARDUINO_ARCH_STM32F1 -DCONFIG_MAPLE_MINI_NO_DISABLE_DEBUG -DMCU_STM32F103C8 -mthumb -march=armv7-m -D__STM32F1__ -DARDUINO_ARCH_STM32 -DMCU_STM32F103C8 -mthumb -march=armv7-m -D__STM32F1__ -DARDUINO_ARCH_STM32 -I/Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/system/libmaple -I/Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/system/libmaple/include -I/Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/system/libmaple/stm32f1/include -I/Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/system/libmaple/usb/stm32f1 -I/Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/system/libmaple/usb/usb_lib -I/Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/cores/maple -I/Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/variants/generic_stm32f103c /var/folders/qc/my7b6wln3hq_1zs75vtl91mh0000gn/T/arduino_build_286857/sketch/sketch_oct12f.ino.cpp -o /dev/null
Generating function prototypes...
/Users/hussamaldean/Library/Arduino15/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/arm-none-eabi-g++ -c -g -Os -w -DDEBUG_LEVEL=DEBUG_NONE -std=gnu++11 -ffunction-sections -fdata-sections -nostdlib --param max-inline-insns-single=500 -fno-rtti -fno-exceptions -DBOARD_generic_stm32f103c -DVECT_TAB_ADDR=0x8000000 -DERROR_LED_PORT=GPIOC -DERROR_LED_PIN=13 -w -x c++ -E -CC -mcpu=cortex-m3 -DF_CPU=72000000L -DARDUINO=10807 -DARDUINO_GENERIC_STM32F103C -DARDUINO_ARCH_STM32F1 -DCONFIG_MAPLE_MINI_NO_DISABLE_DEBUG -DMCU_STM32F103C8 -mthumb -march=armv7-m -D__STM32F1__ -DARDUINO_ARCH_STM32 -DMCU_STM32F103C8 -mthumb -march=armv7-m -D__STM32F1__ -DARDUINO_ARCH_STM32 -I/Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/system/libmaple -I/Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/system/libmaple/include -I/Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/system/libmaple/stm32f1/include -I/Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/system/libmaple/usb/stm32f1 -I/Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/system/libmaple/usb/usb_lib -I/Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/cores/maple -I/Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/variants/generic_stm32f103c /var/folders/qc/my7b6wln3hq_1zs75vtl91mh0000gn/T/arduino_build_286857/sketch/sketch_oct12f.ino.cpp -o /var/folders/qc/my7b6wln3hq_1zs75vtl91mh0000gn/T/arduino_build_286857/preproc/ctags_target_for_gcc_minus_e.cpp
/Applications/Arduino.app/Contents/Java/tools-builder/ctags/5.8-arduino11/ctags -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives /var/folders/qc/my7b6wln3hq_1zs75vtl91mh0000gn/T/arduino_build_286857/preproc/ctags_target_for_gcc_minus_e.cpp
Compiling sketch...
/Users/hussamaldean/Library/Arduino15/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/arm-none-eabi-g++ -c -g -Os -Wall -Wextra -DDEBUG_LEVEL=DEBUG_ALL -std=gnu++11 -MMD -ffunction-sections -fdata-sections -nostdlib --param max-inline-insns-single=500 -fno-rtti -fno-exceptions -DBOARD_generic_stm32f103c -DVECT_TAB_ADDR=0x8000000 -DERROR_LED_PORT=GPIOC -DERROR_LED_PIN=13 -mcpu=cortex-m3 -DF_CPU=72000000L -DARDUINO=10807 -DARDUINO_GENERIC_STM32F103C -DARDUINO_ARCH_STM32F1 -DCONFIG_MAPLE_MINI_NO_DISABLE_DEBUG -DMCU_STM32F103C8 -mthumb -march=armv7-m -D__STM32F1__ -DARDUINO_ARCH_STM32 -DMCU_STM32F103C8 -mthumb -march=armv7-m -D__STM32F1__ -DARDUINO_ARCH_STM32 -I/Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/system/libmaple -I/Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/system/libmaple/include -I/Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/system/libmaple/stm32f1/include -I/Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/system/libmaple/usb/stm32f1 -I/Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/system/libmaple/usb/usb_lib -I/Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/cores/maple -I/Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/variants/generic_stm32f103c /var/folders/qc/my7b6wln3hq_1zs75vtl91mh0000gn/T/arduino_build_286857/sketch/sketch_oct12f.ino.cpp -o /var/folders/qc/my7b6wln3hq_1zs75vtl91mh0000gn/T/arduino_build_286857/sketch/sketch_oct12f.ino.cpp.o
sketch_oct12f:5:21: error: conflicting declaration 'HardwareTimer timer3'
 HardwareTimer timer3(3);
                     ^
In file included from /Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/cores/maple/wirish_types.h:38:0,
                 from /Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/cores/maple/boards.h:38,
                 from /Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/cores/maple/wirish.h:54,
                 from /Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/cores/maple/Arduino.h:30,
                 from /var/folders/qc/my7b6wln3hq_1zs75vtl91mh0000gn/T/arduino_build_286857/sketch/sketch_oct12f.ino.cpp:1:
/Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/system/libmaple/include/libmaple/timer.h:146:18: error: 'timer3' has a previous declaration as 'timer_dev timer3'
 extern timer_dev timer3;
                  ^
sketch_oct12f:6:21: error: conflicting declaration 'HardwareTimer timer4'
 HardwareTimer timer4(4);
                     ^
In file included from /Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/cores/maple/wirish_types.h:38:0,
                 from /Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/cores/maple/boards.h:38,
                 from /Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/cores/maple/wirish.h:54,
                 from /Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/cores/maple/Arduino.h:30,
                 from /var/folders/qc/my7b6wln3hq_1zs75vtl91mh0000gn/T/arduino_build_286857/sketch/sketch_oct12f.ino.cpp:1:
/Users/hussamaldean/Library/Arduino15/packages/stm32duino/hardware/STM32F1/2018.9.24/system/libmaple/include/libmaple/timer.h:150:18: error: 'timer4' has a previous declaration as 'timer_dev timer4'
 extern timer_dev timer4;
                  ^
/var/folders/qc/my7b6wln3hq_1zs75vtl91mh0000gn/T/arduino_modified_sketch_148543/sketch_oct12f.ino: In function 'void setup()':
sketch_oct12f:10:13: error: 'BOARD_BUTTON_PIN' was not declared in this scope
     pinMode(BOARD_BUTTON_PIN, INPUT_PULLUP);
             ^
sketch_oct12f:14:12: error: 'timer_dev' has no member named 'setMode'
     timer3.setMode(TIMER_CH1, TIMER_OUTPUT_COMPARE);
            ^
sketch_oct12f:15:12: error: 'timer_dev' has no member named 'setMode'
     timer4.setMode(TIMER_CH1, TIMER_OUTPUT_COMPARE);
            ^
sketch_oct12f:16:12: error: 'timer_dev' has no member named 'pause'
     timer3.pause();
            ^
sketch_oct12f:17:12: error: 'timer_dev' has no member named 'pause'
     timer4.pause();
            ^
sketch_oct12f:18:12: error: 'timer_dev' has no member named 'setCount'
     timer3.setCount(0);
            ^
sketch_oct12f:19:12: error: 'timer_dev' has no member named 'setCount'
     timer4.setCount(0);
            ^
sketch_oct12f:20:12: error: 'timer_dev' has no member named 'setOverflow'
     timer3.setOverflow(30000);
            ^
sketch_oct12f:21:12: error: 'timer_dev' has no member named 'setOverflow'
     timer4.setOverflow(30000);
            ^
sketch_oct12f:22:12: error: 'timer_dev' has no member named 'setCompare'
     timer3.setCompare(TIMER_CH1, 1000);   // somewhere in the middle
            ^
sketch_oct12f:23:12: error: 'timer_dev' has no member named 'setCompare'
     timer4.setCompare(TIMER_CH1, 1000);
            ^
sketch_oct12f:24:12: error: 'timer_dev' has no member named 'attachCompare1Interrupt'
     timer3.attachCompare1Interrupt(handler3);
            ^
sketch_oct12f:25:12: error: 'timer_dev' has no member named 'attachCompare1Interrupt'
     timer4.attachCompare1Interrupt(handler4);
            ^
sketch_oct12f:26:12: error: 'timer_dev' has no member named 'refresh'
     timer3.refresh();
            ^
sketch_oct12f:27:12: error: 'timer_dev' has no member named 'refresh'
     timer4.refresh();
            ^
sketch_oct12f:28:12: error: 'timer_dev' has no member named 'resume'
     timer3.resume();
            ^
sketch_oct12f:29:12: error: 'timer_dev' has no member named 'resume'
     timer4.resume();
            ^
/var/folders/qc/my7b6wln3hq_1zs75vtl91mh0000gn/T/arduino_modified_sketch_148543/sketch_oct12f.ino: In function 'void loop()':
sketch_oct12f:34:5: error: 'SerialUSB' was not declared in this scope
     SerialUSB.print("Count 3: ");
     ^
sketch_oct12f:41:25: error: 'BOARD_BUTTON_PIN' was not declared in this scope
         if (digitalRead(BOARD_BUTTON_PIN)) {
                         ^
sketch_oct12f:42:20: error: 'timer_dev' has no member named 'pause'
             timer4.pause();
                    ^
sketch_oct12f:44:20: error: 'timer_dev' has no member named 'resume'
             timer4.resume();
                    ^
exit status 1
conflicting declaration 'HardwareTimer timer3'


anyway to fix this problem ?

regards
 

Offline exe

  • Supporter
  • ****
  • Posts: 2613
  • Country: nl
  • self-educated hobbyist
Re: STM32 timer interrupt issue
« Reply #1 on: October 12, 2018, 03:09:54 pm »
I see there are several problems. One is timer3 and timer4 are already defined. Probably, you don't need to create them.

Other errors are about, probably, changed API and macroses (e.g. BOARD_BUTTON_PIN) which are not defined (or you have to define yourself, I dunno).

I'd advise to learn C/C++ first and read errors and warning more carefully as these error are very common and it's essential to understand them to make any progress in writing own firmware.
 

Offline hussamaldeanTopic starter

  • Supporter
  • ****
  • Posts: 266
  • Country: iq
Re: STM32 timer interrupt issue
« Reply #2 on: October 12, 2018, 03:26:47 pm »
I see there are several problems. One is timer3 and timer4 are already defined. Probably, you don't need to create them.

Other errors are about, probably, changed API and macroses (e.g. BOARD_BUTTON_PIN) which are not defined (or you have to define yourself, I dunno).

I'd advise to learn C/C++ first and read errors and warning more carefully as these error are very common and it's essential to understand them to make any progress in writing own firmware.
I've tried that approach and it didn't work at all
 

Offline exe

  • Supporter
  • ****
  • Posts: 2613
  • Country: nl
  • self-educated hobbyist
Re: STM32 timer interrupt issue
« Reply #3 on: October 12, 2018, 04:03:10 pm »
Which approach? What was the problem?
 

Offline hussamaldeanTopic starter

  • Supporter
  • ****
  • Posts: 266
  • Country: iq
Re: STM32 timer interrupt issue
« Reply #4 on: October 12, 2018, 04:07:25 pm »
Which approach? What was the problem?
after looking in the header files of STM32 in Arduino15 folder, it turns out that timer is already defined in the headers and I must change it
well, I was dump not to check the header files first before posting this problem
at least I learnt something new though
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf