Guten Morgen, ich habe ein Evaluationboard mit dem STM32F207 von STMicroelectronics. Als Entwicklungsumgebung setzte ich den IAR Embedded Workbenach ein. Nun ist es so, dass vom Hersteller also STM Beispielprogramme bereits existieren. Ich möchte eigentlich einen Interrupt Handler in meinem Hauptprogramm selber implementieren. In der Beispielapplikation von IAR sind die Interrupt Handler im Startup-File hinterlegt. Wie kann man nun zum Beispiel den SysTick_Handler ohne die Startupdatei selber im Hauptprogramm implementieren ?
Im Anhang befindet sich die Startup Datei.
1 | #include "main.h" |
2 | |
3 | GPIO_InitTypeDef GPIO_InitStructure; |
4 | static __IO uint32_t TimingDelayLed1; |
5 | static __IO uint32_t TimingDelayLed2; |
6 | |
7 | int main(void) |
8 | {
|
9 | /*!< At this stage the microcontroller clock setting is already configured,
|
10 | this is done through SystemInit() function which is called from startup
|
11 | file (startup_stm32f2xx.s) before to branch to application main.
|
12 | To reconfigure the default setting of SystemInit() function, refer to
|
13 | system_stm32f2xx.c file
|
14 | */
|
15 | |
16 | /* Initialize Leds mounted on STM322xG-EVAL board */
|
17 | STM_EVAL_LEDInit(LED1); |
18 | STM_EVAL_LEDInit(LED2); |
19 | |
20 | /* Turn on LED1 and LED3 */
|
21 | STM_EVAL_LEDOn(LED1); |
22 | STM_EVAL_LEDOn(LED2); |
23 | |
24 | /* Setup SysTick Timer for 1 msec interrupts.
|
25 | ------------------------------------------
|
26 | 1. The SysTick_Config() function is a CMSIS function which configure:
|
27 | - The SysTick Reload register with value passed as function parameter.
|
28 | - Configure the SysTick IRQ priority to the lowest value (0x0F).
|
29 | - Reset the SysTick Counter register.
|
30 | - Configure the SysTick Counter clock source to be Core Clock Source (HCLK).
|
31 | - Enable the SysTick Interrupt.
|
32 | - Start the SysTick Counter.
|
33 |
|
34 | 2. You can change the SysTick Clock source to be HCLK_Div8 by calling the
|
35 | SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8) just after the
|
36 | SysTick_Config() function call. The SysTick_CLKSourceConfig() is defined
|
37 | inside the misc.c file.
|
38 | |
39 | 3. You can change the SysTick IRQ priority by calling the
|
40 | NVIC_SetPriority(SysTick_IRQn,...) just after the SysTick_Config() function
|
41 | call. The NVIC_SetPriority() is defined inside the core_cm3.h file.
|
42 | |
43 | 4. To adjust the SysTick time base, use the following formula:
|
44 |
|
45 | Reload Value = SysTick Counter Clock (Hz) x Desired Time base (s)
|
46 |
|
47 | - Reload Value is the parameter to be passed for SysTick_Config() function
|
48 | - Reload Value should not exceed 0xFFFFFF
|
49 | */
|
50 | if (SysTick_Config(SystemCoreClock / 1000)) |
51 | {
|
52 | /* Capture error */
|
53 | while (1); |
54 | }
|
55 | |
56 | TimingDelayLed1 = 255; |
57 | TimingDelayLed2 = 127; |
58 | |
59 | while (1) |
60 | {
|
61 | __no_operation(); |
62 | }
|
63 | }
|
64 | |
65 | void SysTick_Handler(void) |
66 | {
|
67 | if (TimingDelayLed1 != 0x00) |
68 | {
|
69 | TimingDelayLed1--; |
70 | }
|
71 | else if(TimingDelayLed1 == 0x00) |
72 | {
|
73 | TimingDelayLed1 = 255; |
74 | STM_EVAL_LEDToggle(LED1); |
75 | }
|
76 | |
77 | if (TimingDelayLed2 != 0x00) |
78 | {
|
79 | TimingDelayLed2--; |
80 | }
|
81 | else if(TimingDelayLed2 == 0x00) |
82 | {
|
83 | TimingDelayLed2 = 127; |
84 | STM_EVAL_LEDToggle(LED2); |
85 | }
|
86 | |
87 | }
|
Hallo, ich beschäftige mich nun auch mit dem Thema - gleicher µC, gleiche IDE. Hast du schon Fortschritte gemacht? Zunächst wollte ich das Startup-File einmal verstehen. Nach langem Suchen hab ich endlich ein Dokument gefunden, wo alle verwendeten Direktiven aufgelistet sind: http://supp.iar.com/FilesPublic/UPDINFO/004916/arm/doc/EWARM_AssemblerReference.ENU.pdf Damit ist es jetzt hoffentlich kein Problem mehr. Was spricht dagegen, die Vektortabelle im Startup-File zu lassen? Mir scheint das so am übersichtlichsten zu sein. Grüße Hannes
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.