Skocz do zawartości

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


Pomocna odpowiedź

Napisano

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.

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.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...