Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 8 sty 2025, o 08:23


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 11 cze 2015, o 19:26 
Offline
Użytkownik

Dołączył(a): 23 wrz 2014
Posty: 59
Pomógł: 0

Witam. Mam problem z odbieraniem wysyłanych przeze mnie liczb:1 oraz 0. Chcę napisać kod, za pomocą, którego bym włączał i wyłączał diodę led płytki Nucleo F411RE, podłączonej do pinu PA5. Odbywać się to ma za pomocą komunikacji Bluetooth. BTM-222 jest podłączony przez USART6 do pinów PC7(Rx) jak i PC6(Tx). Oczywiście podłączyłem na krzyż. Poniżej zamieszczam kod, konfiguracji GPIO oraz funkcję, za pomocą której powinienem włączać diodkę.

Kod:
    //receinving data
        void USART6_IRQHandler(void)
        {
            if (USART6->SR & USART_FLAG_RXNE)// != RESET)
            {
                i = USART_ReceiveData(USART6);
                if(i == '1'){
                 GPIO_WriteBit(GPIOA,GPIO_Pin_5,Bit_SET);    // Set '1' on PA5
                }
                else if(i == '0'){
                    GPIO_WriteBit(GPIOA,GPIO_Pin_5,Bit_RESET);  // Set '0' on PA5
                }
            }
        }
    //gpio configuration
    void GPIO_Configuration(void)
    {
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6, ENABLE);
            RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
            RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
            GPIO_InitTypeDef GPIO_InitStructure;
          
       //LED as PA5
       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
       GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
       GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
      /* Configure USART6 Tx (PC6)*/
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_Init(GPIOC, &GPIO_InitStructure);
   
       GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_USART6);
      /* Configure USART6 Rx (PC7)*/
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
       GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
      GPIO_Init(GPIOC, &GPIO_InitStructure);
    }

Ustawiam pułapkę na linii "i = USART_ReceiveData(USART6);" i nie dochodzi do tego miejsca, więc coś jest nie tak z ifem, jednakże co? Nie bardzo umiem poradzić sobie z tym problemem. Z góry dziękuję za pomoc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 cze 2015, o 20:57 
Offline
Użytkownik

Dołączył(a): 29 lip 2014
Posty: 195
Pomógł: 44

Witam,

A włączyłeś w ogóle przerwania od UART-a w kontrolerze NVIC ? No i chociaż pokaż inicjalizację tego UART-a, bo z tego co napisałeś, podejrzewam, że przerwanie od UART-a w ogóle się nie wykonuje - albo nie jest włączone, albo UART niczego nie odbiera, bo na przykład jest źle skonfigurowany, albo na przykład zapomniałeś włączyć odbiornik. Ogólnie - wróżenie z fusów - najlepiej pokaż cały ten projekt.

Pozdrawiam, QuadMan.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 cze 2015, o 21:11 
Offline
Użytkownik

Dołączył(a): 23 wrz 2014
Posty: 59
Pomógł: 0

Już co raz lepiej jest. Dodałem do debuggera zmienną i, i widzę jak wysyłam np wartość 10 to zmienia mi się w rejestrach wartość dla i. Jednakże wszystko działa jeszcze tak niespodziewanie. Jakieś pomysły?

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 cze 2015, o 00:42 
Offline
Użytkownik

Dołączył(a): 26 lip 2012
Posty: 291
Lokalizacja: okolice Opola
Pomógł: 20

Po 1 to powiedz nam co robi wywoływanie przerwania od uartu w pętli głównej???
Co do kodu to niezbyt umiem pomóc ponieważ nie korzystam z tych dziwnych stm-owskich bibliotek tylko z gołych rejestrów, dlatego polecam otworzyć ds twojego układu i spróbować w ten sam sposób zrobić obsługę przynajmniej uartu wprost na rejestrach. Jest ich raptem kilka a nauczysz się przy tym o niebo więcej.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 cze 2015, o 22:33 
Offline
Użytkownik

Dołączył(a): 29 lip 2014
Posty: 195
Pomógł: 44

Witam,
tak jak Kolega krafin napisał -koniecznie wywal z pętli głównej handler od przerwania - przecież to bez sensu. Poniżej masz zmodyfikowany kod z przerwaniami, moim zdaniem powinno działać, cała reszta wydaje się z grubsza ok. Po poprawkach uruchom terminal i sprawdź czy procek odbiera znak. Co do SPL - a, przemilczę, każdy orze jak może ;-).
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Pozdrawiam, QuadMan.

DOPISANE:
Nie wiem w jakim środowisku to uruchamiasz, jeśli to powyżej nie zadziała, spróbuj może na początek odebrać znak w pętli głównej, a IRQ handler zostaw pusty:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 cze 2015, o 10:25 
Offline
Użytkownik

Dołączył(a): 23 wrz 2014
Posty: 59
Pomógł: 0

Witam. Dziękuje najmocniej za pomoc. Po 6h zabawy z tym programem zadziałało. Dodałem odbiór znaku w whilu oraz W GPIO dwie linijki "GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_USART6);" Jeżeli chodzi o USART6_IRQHandler(); znajdujący się w whilu, mam go wyrzucić gdyż przerwanie jeżeli jest dobrze skonfigurowane to i tak zadziała i wcale nie trzeba go wywoływać? Jeżeli komuś się przyda to kod zamieszczam poniżej. Pozdro :)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 5 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO