Forum: Mikrocontroller und Digitale Elektronik STM32 Startprobleme


von Aspire (Gast)


Lesenswert?

Hi,

also seit wenigen Tagen experimentier ich mit dem STM32-SK Board herum. 
Endlich habe ich es geschaft ein Rumpfprogramm fehlerfrei zu 
compilieren.
Wenn ich das jetzt flashen will gelange ich allerdings nie in die 
main().
Bei der Projekterstellung habe ich mich sehr an den mitgelieferten 
Beispielen orientiert und auch alle notwenigen Files includiert. Woran 
kann das liegen?
Ach und das Häckchen beim debuggen habe ich auch bei "run to main" 
gesetzt.
Sobald ich das Programm ausführe und Disassambly betrachte startet der 
Debugger sofort an irgendwelchen Speicherstellen, die ich nicht 
beeinflussen kann.

Wo ist der Fehler?

Die main.c sieht wie folgt aus :
1
 #include "stm32f10x_lib.h"                        // STM32F10x Library Definitions
2
#include <stdio.h>
3
#include "STM32_Init.h"                           // STM32 Initialization
4
#include "stm32f10x_usart.h"
5
6
//#define UART  UART_3
7
typedef unsigned int          Int32U;   // Unsigned 32 bit quantity
8
9
#define LOOP_DLY_100US  450
10
11
12
void Clk_Init (void)
13
{
14
  // 1. Clocking the controller from internal HSI RC (8 MHz)
15
  RCC_HSICmd(ENABLE);
16
  // wait until the HSI is ready
17
  while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
18
  RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
19
  // 2. Enable ext. high frequency OSC
20
  RCC_HSEConfig(RCC_HSE_ON);
21
  // wait until the HSE is ready
22
  while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);
23
  // 3. Init PLL
24
  RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); // 72MHz
25
  RCC_PLLCmd(ENABLE);
26
  // wait until the PLL is ready
27
  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
28
  // 4. Set system clock dividers
29
  RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);
30
  RCC_ADCCLKConfig(RCC_PCLK2_Div8);
31
  RCC_PCLK2Config(RCC_HCLK_Div1);
32
  RCC_PCLK1Config(RCC_HCLK_Div2);
33
  RCC_HCLKConfig(RCC_SYSCLK_Div1);
34
#ifdef EMB_FLASH
35
  // 5. Init Embedded Flash
36
  // Zero wait state, if 0 < HCLK 24 MHz
37
  // One wait state, if 24 MHz < HCLK 56 MHz
38
  // Two wait states, if 56 MHz < HCLK 72 MHz
39
  // Flash wait state
40
  FLASH_SetLatency(FLASH_Latency_2);
41
  // Half cycle access
42
  FLASH_HalfCycleAccessCmd(FLASH_HalfCycleAccess_Disable);
43
  // Prefetch buffer
44
  FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
45
#endif // EMB_FLASH
46
  // 5. Clock system from PLL
47
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
48
}
49
50
/*************************************************************************
51
 * Function Name: Dly100us
52
 * Parameters: Int32U Dly
53
 *
54
 * Return: none
55
 *
56
 * Description: Delay Dly * 100us
57
 *
58
 *************************************************************************/
59
void Dly100us(void *arg)
60
{
61
Int32U Dly = (Int32U)arg;
62
  while(Dly--)
63
  {
64
    for(volatile int i = LOOP_DLY_100US; i; i--);
65
  }
66
}
67
68
69
void UART_init()
70
{
71
  
72
}
73
/*************************************************************************
74
 * Function Name: main
75
 * Parameters: none
76
 *
77
 * Return: none
78
 *
79
 * Description: main
80
 *
81
 *************************************************************************/
82
void main(void)
83
{
84
GPIO_InitTypeDef GPIO_InitStructure;
85
NVIC_InitTypeDef NVIC_InitStructure;
86
#ifdef DEBUG
87
   debug();
88
#endif
89
90
  // Init clock system
91
  Clk_Init();
92
93
  // NVIC init
94
#ifndef  EMB_FLASH
95
  /* Set the Vector Table base location at 0x20000000 */
96
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
97
#else  /* VECT_TAB_FLASH  */
98
  /* Set the Vector Table base location at 0x08000000 */
99
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
100
#endif
101
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
102
103
  // Enable timer counting
104
  //TIM1_Cmd(ENABLE);
105
106
107
  UART_init();
108
  
109
110
  while(1)
111
  {
112
    
113
114
      
115
  }
116
}
117
#ifdef  DEBUG
118
119
void assert_failed(u8* file, u32 line)
120
{ 
121
  /* User can add his own implementation to report the file name and line number,
122
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
123
124
  /* Infinite loop */
125
  while (1)
126
  {
127
  }
128
}
129
#endif

MFG

von Erwin R. (er-tronik)


Lesenswert?

Wo ist Deine Vector-Tabelle? Da sollte als 2. Vector drin stehen, daß 
der Controller nach Main springen soll.

von Aspire (Gast)


Lesenswert?

Hm??? Welche Vector-Table meinst du? Bin da grad etwas überfragt?Habe 
eine Header samt Funktionen gefunden, die stm32f10x_vector.c heißt. Ist 
sie das?

von joachim (Gast)


Lesenswert?

Habe gerade ganz ähnliche Probleme.
Wäre sehr nett wenn jemand da noch ein paar Infos dazu hätte.

Also ich nutze GNU-Toolchain (codesourcery) und Eclipse.

von Florian Finsterbusch (Gast)


Lesenswert?

Hallo,

seid ihr schon etwas weiter gekommen bzgl. des Debuggens des STM32?
Ich versuche zur Zeit die Toolchain unter YAGARTO zum Laufen u bringen.
Aber das Debuggen klappt noch nicht.

Gruss, Florian

von Michael B. (bubi)


Lesenswert?

Wir könnten uns ja mal zusammen tun einen Artikel ins Wiki einstellen 
und nach und nach bearbeiten... Vl bekommen wir es ja alle gemeinsam zum 
laufen :)

von Florian (Gast)


Lesenswert?

Ich helfe gerne mit den STM32 zum laufen zu bringen.

Das Laden des Controllers über OpenOCD hat bei mir geklappt.
(OLIMEX STM32_P103 Board + OLIMEX ARM-USB-TINA)

Ich habe OpenOCD 0.1.0 verwendet und in einer Kommandobox mit folgenden 
Parametern gestartet:
openocd -f interface/olimex-jtag-tiny-a.cfg -f target/stm32.cfg -c init 
-c reset

Anschließend habe ich in einer zweiten Kommandobox eine 
telnet-Verbindung aufgebaut:
telnet localhost 4444
Danach konnte ich mit den folgenden Parametern ein Testprogramm in den 
Controller schreiben:
  halt
  reset
  stm32x mass_erase 0
  flash write_bank 0 
C:/STM32/Examples/Olimex/stm_p103_blink_flash/main.bin 0
Nach dem Drücken des Reset-Tasters blinkt die LED an PC12.

Habt ihr vielleicht schon ein paar Sachen für die Toolchain 
(strukturiertes makefile, Debuggen mit Eclipse)?

Wollen wir die Diskussion unter folgendem Thread fortsetzen:
Beitrag "Yagarto : Beispiel für STM32?"
Oder vielleicht einen ganz neues Thema einrichten?

Gruss, Florian

von Michael B. (bubi)


Lesenswert?

Ich habe leider noch garnichts, hatte bis jetzt eigentlich nur mit 
kompletten IDEs zu tun. Nur habe ich gewaltige Probleme mit Crossworks 
(oder dem Debugger) und ich weiß nicht wieso. Deshalb ist bei mir der 
Wille recht groß Eclipse zum laufen zu bewegen um einen vergleich zu 
haben. Im anderen Post gibt es ja ein example zum downloaden. Im 
ST-Forum gibts auch schon StartupCode usw für STM32. Ich schlage vor 
neuen Thread aufmachen wo wir die Infos zusammentragen können.

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
Noch kein Account? Hier anmelden.