Skocz do zawartości

Niepoprawne przesyłanie części znaków ASCII po UART w STM32


danielll

Pomocna odpowiedź

Cześć. Wydaje mi się, że jest to dość nietypowa sytuacja. Pracując nad wyświetlaczem w pewnym momencie zauważyłem, że UART zamiast małych liter wyświetla tylko jakieś dziwne znaki. Początkowo to zignorowałem bo i tak docelowo UARTa niepotrzebuję, ale później okazało się ze wyświetlacz, który czyta czcionki z karty SD również nie wyświetla poprawnie malych liter. Precyzując zauważyłem, że w obu przypadkach znaki są wyświetlane do 92 numery w kodzie ASCII.  Sterowanie wyświetlaczem w żaden sposób nie jest powiązane z UARTem a problem, który tam występuje, domyślam się że pochodzi z niewłaściwego odczytywania znaków przed graficzną reprezentacją znaku na karcie SD w stylu:

!

--#--

--#--

--#--

-----

--#--

Przez to pewnie pojawia się jakieś przesunięcie w odczycie czcionki.

Próbowałem też wygenerować nowy, pusty projekt gdzie w mainie umieściłem:

HAL_UART_Transmit(&huart3, (uint8_t*)"ABCDabcd", 10, 100);

Oczywiście tylko cztery pierwsze znaki zostały poprawnie wysłane. Probowałem też wyczyścic pamięć przez ST-Linka, również bez pozytywnego efektu. Domyślam się, że obie sytuacje są w jakiś sposób powiązane lecz nie mam pojęcia jak. Sprawdzałem czy nie uwalil się proc i jakiś zapis do pamięci przez co ucina wartości ale w debugerze nic podejrzanego nie zauważyłem. Sprawdzając przez STM Studio np. wartość 'a' widzę ją poprawnie. Czy ktoś ma jakikolwiek pomysł co mogło się wydarzyć? Układ F429ZI Nucleo.

 

Link do komentarza
Share on other sites

Anonim

HAL_StatusTypeDef HAL_UART_Transmit (UART_HandleTypeDef * huart , uint8_t * pData , uint16_t Size , uint32_t Timeout)

Spróbuj czegoś takiego.To zajmie Ci 5minut.

Oczywiście w Twoim rozwiązaniu będzie    HAL_UART_Transmit (& huart13, buff, strlen (buff), 1000);

Oczywiście linia    MX_USART1_UART_Init(); będzie wyglądać odpowiednio.

--------------------------------------------------- 

MX_GPIO_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
 char buff [50] = "dzisiaj jest zimno\r\n";


  while (1)
  {

      HAL_UART_Transmit (& huart1, buff, strlen (buff), 1000);
      //huart: wskaźnik do struktury UART_HandleTypeDef, która zawiera informacje o konfiguracji dla określonego modułu UART.
      //• pData: wskaźnik do bufora danych (elementy danych u8 lub u16).
     // • Rozmiar: Ilość elementów danych (u8 lub u16) do przesłania
     // • Limit czasu: czas trwania limitu czasu
      //HAL_StatusTypeDef HAL_UART_Transmit (UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size, uint32_t Timeout)
      //huart: Pointer to a UART_HandleTypeDef structure that contains the configuration information for the
    //  specified UART module.
    //  • pData: Pointer to data buffer (u8 or u16 data elements).
    //  • Size: Amount of data elements (u8 or u16) to be sent
    //  • Timeout: Timeout duration
HAL_Delay(2000);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

 

Edytowano przez Gieneq
Zachęcam do korzystania z bloku kodu programu
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.