Guten Tag zusammen Bei der implementierung einer Uart Schnittstelle, die ich als feedback zwischen PC und einem Stm32f070CBT6 verwende (IDE Keil /ARM Compiler/MDK-Proffessional),habe ich folgendes Problem: - Wenn ich debugge bekomme ich alle relevanten Informationen, auch nach einem SW reset - Wenn ich den chip flash bekomme ich nur wirre Zeichen, zumindest bei allen Ausgaben, die vor dem Main ausgeführt werden (nach einem HW reset).. Ich gehe von einem Timming Problem aus, im debuge mode werden die Ausgänge auf digital gesetzt daher könnte es sein, dass nach dem download die Pins nicht richtig konfiguriert sind. Die fehlerhaften Informationen erhalte ich nach dem HW Reset. Was ändert sich noch beim debugen im gegensatz zum eine download auf dem Chip? Über einen heissen tip würde ich mich sehr freuen :)
Zu wenig Informationen... Du debuggst im RAM oder Flash? Was meinst du ganz genau mit SW Reset? Es gibt davon verschiedene und beim debuggen wird ganz gerne kein echter Reset ausgelöst. Michael schrieb: > zumindest bei > allen Ausgaben, die vor dem Main ausgeführt werden Welchen Takt nimmst du und wann initialisierst du ihn? Takt und Uart müssen natürlich vor der ersten Ausgabe initialisiert werden.
Du debuggst im RAM oder Flash? --> im Flash Was meinst du ganz genau mit SW Reset? --> Der Watchdog self-test erfolgt wie in Bild 3/4 dargestellt (Auszug Applikation note 3307) /*********************************************************************** *******/ /** * @brief Verifies the watchdog by forcing watchdog resets * @param : None * @retval : None */ void STL_WDGSelfTest(void) { /* ======================================================================== ======*/ /* MISRA violation of rule 12.4 - side effect of && and || operators ignored */ #ifdef _IAR_SYSTEMS_ICC_ /* IAR Compiler */ #pragma diag_suppress=Pm026 #endif /* _IAR_SYSTEMS_ICC_ */ #ifdef STL_VERBOSE_POR if (__HAL_RCC_GET_FLAG(RCC_FLAG_PINRST) != RESET) printf("Pin reset \r\n"); if (__HAL_RCC_GET_FLAG(RCC_FLAG_PORRST) != RESET) printf("POR reset \r\n"); if (__HAL_RCC_GET_FLAG(RCC_FLAG_SFTRST) != RESET) printf("SW reset \r\n"); if (__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) != RESET) printf("IWDG reset \r\n"); if (__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST) != RESET) printf("WWDG reset \r\n"); if (__HAL_RCC_GET_FLAG(RCC_FLAG_LPWRRST) != RESET) printf("LP reset \r\n"); #endif /* STL_VERBOSE_POR */ /* start watchdogs test if one of the 4 conditions below is valid */ if ( (__HAL_RCC_GET_FLAG(RCC_FLAG_PORRST) != RESET)\ || (__HAL_RCC_GET_FLAG(RCC_FLAG_SFTRST) != RESET)\ || (__HAL_RCC_GET_FLAG(RCC_FLAG_LPWRRST) != RESET)\ || ((__HAL_RCC_GET_FLAG(RCC_FLAG_PINRST) != RESET) && (__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) == RESET) && (__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST) == RESET))) { #ifdef STL_VERBOSE_POR printf("... Power-on or software reset, testing IWDG ... \r\n"); #endif /* STL_VERBOSE_POR */ #if defined(STL_EVAL_MODE) /* IWDG at debug mode */ __DBGMCU_CLK_ENABLE(); __HAL_FREEZE_IWDG_DBGMCU(); #endif /* STL_EVAL_MODE */ /* Clear all flags before resuming test */ __HAL_RCC_CLEAR_FLAG(); /* Setup IWDG to minimum period */ IwdgHandle.Instance = IWDG; IwdgHandle.Init.Prescaler = IWDG_PRESCALER_4; IwdgHandle.Init.Reload = 1; #ifdef IWDG_FEATURES_BY_WINDOW_OPTION IwdgHandle.Init.Window = IWDG_WINDOW_DISABLE; #endif /* IWDG_FEATURES_BY_WINDOW_OPTION */ /* Initialization */ HAL_IWDG_Init(&IwdgHandle); /* Wait for an independent watchdog reset */ while(1) { } } else /* Watchdog test or software reset triggered by application failure */ { /* If WWDG only was set, re-start the complete test (indicates a reset triggered by safety routines */ if ((__HAL_RCC_GET_FLAG(RCC_FLAG_PINRST) != RESET) && (__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) == RESET) && (__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST) != RESET)) { __HAL_RCC_CLEAR_FLAG(); #ifdef STL_VERBOSE_POR printf("... WWDG reset, re-start WDG test ... \r\n"); #endif /* STL_VERBOSE_POR */ NVIC_SystemReset(); } else /* If IWDG only was set, continue the test with WWDG test*/ { if ((__HAL_RCC_GET_FLAG(RCC_FLAG_PINRST) != RESET) && (__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) != RESET) && (__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST) == RESET)) { /* If IWDG only was set, test WWDG*/ #ifdef STL_VERBOSE_POR printf("... IWDG reset from test or application, testing WWDG\r\n"); #endif /* STL_VERBOSE_POR */ #if defined(STL_EVAL_MODE) /* WWDG at debug mode */ __DBGMCU_CLK_ENABLE(); __HAL_FREEZE_WWDG_DBGMCU(); #endif /* STL_EVAL_MODE */ /* Setup WWDG to minimum period */ __WWDG_CLK_ENABLE(); WwdgHandle.Instance = WWDG; WwdgHandle.Init.Prescaler = WWDG_PRESCALER_1; WwdgHandle.Init.Counter = 64; WwdgHandle.Init.Window = 63; WwdgHandle.Init.EWIMode = WWDG_EWI_DISABLE; HAL_WWDG_Init(&WwdgHandle); while(1) { } } else /* If both flags IWDG & WWDG flags are set, means that watchdog test is completed */ { if ((__HAL_RCC_GET_FLAG(RCC_FLAG_PINRST) != RESET) && (__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) != RESET) && (__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST) != RESET)) { __HAL_RCC_CLEAR_FLAG(); #ifdef STL_VERBOSE_POR printf("... WWDG reset, WDG test completed ... \r\n"); #endif /* STL_VERBOSE_POR */ } else /* Unexpected Flag configuration, re-start WDG test */ { __HAL_RCC_CLEAR_FLAG(); #ifdef STL_VERBOSE_POR printf("...Unexpected Flag configuration, re-start WDG test... \r\n"); #endif /* STL_VERBOSE_POR */ NVIC_SystemReset(); } /* End of Unexpected Flag configuration */ } /* End of normal test sequence */ } /* End of partial WDG test (IWDG test done) */ } /* End of part where 1 or 2 Watchdog flags are set */ #ifdef _IAR_SYSTEMS_ICC_ /* IAR Compiler */ #pragma diag_default=Pm026 #endif /* _IAR_SYSTEMS_ICC_ */ /* ======================================================================== ======*/ } Welchen Takt nimmst du und wann initialisierst du ihn? 1. Im $Sub$$main stelle ich auf HSI void StartUpClock_Config(void) { RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_OscInitTypeDef RCC_OscInitStruct; /* Enable Power Control clock */ __PWR_CLK_ENABLE(); /* Enable HSI Oscillator */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6; RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1; if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { #ifdef STL_VERBOSE_POR printf("PLL clock config failure\n\r"); #endif /* STL_VERBOSE_POR */ FailSafePOR(); } /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */ RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1); RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) { #ifdef STL_VERBOSE_POR printf("PLL clock switch failure\n\r"); #endif /* STL_VERBOSE_POR */ FailSafePOR(); } } Anschliessen führe ich folgende Startup tests gemäss class B software durch: - CPU core self-test - Watchdogs self-test - Switch PLL On - Flash integrity check - RAM funcional check - Clock frequency check (evtl liegt hier das Problem, Timer 14 läuft auf dem HSI und ich messe den LSI um die Frequenz zu überprüfen. /*********************************************************************** *******/ /** * @brief Configure TIM14 to measure LSI period * @param : None * @retval : ErrorStatus = (ERROR, SUCCESS) */ ErrorStatus STL_InitClock_Xcross_Measurement(void) { ErrorStatus result = SUCCESS; TIM_HandleTypeDef tim_capture_handle; TIM_IC_InitTypeDef tim_input_config; RCC_OscInitTypeDef RCC_OscInitStruct; RCC_PeriphCLKInitTypeDef PeriphClkInitStruct; __PWR_CLK_ENABLE(); HAL_PWR_EnableBkUpAccess(); /* Configue LSI as RTC clock soucre */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_LSE; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; RCC_OscInitStruct.LSEState = RCC_LSE_OFF; RCC_OscInitStruct.LSIState = RCC_LSI_ON; if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { result = ERROR; } PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC; PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI; if(HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { result = ERROR; } /* Enable RTC Clock */ __HAL_RCC_RTC_ENABLE(); /* TIM14 Peripheral clock enable */ __TIM14_CLK_ENABLE(); /* Configure the NVIC for TIM14 */ HAL_NVIC_SetPriority(TIM14_IRQn, 4u, 0u); /* Enable the TIM14 global Interrupt */ HAL_NVIC_EnableIRQ(TIM14_IRQn); /* TIM14 configuration: Input Capture mode --------------------- The LSI oscillator is connected to TIM14 CH1 via RTC clock. The Rising edge is used as active edge, ICC input divided by 8 The TIM14 CCR1 is used to compute the frequency value. ------------------------------------------------------------ */ tim_capture_handle.Instance = TIM14; tim_capture_handle.Init.Prescaler = 0u; //jt löschen tim_capture_handle.Init.CounterMode = TIM_COUNTERMODE_UP; tim_capture_handle.Init.Period = 0xFFFFFFFFul; //jt löschen 0xFFFFFFFFul; tim_capture_handle.Init.ClockDivision = 0u; tim_capture_handle.Init.RepetitionCounter = 0u; /* define internal HAL driver status here as handle structure is defined locally */ __HAL_RESET_HANDLE_STATE(&tim_capture_handle); if(HAL_TIM_IC_Init(&tim_capture_handle) != HAL_OK) { /* Initialization Error */ result = ERROR; } /* Connect internally the TIM5_CH1 Input Capture to the LSI clock output */ HAL_TIMEx_RemapConfig(&tim_capture_handle, TIM_TIM14_RTC); /* Configure the TIM14 Input Capture of channel 1 */ tim_input_config.ICPolarity = TIM_ICPOLARITY_RISING; tim_input_config.ICSelection = TIM_ICSELECTION_DIRECTTI; tim_input_config.ICPrescaler = TIM_ICPSC_DIV8; tim_input_config.ICFilter = 0u; if(HAL_TIM_IC_ConfigChannel(&tim_capture_handle, &tim_input_config, TIM_CHANNEL_1) != HAL_OK) { /* Initialization Error */ result = ERROR; } /* Reset the flags */ tim_capture_handle.Instance->SR = 0u; LSIPeriodFlag = 0u; /* Start the TIM Input Capture measurement in interrupt mode */ if(HAL_TIM_IC_Start_IT(&tim_capture_handle, TIM_CHANNEL_1) != HAL_OK) { /* Initialization Error */ result = ERROR; } return(result); } - Control Flow check Die Uart Konfiguration sieht wie folgt aus: * @brief Configure the UART peripheral * @param None * @retval None */ void USART_Configuration(void) { RCC_PeriphCLKInitTypeDef PeriphClkInit; RCC_OscInitTypeDef RCC_OscInitStruct; /* Start high speed internal (HSI) oscillator */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6; RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1; HAL_RCC_OscConfig(&RCC_OscInitStruct); /* HSI feeds USART1 */ PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1; PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_HSI; HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit); /* UART configuration */ UartHandle.Instance = USART1; //jt USARTx UartHandle.Init.BaudRate = 115200; UartHandle.Init.WordLength = UART_WORDLENGTH_8B; UartHandle.Init.StopBits = UART_STOPBITS_1; UartHandle.Init.Parity = UART_PARITY_NONE; UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE; UartHandle.Init.Mode = UART_MODE_TX; __HAL_UART_RESET_HANDLE_STATE(&UartHandle); // SystemCoreClockUpdate(); // jt HAL_UART_Init(&UartHandle); //jt } 2. Im main werden dann wieder zykliche run-time tests durchgeführt. Clock Konfiguration sieht so aus: /* ------------------------------------------------------------------------ -*/ /** * @brief System Clock Configuration * The system Clock is configured as follow : * System Clock source = PLL (HSI) * SYSCLK(Hz) = 48000000 * HCLK(Hz) = 48000000 * AHB Prescaler = 1 * APB1 Prescaler = 1 * PLL_MUL = 6 * PLL_PREDIV = 1 * VDD(V) = 3.3 * @param None * @retval None */ void SystemClock_Config(void) { RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_OscInitTypeDef RCC_OscInitStruct; /* Enable Power Control clock */ __PWR_CLK_ENABLE(); RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6; RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1; if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { #ifdef STL_VERBOSE_POR printf("PLL Osc config failure\n\r"); #endif /* STL_VERBOSE_POR */ FailSafePOR(); } /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */ RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1); RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, MAX_FLASH_LATENCY) != HAL_OK) { #ifdef STL_VERBOSE_POR printf("PLL clock config failure\n\r"); #endif /* STL_VERBOSE_POR */ FailSafePOR(); } }
Michael schrieb: > - Wenn ich debugge bekomme ich alle relevanten Informationen, auch nach > einem SW reset Michael schrieb: > Was meinst du ganz genau mit SW Reset? --> Der Watchdog self-test > erfolgt wie in Bild 3/4 dargestellt (Auszug Applikation note 3307) Es ging mir um den SW reset beim Debuggen. Ich vermute, dass es kein echter Reset ist und damit die Einstellungen der UART erhalten bleiben. Michael schrieb: > void USART_Configuration(void) Offen ist, ob du die UART Initialisierung vor deinen ganzen Tests aufrufst. Da es hier um Selbsttests geht, ich g´kenne es so, dass diese vor der Initialisierung der C-Umgebung durchgeführt werden. Da wäre ich mir unsicher, ob printf() schon funktioniert.
Steffen R. schrieb: > Offen ist, ob du die UART Initialisierung vor deinen ganzen Tests > aufrufst. Die Uart Konfiguration erfolgt vor den startup selbsttests, anschschliessend nach den startup und vor den run-time tests nach dem Einsprung ins main erneut Steffen R. schrieb: > Da es hier um Selbsttests geht, ich g´kenne es so, dass diese vor der > Initialisierung der C-Umgebung durchgeführt werden. Da wäre ich mir > unsicher, ob printf() schon funktioniert. Mein Problem ist eben, dass ich die printf Ausgaben nur beim debuggen mit Hterm anzeigen kann, aber beim debuggen failed z.B. der flash integritäts test. Wenn ich den code auf den chip flash, funktioniert das Programm, aber ich weiss nicht genau wie es sich verhält, weil ich kein Feedback über den Erfolg oder fail der Tests bekomme. Das mit dem Reset schaue ich mir jetzt nochmal genauer an.
Michael schrieb: > Mein Problem ist eben, dass ich die printf Ausgaben nur beim debuggen > mit Hterm anzeigen kann, aber beim debuggen failed z.B. der flash > integritäts test. Wenn ich den code auf den chip flash, funktioniert das > Programm, aber ich weiss nicht genau wie es sich verhält, weil ich kein > Feedback über den Erfolg oder fail der Tests bekomme. Verstehe ich nicht. Ich debugge auf dem Chip... Für mich ist es nur ein Unterschied, ob ich den Jtag gesteckt habe oder nicht. Oder ob ich mit Debug oder Release übersetze. Wenn du das Projekt nicht selbst aufgesetzt hast, kann es sein, dass es nur im Release nichts anzeigt, z.B. weil STL_VERBOSE_POR nicht gesetzt ist. Nimmst du eine echte UART Schnittstelle am PC oder eine virtuelle per USB. Bei letzterem stören vielleicht die vielen Resets. Vielleicht nutzt Du im Release auch eine andere printf() Implementierung. Ich persönlich würde erstmal die Selbsttest übergehen und schauen, dass das Programm ohne Debugger überhaupt eine Ausgabe macht. Und im STL_InitClock_Xcross_Measurement() wird der Clock geändert. Falls hier was fehlschlägt, wird dann der Clock wieder zurückgeändert, bevor eine Ausgabe erfolgt? Wie wäre es statt printf() eine Funktion anzuspringen, bei der zuerst Clock und UART wieder richtig eingestellt werden und dann die Ausgabe erfolgt. Naja, die Ausgaben sind auch nur im Fehlerfall. Vielleicht läuft ja alles durch?
Steffen R. schrieb: > Wenn du das Projekt nicht selbst aufgesetzt hast, kann es sein, dass es > nur im Release nichts anzeigt, z.B. weil STL_VERBOSE_POR nicht gesetzt > ist. Das Beispiel ist von STM und ich habe es für meine Zwecke angepasst, STL_VERBOSE_POR ist gesetzt und wird ausgeführt Steffen R. schrieb: > Nimmst du eine echte UART Schnittstelle am PC oder eine virtuelle per > USB. Bei letzterem stören vielleicht die vielen Resets. USB hab aber auch mit dem oszi nichts vernünftiges bekommen > Vielleicht nutzt Du im Release auch eine andere printf() > Implementierung. > Ich persönlich würde erstmal die Selbsttest übergehen und schauen, dass > das Programm ohne Debugger überhaupt eine Ausgabe macht. Die Ausgabe erfolgt, aber die Zeichen werden nicht detektiert.. unten habe ich die Ausgabe mit debugger und nach dem flashen gepostet > Und im STL_InitClock_Xcross_Measurement() wird der Clock geändert. Falls > hier was fehlschlägt, wird dann der Clock wieder zurückgeändert, bevor > eine Ausgabe erfolgt? > Wie wäre es statt printf() eine Funktion anzuspringen, bei der zuerst > Clock und UART wieder richtig eingestellt werden und dann die Ausgabe > erfolgt. Eigentlich ja, aber ich schreibe jetzt mal wie du gesagt hast eine Funktion welche clock &Uart immer gleich initialisiert > Naja, die Ausgaben sind auch nur im Fehlerfall. Vielleicht läuft ja > alles durch? Erfolgreiche Tests werden ebenfalls ausgegeben, sorry wenn ich mich undeutlich ausgedrückt habe, die Zeichen kommen immer beim debuggen und flashen nur sind Sie beim flashen falsch angezeigt wie in Bild 1, deshalb dachte ich an ein timming Problem oder das die Uart die falsche baudrate berechnet beim debuggen: <\n> <\n> <\r> ******* Self Test Library Init (Zeile 153 - STL_StartUp) *******<\n> <\r> Start-up CPU Test OK<\n> <\r>Pin reset <\r><\n> SW reset <\r><\n> ... Power-on or software reset, testing IWDG ... <\r><\n> <\n> <\n> <\r> ******* Self Test Library Init (Zeile 153 - STL_StartUp) *******<\n> <\r> Start-up CPU Test OK<\n> <\r>Pin reset <\r><\n> IWDG reset <\r><\n> ... IWDG reset from test or application, testing WWDG<\r><\n> <\n> <\n> <\r> ******* Self Test Library Init (Zeile 153 - STL_StartUp) *******<\n> <\r> Start-up CPU Test OK<\n> <\r>Pin reset <\r><\n> IWDG reset <\r><\n> WWDG reset <\r><\n> ... WWDG reset, WDG test completed ... <\r><\n> FLASH 32-bit CRC Error at Start-up<\n> <\r> >>>>>>>>>> POR FailSafe Mode <<<<<<<<<<<\n> und so siehts nach dem flash download aus: ?|}????x?<30>??~^?????O?|=???}?<31>??z?<<30>?????<31>/?}???z?>?x~????x?? ??=_??~?<31>????????????z???????>^<15>?~??<31>?}<31><15>??^??}?^????? ?z~??^?{<??{_???^<31>??}????|}????x?<30>??~^?????O?|=???}?<31>??z?<<30 >?????<31>/?}???z?>?x~????x????=_??~?<31>?????o?|??<31>?????????^<31 >????????}?__/?z????????{????z?>?y?<???}<???_??_/???|}????x?<30>??~^? ????O?|=???}???|=??????x=?????z?>?x~????x????=_??~?<31>?<31><15>???? ?o??<31>?????????^<31>????????__<31>????????}<31>/?y>^??~?<30>/?><30>?? {????y???x??x}??<?7?(:<25>?}=<28>?<25>;{<_?_\~<29><25><????|<27>{ Clock frequency OK <\n> <\r> Control Flow Checkpoint 2 OK <\n> <\r><\n> <\r> STM32F0xx Cortex-M0 <\n> <\r> IEC60335 test @ARMc <\n> <\r> ... main routine starts ...<\r><\n> Ich versuchs jetzt mal mit deinem Vorschlag, vielen Dank für die Mühe, echt klasse
Michael schrieb: > und so siehts nach dem flash download aus: > > ?|}????x?<30>??~^?????O?|=???}?<31>??z?<<30>?????<31>/?}???z?>?x~????x?? > ??=_??~?<31>????????????z???????>^<15>?~??<31>?}<31><15>??^??}?^????? > ?z~??^?{<??{_???^<31>??}????|}????x?<30>??~^?????O?|=???}?<31>??z?<<30 >>?????<31>/?}???z?>?x~????x????=_??~?<31>?????o?|??<31>?????????^<3 1 >>????????}?__/?z????????{????z?>?y?<???}<???_??_/???|}????x?<30>??~^ ? > ????O?|=???}???|=??????x=?????z?>?x~????x????=_??~?<31>?<31><15>???? > ?o??<31>?????????^<31>????????__<31>????????}<31>/?y>^??~?<30>/?><30>?? > {????y???x??x}??<?7?(:<25>?}=<28>?<25>;{<_?_\~<29><25><????|<27>{ Clock > frequency OK <\n> > <\r> Control Flow Checkpoint 2 OK <\n> > <\r><\n> > <\r> STM32F0xx Cortex-M0 <\n> > <\r> IEC60335 test @ARMc <\n> > <\r> ... main routine starts ...<\r><\n> > > Ich versuchs jetzt mal mit deinem Vorschlag, vielen Dank für die Mühe, > echt klasse Ich tippe mal auf falschen Takt (LSI statt HSI?) oder darauf, dass das Startbit nicht korrekt erkannte wird (von deinem RS232 nach USB Umsetzer). Wenn möglich, mal auf 2 Stoppbits gehen? Vielleicht kann er dann auch besser das Startbit erkennen. Michael schrieb: > USB hab aber auch mit dem oszi nichts vernünftiges bekommen Da etwas herauskommt, verstehe ich diese Aussage nicht. Heißt es du siehst dort auch die Wirren Zeichen oder "unsinnige" Pegelwechsel?
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.