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??
Coocox neustarten, sonst ist dein µC tot. Hast du einen anderen zum Testen?
Ging es denn vorher? Wenn nicht, PLLs in der system_stm32f4xx.c überprüfen. Gruß Daniel
Hallo, Danke für die schnellen Antworten. Dieser Mikrocontroller ist neu und wird zum erstenmal geflasht. @ Daniel was genau soll ich in der system_stm32f4xx.c überprüfen? Habe auch keinen anderen zum testen. Gruß Sven
Sven A. schrieb: > @ Daniel was genau soll ich in der system_stm32f4xx.c überprüfen? Die Clocks. Ich hatte mal selber das Problem: Beitrag "STM32F446ret6 JTAG-Problem" Weiter unten findest Du ein möglichen Fix. Gruß Daniel
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
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
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
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
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
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
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
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.
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
Hol dir erst mal das STM32 ST-LINK utility und probier, ob sich der Programmieradapter damit ansprechen läßt: http://www.st.com/en/embedded-software/stsw-link004.html
Hallo an alle, Vielen Dank für die Antworten. Es funktioniert. Wichtig hier bei war es den Externen Quarz auf 8MHz zu setzen. !!!!Man sollte bei so einer Progammierung genau das RM lesen.!!!!!! Grüße Sven
Ist zwar schon gelöst.. Ich hatte mich mal auf eigener Platine mit den LQFP48 Stm32f030c8t6 und Stm32f103c8t6 vergriffen.. Da die soweit Pinkompatibel sind gab es den gleichen Fehler, da musste ich in Coocox nur das Board umstellen. Muss man erstmal drauf kommen.
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.