mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32 Startprobleme


Autor: Aspire (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :
 #include "stm32f10x_lib.h"                        // STM32F10x Library Definitions
#include <stdio.h>
#include "STM32_Init.h"                           // STM32 Initialization
#include "stm32f10x_usart.h"

//#define UART  UART_3
typedef unsigned int          Int32U;   // Unsigned 32 bit quantity

#define LOOP_DLY_100US  450


void Clk_Init (void)
{
  // 1. Clocking the controller from internal HSI RC (8 MHz)
  RCC_HSICmd(ENABLE);
  // wait until the HSI is ready
  while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
  RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
  // 2. Enable ext. high frequency OSC
  RCC_HSEConfig(RCC_HSE_ON);
  // wait until the HSE is ready
  while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);
  // 3. Init PLL
  RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); // 72MHz
  RCC_PLLCmd(ENABLE);
  // wait until the PLL is ready
  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
  // 4. Set system clock dividers
  RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);
  RCC_ADCCLKConfig(RCC_PCLK2_Div8);
  RCC_PCLK2Config(RCC_HCLK_Div1);
  RCC_PCLK1Config(RCC_HCLK_Div2);
  RCC_HCLKConfig(RCC_SYSCLK_Div1);
#ifdef EMB_FLASH
  // 5. Init Embedded Flash
  // Zero wait state, if 0 < HCLK 24 MHz
  // One wait state, if 24 MHz < HCLK 56 MHz
  // Two wait states, if 56 MHz < HCLK 72 MHz
  // Flash wait state
  FLASH_SetLatency(FLASH_Latency_2);
  // Half cycle access
  FLASH_HalfCycleAccessCmd(FLASH_HalfCycleAccess_Disable);
  // Prefetch buffer
  FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
#endif // EMB_FLASH
  // 5. Clock system from PLL
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
}

/*************************************************************************
 * Function Name: Dly100us
 * Parameters: Int32U Dly
 *
 * Return: none
 *
 * Description: Delay Dly * 100us
 *
 *************************************************************************/
void Dly100us(void *arg)
{
Int32U Dly = (Int32U)arg;
  while(Dly--)
  {
    for(volatile int i = LOOP_DLY_100US; i; i--);
  }
}


void UART_init()
{
  
}
/*************************************************************************
 * Function Name: main
 * Parameters: none
 *
 * Return: none
 *
 * Description: main
 *
 *************************************************************************/
void main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
#ifdef DEBUG
   debug();
#endif

  // Init clock system
  Clk_Init();

  // NVIC init
#ifndef  EMB_FLASH
  /* Set the Vector Table base location at 0x20000000 */
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else  /* VECT_TAB_FLASH  */
  /* Set the Vector Table base location at 0x08000000 */
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);

  // Enable timer counting
  //TIM1_Cmd(ENABLE);


  UART_init();
  

  while(1)
  {
    

      
  }
}
#ifdef  DEBUG

void assert_failed(u8* file, u32 line)
{ 
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  /* Infinite loop */
  while (1)
  {
  }
}
#endif
 

MFG

Autor: Erwin Reuss (er-tronik)
Datum:

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

Autor: Aspire (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: joachim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Florian Finsterbusch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael B. (bubi)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael B. (bubi)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.