Skocz do zawartości

Leroy

Użytkownicy
  • Zawartość

    8
  • Rejestracja

  • Ostatnio

O Leroy

  • Urodziny 08.04.2000

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Warszawa
  • Programuję w
    C

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

Leroy's Achievements

2/10

2/10 (2/10)

1

Reputacja

  1. Problem już rozwiązany Zresetowałem konfigurację SPI2 w CubeMX, aby na nowo wygenerować kod, ale nic to nie dało. Zmieniłem więc na SPI3 i tam transmisja z DMA zadziałała i został wywołany callback. Po udanej transmisji z wykorzystaniem DMA wyłączyłem SPI3 i ponownie włączyłem SPI2 + DMA i grafika wyświetliła się na ekranie. Najwyraźniej był to problem z konfiguracją po stronie CubeMX, bo kod był w porządku "Reset" polegający na odpaleniu innego SPI jakoś załatwił sprawę
  2. Cześć , w czasie przerabiania kursu natrafiłem na pewien problem. Funkcja lcd_copy() z HAL_SPI_Transmit() działa poprawnie. Niestety po zmianie na HAL_SPI_Transmit_DMA() pojawił się problem. Na ekranie widzę jedynie kolorowe piksele (inicjalizację wyświetlacza), nie wyświetla się napis "Hello World!". W debuggerze ustawiłem breakpoint w funkcji HAL_SPI_TxCpltCallback(), lecz program nie zatrzymał się w tym miejscu. Dodałem również funkcję HAL_SPI_ErrorCallback() z breakpointem w środku, aby złapać ewentualny błąd - tutaj również program nie dotarł. Zmieniłem z ciekawości na opcję z przerwaniami HAL_SPI_Transmit_IT() - działała bez zarzutu i wywoływała przerwanie informujące o zakończeniu transmisji, które nie było wywoływane przez DMA. Szukając rozwiązania zmieniłem również priorytet przerwania od DMA z 0 na 2 (SysTick ma priorytet 0). W zakładce DMA Settings przy konfiguracji SPI2 zmieniłem Priority z Low na Very High - także bez rezultatu. Czy ktoś z Was spotkał się z czymś takim? Macie może pomysł co może być przyczyną problemu na podstawie tego, co opisałem? Będę wdzięczny za pomoc
  3. @Elvis bardzo dziękuję za pomoc To, co napisałeś, było jednym z dwóch błędów, które znalazłem w moim programie. Wszystko już poprawione i biblioteka do ekspandera działa jak należy Jak przeglądam różne grupy na Facebook'u i widzę właśnie posty typu "Program nie działa. (kropka)" to chciałbym pomóc, ale nie za bardzo wiem jak. Zastanawiam się, dlaczego ludzie dają taki skąpy opis, który nie daje jakiegokolwiek obrazu sytuacji. A teraz śmieszna sprawa, bo sam zrobiłem dokładnie to samo Tak bardzo skupiłem się na prośbie o pomoc w rozwiązaniu problemu, że aż zapomniałem ten problem opisać Jeszcze raz dzięki wielkie za znalezienie błędu
  4. Cześć , kolejna część kursu jak zwykle super . Wszystko przedstawione bardzo jasno i w ciekawy sposób . Podczas robienia zadań z pracy domowej napotkałem pewien problem. Zaimplementowałem funkcje do odczytu oraz zapisu dla GPIO oraz dodatkową funkcję pomocniczą. Niestety program nie działa jak należy. Kilkukrotnie podglądałem w debuggerze wartości zmiennych pobranych z rejestrów i poddanych np. przesunięciu bitowemu i wyniki były odmienne od oczekiwanych. Poniżej zamieszam kod: // Sprawdzam wartość bitu na danej pozycji uint8_t check_bit(uint8_t bit_array, uint8_t position){ if( ((bit_array >> position) & 0x01) == 0x01){ return 1; } else{ return 0; } } uint8_t MCP_GPIO_ReadPin(uint8_t output_num){ // Pobieram konfigurację I/O do sprawdzenia uint8_t config = mcp_reg_read(MCP_IODIR); if (check_bit(config, output_num) == 0){ uint8_t reg_val = mcp_reg_read(MCP_GPIO); return check_bit(reg_val, output_num); } else{ return -1; } } void MCP_GPIO_WritePin(uint8_t output_num, uint8_t state){ // Pobieram dotychczasową wartość rejestru, aby zmodyfikować tylko jeden bit uint8_t bit_state = mcp_reg_read(MCP_GPIO); uint8_t current_output_val = check_bit(bit_state, output_num); if (state == 0){ // Jeżeli chcę ustawić tą samą wartość to nic się nie zmienia // Jeżeli chcę zmienić wartość to wykonuję toggle bit na danym bicie if(current_output_val == 0){ } else{ bit_state ^= 1 << output_num; } } else if (state == 1){ if(current_output_val == 1 ){ } else{ bit_state ^= 1 << output_num; } } mcp_reg_write(MCP_OLAT,bit_state); } Próbowałem różnych modyfikacji, lecz nie mogłem natrafić na błąd. Mam przeczucie, że może to być kwestia niewłaściwego typu zmiennej, niewłaściwego użycia operatora ">>" lub operacji toggle bit(czy jest to w ogóle właściwy sposób na zmianę bitu, czy może jest inna droga ?) Czy moje podejście do tego zadania jest poprawne? Będę wdzięczny za wszelką pomoc/uwagi
  5. Bardzo ciekawa i jednocześnie przystępna część kursu o licznikach - super robota Podczas przeglądania dokumentacji zobaczyłem, ile różnych możliwości dają nam timery (np. praca z DAC), a świetnie opisane przykłady w kursie pokazały, że ich obsługa wcale nie jest trudna W trakcie przerabiania tej części zastanowiły mnie jedynie dwie, "czysto techniczne" sprawy: 1) Czy jest jakiś szczególny powód podłączenia rezystora 1k do wyprowadzenia B (niebieski) w diodzie RGB? Przy świeceniu niebieskiej diody LED odkłada się tam większe napięcie niż na diodach czerwonej / żółtej, więc nie do końca rozumiem skąd większa wartość opornika w tym przypadku 2) Dlaczego enkoder zasilamy z 3,3V? Enkoder z zestawu (link do Botlandu) pracuje z napięciem 5V zgodnie z tym, co jest na stronie. Z góry dzięki za odpowiedź i miłego wieczoru.
  6. Bardzo ciekawy materiał Do tej pory jak programowałem to po prostu pisało się print(...) i tyle - bez zastanowienia, jakby to było coś normalnego. Ten fragment kursu pokazał, co kryje się pod takim niepozornym printf() i jak można go w prosty sposób obsłużyć w emdedded. Całość przedstawiona bardzo przystępnie. W trakcie przerabiania tego fragmentu kursu miałem tylko jedną wątpliwość do pierwszego przykładu wysyłania danych po UART: const char message[] = "Hello world!\r\n"; HAL_UART_Transmit(&huart2, (uint8_t*)message, strlen(message), HAL_MAX_DELAY); Czy przy przekazywaniu danych do przesłania nie brakuje "&"? We wszystkich pozostałych przykładach widnieje konsekwentnie poniższy zapis (w tym przypadku dla pojedynczego znaku): (uint8_t*)&ch Bez "&" naturalnie również działa. Chciałbym po prostu rozwiać swoje wątpliwości w kwestii, czy & nie ma tam z jakiegoś konkretnego powodu. Pozdrawiam
  7. @Gieneq wielkie dzięki za szybką odpowiedź. Zrobiłem tak, jak napisałeś i już po problemie - udało się wgrać program na płytkę
  8. Cześć , właśnie zaczynam przygodę z STM32L4, lecz natrafiłem na pewien problem. Zakupiłem dedykowany zestaw do kursu i wczoraj próbowałem wgrać pierwszy program zgodnie z instrukcją. Po zbudowaniu i kliknięciu Debug, pojawił się komunikat o aktualizacji programatora, którą od razu wykonałem. Po ponownym kliknięciu Debug w konsoli pojawił się komunikat jak wyżej. Czy wyczyszczenie pamięci Flash to jedyne rozwiązanie? Jeśli tak, to w którym dokładnie miejscu IDE mogę to zrobić (dopiero poznaję Cube'a)? Czy to "czyszczenie" należy wykonać jedynie przed wgraniem pierwszego programu, czy może za każdym razem przy wgrywaniu czegoś na płytkę? Będę wdzięczny za wszelką pomoc
×
×
  • 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.