Problem mit dem flashen ST-Link/ v2 und Coocox IDE

OP #4825423
Lesenswert?

Ich habe momentan das Problem, dass sich mein Mikrocontroller 
STM32F407VGT6 nicht flashen kann. Zu den Rahmenbedingungen:
-  Ich verwende CooCox zum Erstellen des C- Codes.
-  Das Flashen mache ich über den JTAG Anschluss mit dem ST-Link/ v2.
-  Die Treiber sind alle Installiert für den ST-Link V-2
       (aktuellste Version von STM)
-  Des Weiteren habe ich die Datei STLINKUSBDRIVER.dll
        in der Bin Datei von Workspace.
-  In der Coflash.exe steht der ST-Link und  auf JTAG
-  Auch die Coocox Einstellungen sind auf ST-Link und JTAG.

Wenn ich den Flash oder das Debuggen durchführen will, kommt dieser 
Fehler:

Error: Flash driver function execute timeout
     Erase:  [  0%]pc: 0x200007fc

Woran kann dies liegen??
OP #4825632
Lesenswert?

Hallo,
Also ich habe nach geschaut und die Daten in STM32F4xx.h Stimmen. Die 
Einstellungen in sytem_stm32f4xx.c stimmen ebenso.Der Quarz hier ist 
schon bei 25 MHz.

* 5. This file configures the system clock as follows:
  *======================================================================= 
======
  *======================================================================= 
======
  *        Supported STM32F4xx device revision    | Rev A
  *----------------------------------------------------------------------- 
------
  *        System Clock source                    | PLL (HSE)
  *----------------------------------------------------------------------- 
------
  *        SYSCLK(Hz)                             | 168000000
  *----------------------------------------------------------------------- 
------
  *        HCLK(Hz)                               | 168000000
  *----------------------------------------------------------------------- 
------
  *        AHB Prescaler                          | 1
  *----------------------------------------------------------------------- 
------
  *        APB1 Prescaler                         | 4
  *----------------------------------------------------------------------- 
------
  *        APB2 Prescaler                         | 2
  *----------------------------------------------------------------------- 
------
  *        HSE Frequency(Hz)                      | 25000000
  *----------------------------------------------------------------------- 
------
  *        PLL_M                                  | 25
  *----------------------------------------------------------------------- 
------
  *        PLL_N                                  | 336
  *----------------------------------------------------------------------- 
------
  *        PLL_P                                  | 2
  *----------------------------------------------------------------------- 
------
  *        PLL_Q                                  | 7
  *----------------------------------------------------------------------- 
------
  *        PLLI2S_N                               | NA
  *----------------------------------------------------------------------- 
------
  *        PLLI2S_R                               | NA
  *----------------------------------------------------------------------- 
------
  *        I2S input clock                        | NA
  *----------------------------------------------------------------------- 
------
  *        VDD(V)                                 | 3.3
  *----------------------------------------------------------------------- 
------
  *        Main regulator output voltage          | Scale1 mode
  *----------------------------------------------------------------------- 
------
  *        Flash Latency(WS)                      | 5
  *----------------------------------------------------------------------- 
------
  *        Prefetch Buffer                        | OFF
  *----------------------------------------------------------------------- 
------
  *        Instruction cache                      | ON
  *----------------------------------------------------------------------- 
------
  *        Data cache                             | ON
  *----------------------------------------------------------------------- 
------
  *        Require 48MHz for USB OTG FS,          | Enabled
  *        SDIO and RNG clock                     |
  *----------------------------------------------------------------------- 
------
  *======================================================================= 
======
  ************************************************************************ 
******


Außer in der system_stm32f4xx.c ist sind die Daten anders. Bin mir aber 
in dieser Datei unsicher was zu verändern.

void SystemInit(void)
{
  /* FPU settings 
------------------------------------------------------------*/
  #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
    SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));  /* set CP10 and CP11 
Full Access */
  #endif

  /* Reset the RCC clock configuration to the default reset state 
------------*/
  /* Set HSION bit */
  RCC->CR |= (uint32_t)0x00000001;

  /* Reset CFGR register */
  RCC->CFGR = 0x00000000;

  /* Reset HSEON, CSSON and PLLON bits */
  RCC->CR &= (uint32_t)0xFEF6FFFF;

  /* Reset PLLCFGR register */
  RCC->PLLCFGR = 0x24003010;

  /* Reset HSEBYP bit */
  RCC->CR &= (uint32_t)0xFFFBFFFF;

  /* Disable all interrupts */
  RCC->CIR = 0x00000000;

#ifdef DATA_IN_ExtSRAM
  SystemInit_ExtMemCtl();
#endif /* DATA_IN_ExtSRAM */

  /* Configure the System clock source, PLL Multiplier and Divider 
factors,
     AHB/APBx prescalers and Flash settings 
----------------------------------*/
  SetSysClock();

  /* Configure the Vector Table location add offset address 
------------------*/
#ifdef VECT_TAB_SRAM
  SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in 
Internal SRAM */
#else
  SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation 
in Internal FLASH */
#endif
}

/**
   * @brief  Update SystemCoreClock variable according to Clock Register 
Values.
  *         The SystemCoreClock variable contains the core clock (HCLK), 
it can
  *         be used by the user application to setup the SysTick timer 
or configure
  *         other parameters.
  *
  * @note   Each time the core clock (HCLK) changes, this function must 
be called
  *         to update SystemCoreClock variable value. Otherwise, any 
configuration
  *         based on this variable will be incorrect.
  *
  * @note   - The system frequency computed by this function is not the 
real
  *           frequency in the chip. It is calculated based on the 
predefined
  *           constant and the selected clock source:
  *
  *           - If SYSCLK source is HSI, SystemCoreClock will contain 
the HSI_VALUE(*)
  *
  *           - If SYSCLK source is HSE, SystemCoreClock will contain 
the HSE_VALUE(**)
  *
  *           - If SYSCLK source is PLL, SystemCoreClock will contain 
the HSE_VALUE(**)
  *             or HSI_VALUE(*) multiplied/divided by the PLL factors.
  *
  *         (*) HSI_VALUE is a constant defined in stm32f4xx.h file 
(default value
  *             16 MHz) but the real value may vary depending on the 
variations
  *             in voltage and temperature.
  *
  *         (**) HSE_VALUE is a constant defined in stm32f4xx.h file 
(default value
  *              25 MHz), user has to ensure that HSE_VALUE is same as 
the real
  *              frequency of the crystal used. Otherwise, this function 
may
  *              have wrong result.
  *
  *         - The result of this function could be not correct when 
using fractional
  *           value for HSE crystal.
  *
  * @param  None
  * @retval None
  */


Anders sind die
 RCC->CR |= (uint32_t)0x00000001;

  /* Reset CFGR register */
  RCC->CFGR = 0x00000000;

  /* Reset HSEON, CSSON and PLLON bits */
  RCC->CR &= (uint32_t)0xFEF6FFFF;

  /* Reset PLLCFGR register */
  RCC->PLLCFGR = 0x24003010;

  /* Reset HSEBYP bit */
  RCC->CR &= (uint32_t)0xFFFBFFFF;

  /* Disable all interrupts */
  RCC->CIR = 0x00000000;



Wenn ich die verändere kann ich dann den Mikrocontroller zerstören??


Gruss Sven
Gast #4825645
Lesenswert?

Sven A. schrieb:
> Wenn ich die verändere kann ich dann den Mikrocontroller zerstören??

Nein. Du musst die PLLs sogar hier anpassen. Als Hilfe für die 
Berechnung der Parameter kannst Du das Clock-Konfigurationstool welche 
im Programm STM32CubeMX benutzen.

Das schlimmste was passieren kann, ist das jetzige Verhalten.


Gruß
Daniel
OP #4825708
Lesenswert?

Ich habe mir Cube heruntergeladen. Auch den JTAG konfiguriert. Im Bild 
ist Clock Configuration zu sehen. Aber was soll ich da jetzt berechnen?

Auch die Änderung des Programmes:

void SystemInit(void)
{
  /* FPU settings 
------------------------------------------------------------*/
  #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
    SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));  /* set CP10 and CP11 
Full Access */
  #endif

  /* Reset the RCC clock configuration to the default reset state 
------------*/
  /* Set HSION bit */
  RCC->CR |= (uint32_t)0x00000001;

  /* Reset CFGR register */
  RCC->CFGR = 0x00000000;

  /* Reset HSEON, CSSON and PLLON bits */
  RCC->CR &= (uint32_t)0xFEF6FFFF;

  /* Reset PLLCFGR register */
  RCC->PLLCFGR = 0x24003010;

  /* Reset HSEBYP bit */
  RCC->CR &= (uint32_t)0xFFFBFFFF;

  /* Disable all interrupts */
  RCC->CIR = 0x00000000;

#ifdef DATA_IN_ExtSRAM
  SystemInit_ExtMemCtl();
#endif /* DATA_IN_ExtSRAM */

Was soll ich den hier genau eintragen?

Vielen Dank für dein Antwort.

Gruß Sven
Angehängte Dateien:
Gast #4825779
Lesenswert?

1. Hast Du einen externen oder internen Quarz? Wenn Du einen externen 
hast, muss dieser in der Variable HSE_Value = Frequenz in Hz in der 
stm32f4xx.h einegstellt werden. Wenn nicht, ist dieses nicht notwendig.

2. Stelle alle PLLs ein in der system_stm32f4xx.c und zwar dort wo Dein 
#elif define deinControllertyp ist. Nutze die Suchfunktion und stelle 
für PLL_M=16, PLL_N=192 und PLL_P=2 die entsprechenden Werte ein.

3. Konfiguiere RCC und gebe für die Ports den Takt frei. (Infos im 
RM!!!)

4. Have a lot of fun!

Hilfreiche Links:

http://www.diller-technologies.de/stm32.html#rcc
https://stm32f4-discovery.net/2015/01/properly-set-clock-speed-stm32f4xx-devices/

Gruß
Daniel
Gast #4825798
Lesenswert?

Was Du noch machen kannst, schnell ein Projekt mit Cube erzeugen und auf 
den Controller hochladen. Lässt sich es flashen wird es einen Fehler in 
Deinem C-Code (sehr wahrscheinlich die fehlerhafte Clock-Einstellungen 
in den o.a. Dateien).

Gruß
Daniel
OP #4825814
Lesenswert?

Hallo Daniel,

zu 1. ich habe einen internen Quarz der schon auf 25 Mhz gesetzt 
ist.Siehe Bild.

zu 2. PLL_M=16, PLL_N=192 und PLL_P=2

zu 3. Die RCC sind mit den Ports verbunden und geben den Takt vor.

Es wird trotzdem der Fehler angezeigt.



Ok werde es mal mit einem Programm mit STM_ Cube probieren allerdings 
habe ich keine Erfahrung mit STM_Cube.


Grüße

Sven
Angehängte Dateien:
Gast #4825827
Lesenswert?

Sven A. schrieb:
> ich habe einen internen Quarz der schon auf 25 Mhz gesetzt
> ist.Siehe Bild.

HSE ist der externe Quarz. HSI ist der interne "Quarz" (ein RC-Glied). 
Der Wert steht im RM(ich glaube 16 MHz). Bitte lese das RM und die Links 
die ich Dir empfohlen habe.

Gruß
Daniel
Gast #4826059
Lesenswert?

Sven A. schrieb:
> zu 2. PLL_M=16, PLL_N=192 und PLL_P=2

Das ist doch Quatsch. Lass Dich nicht beirren.
Wenn Du einen externen 25MHz Quarz hast, dann lass die Einstellungen so, 
wie Du sie hattest.
Die Rechnung ist ganz simpel (siehe Reference Manual):
Quarz-Takt / PLL_M * PLL_N / PLL_P.
Die Anmerkungen im RM beachten, wenn Du was Anderes einstellst.


Das Flashen muss aber auch mit falschem Programm funktionieren. Notfalls 
den Reset gedrückt halten, falls Dein Programm SW/JTAG wegkonfiguriert.
Persönliche Seite #4826088
Lesenswert?

STler schrieb:
> Das ist doch Quatsch. Lass Dich nicht beirren.
> Wenn Du einen externen 25MHz Quarz hast, dann lass die Einstellungen so,
> wie Du sie hattest.

Im Clock-Tree hat er den internen Quarz mit 16 MHz (HSI) konfiguriert, 
redet aber von einem externen Quarz. Wenn man einen externen Quarz 
einsetzt und diesen aktiviert (PLLCLK) dann müssen die PLL-Parameter, je 
nach gewünschten Peripherietakt, angepasst werden. Dies gilt nicht bei 
internem Quarz.

Der TO schrieb:

Sven A. schrieb:
> zu 1. ich habe einen internen Quarz der schon auf 25 Mhz gesetzt
> ist.Siehe Bild.

Das ist inkonsistent. Entweder er hat einen externen Quarz mit 25 MHz 
oder den internen RC mit 16 MHz. Leider hat er seinen  Code nicht 
hochgeladen. Glaskugel und so.

Sven A. schrieb:
> Ok werde es mal mit einem Programm mit STM_ Cube probieren allerdings
> habe ich keine Erfahrung mit STM_Cube.

Um zu prüfen ob der µC über die Wupper ist, schnell mit Cube ein Projekt 
aufziehen, Clocks konfigurieren und Code generieren und versuchen zu 
flashen. Funktioniert dies, ist es definitiv ein Fehler in deiner 
Software.

Gruß
Daniel

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren