Skocz do zawartości

[C] [STM32F030R8] - Błąd debuggera OpenOCD i logika odwrotna USER BUTTON


only

Pomocna odpowiedź

Witam,

zaczynam pracę z mikrontrolerem STM32F0R8 w postaci płytki nucleo. Będe miał serię pytań, ale na początku związane z prawidłowym działaniem Eclipse. Ogólnie pracuje na Eclipse, płytce Nucleo STM32F030R8 i MxCube. Polecenia wykonuje zgodnie z kursem do płytki Discovery (Link). W załączniku zamieszczam pomocne obrazki.

a. Występuje problem przy debuggowaniu programu (OpenOCD) w środowisku Eclipse. Edit- dodam, że debugger czasami działą poprawnie. Jak stworze od nowa plik MxCube, .c i napisze prosty kod od nowa (np. migająca dioda) to jestem zdolny to debuggowania. Pod dłuższej pracy i częstym zmienianiu kodu wyskakują poniższe błędy.

Bład występuje w pliku button.elf (błąd OpenOCD):

Error in final launch sequence
Failed to execute MI command:
load D:\\STM32\\Button\\SW4STM32\\Button\\Debug\\Button.elf 

Error message from debugger back end:
Error erasing flash with vFlashErase packet
Error erasing flash with vFlashErase packet
 
Unplugged target or STLink already in use or STLink USB driver not installed
 Open On-Chip Debugger 0.10.0-dev-00275-gd486ac2-dirty (2017-03-06-15:22)
 Licensed under GNU GPL v2
 For bug reports, read
 	http://openocd.org/doc/doxygen/bugs.html
 Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
 adapter speed: 1000 kHz
 adapter_nsrst_delay: 100
 srst_only separate srst_nogate srst_open_drain connect_assert_srst
 srst_only separate srst_nogate srst_open_drain connect_assert_srst
 Info : Unable to match requested speed 1000 kHz, using 950 kHz
 Info : Unable to match requested speed 1000 kHz, using 950 kHz
 Info : clock speed 950 kHz
 Error: libusb_open() failed with LIBUSB_ERROR_ACCESS
 Error: open failed (no matching adapter found)
 in procedure 'init' 
 in procedure 'ocd_bouncer'

Launch button.elf has encountered problem. Error in final lunch sequence

Error in final launch sequence
Failed to execute MI command:
-target-select remote localhost:3333

Error message from debugger back end:
Remote communication error.  Target disconnected.: No error.
Remote communication error.  Target disconnected.: No error.

b. Jaka jest kolejność poprawnego usuwania/kompilacji i sprawdzania programu? Zauważyłem, że przy zmianie kodu za każdym razem musze przez proces Clean, Refresh, building co zajmuję troche czasu.

c. Odwrotna logika USER BUTTON - Na podst. poniższego kodu (jeżeli wcisnę guzik (PC13) zapal diodę LD2 (USER LED - PA5). Ale program działa odwrotnie niż napisałem w C. W załączniku na stykach guzika jest tan wysoki (3,3) i jest ciągle zapalona dioda LD2. Gdy wcisnę guzik, napięcie spada do 0V a dioda przestaje świecić. Czyli dioda ciągle się świeci do momentu wciśnięcia guzika. Odwrotnie niż napisałem.

  while (1)
 {
 /* USER CODE END WHILE */

 /* USER CODE BEGIN 3 */
if(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_10) == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
}
else
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
}
 } 
static void MX_GPIO_Init(void)
{

 GPIO_InitTypeDef GPIO_InitStruct;

 /* GPIO Ports Clock Enable */
 __HAL_RCC_GPIOA_CLK_ENABLE();
 __HAL_RCC_GPIOC_CLK_ENABLE();

 /*Configure GPIO pin Output Level */
 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);

 /*Configure GPIO pin : PA5 */
 GPIO_InitStruct.Pin = GPIO_PIN_5;
 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
 GPIO_InitStruct.Pull = GPIO_NOPULL;
 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

 /*Configure GPIO pin : PC10 */
 GPIO_InitStruct.Pin = GPIO_PIN_10;
 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
 GPIO_InitStruct.Pull = GPIO_NOPULL;
 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

Dzięki za pomoc,

pozdrawiam.

Link do komentarza
Share on other sites

Error: libusb_open() failed with LIBUSB_ERROR_ACCESS 

sugeruje, że OpenOCD nie może się uzyskać dostępu do portu USB. Czy w Eclipcie robisz Terminate na sesji debugowania? Jeśli nie, to w tabie o nazwie "Debug" klikasz prawym na główny obiekt w drzewie i klikasz Terminate - to zamyka OpenOCD.

Jeśli pomimo Terminate nie działa, to możesz spróbować po prostu odłączyć i podłączyć płytkę, może pomoże.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.