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



Teraz jest 9 sty 2025, o 17:24


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 19 lip 2016, o 19:10 
Offline
Użytkownik

Dołączył(a): 06 maja 2014
Posty: 415
Lokalizacja: Kraków
Pomógł: 26

Witajcie,

próbuję napisać sobie obsługę UART na mikrokontrolerze serii STMF103.
Bez obsługi przerwań działa - wysyła pożądane ciągi znaków.

Natomiast gdy próbuję zrobić to samo na przerwaniu, program się zawiesza (pojawia się flaga o wystąpieniu przerwania, natomiast wydaje mi się, że nie następuje skok do obsługi tego przerwania).

Kod wygląda następująco :

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


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


I w pętli głównej wywołanie funkcji uart_putstr.

Obserwacje na debugerze : program się wiesza kilka cykli po pojawieniu się flagi wystąpienia przerwania, z czego przypuszczam, że nie potrafi odnaleźć obsługi tego przerwania...

Co powinienem poprawić?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lip 2016, o 19:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 sie 2013
Posty: 230
Lokalizacja: Zabrze
Pomógł: 17

A ustawiasz NVIC?
więcej o nim tutaj (choć akurat nie w powiązaniu z USART-em): http://www.stm32.eu/node/48

_________________
40-32:2=4!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lip 2016, o 19:48 
Offline
Użytkownik

Dołączył(a): 06 maja 2014
Posty: 415
Lokalizacja: Kraków
Pomógł: 26

Wywołuję funkcję NVIC_Enable(odpowiedni numer przerwania), ustawiałem też bezpośrednio w rejestrze ISER. Według mnie odbywa się to prawidłowo, jedynkę mam na odpowiednim bicie w rejestrach ISER i ICER.

Priorytetów przerwań nie tykam, domyślnie powinno być w porządku.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lip 2016, o 01:09 
Offline
Użytkownik

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

Witam,

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


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


Używasz niewłaściwych operatorów do sprawdzania tych flag, ma być & a nie | - bo przecież chcesz sprawdzać tą konkretną flagę, a nie inne, czyli np:
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: zakładam, że masz prawidłowo ustawiony stos dla przerwań w skrypcie linkera - jeśli używasz skryptu z dwoma stosami, to sprawdź jeszcze, czy przypadkiem ten PSP nie jest na zero.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lip 2016, o 04:59 
Offline
Użytkownik

Dołączył(a): 06 maja 2014
Posty: 415
Lokalizacja: Kraków
Pomógł: 26

Cytuj:
Używasz niewłaściwych operatorów do sprawdzania tych flag, ma być & a nie | - bo przecież chcesz sprawdzać tą konkretną flagę, a nie inne, czyli np:

Racja, tutaj błąd, poprawię.

Cytuj:
Dopisane: zakładam, że masz prawidłowo ustawiony stos dla przerwań w skrypcie linkera - jeśli używasz skryptu z dwoma stosami, to sprawdź jeszcze, czy przypadkiem ten PSP nie jest na zero.

Tego to akurat do końca nie zrozumiałem ale spróbuję się przyjrzeć plikom w projekcie :)

Ma znaczenie w którym pliku umieszczę obsługę procedury przerwania czy mogę to zrobić w dowolnym pliku ... .c ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lip 2016, o 11:14 
Offline
Użytkownik

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

Witam,

krzysssztof napisał(a):

Cytuj:
Dopisane: zakładam, że masz prawidłowo ustawiony stos dla przerwań w skrypcie linkera - jeśli używasz skryptu z dwoma stosami, to sprawdź jeszcze, czy przypadkiem ten PSP nie jest na zero.

Tego to akurat do końca nie zrozumiałem ale spróbuję się przyjrzeć plikom w projekcie :)


To może inaczej, z jakiego środowiska korzystasz ? Jeśli Eclipce + GCC, to w projekcie masz plik z rozszerzeniem .ld, umieść go tutaj.

krzysssztof napisał(a):
Ma znaczenie w którym pliku umieszczę obsługę procedury przerwania czy mogę to zrobić w dowolnym pliku ... .c ?


Znaczenia nie ma żadnego, ważne by plik był widziany w projekcie.

Pozdrawiam, QuadMan.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lip 2016, o 16:05 
Offline
Użytkownik

Dołączył(a): 06 maja 2014
Posty: 415
Lokalizacja: Kraków
Pomógł: 26

Jeśli kogoś interesuje rozwiązanie tego problemu to informuję, że
Cytuj:
void USART3_IRQHandler(void){...}

działa znacznie lepiej od
Cytuj:
void USART_3_IRQHandler(void){...}
.

Taka durna literówka, a przez 2 dni nie mogłem jej znaleźć.
Najsmutniejsze jest to, że kompilator tego nie wykrył :( Chociaż po prawdzie to nie miał do tego podstaw.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2016, o 22:09 
Offline
Użytkownik

Dołączył(a): 09 cze 2015
Posty: 39
Pomógł: 0

Witam

Próbuję odpalić ten projekt, wyskakują mi następujące błędy.


[cc] undefined reference to `main'
[cc] collect2.exe: error: ld returned 1 exit status

Ma ktoś pomysł co może być przyczyną?


W main.c mam :

#include "uart.h"

void uart_putc(char data)
{
TxString("Tekst\r\n");
}



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 wrz 2016, o 07:54 
Offline
Użytkownik

Dołączył(a): 25 lip 2015
Posty: 140
Zbananowany użytkownik

Pomógł: 18

A gdzie masz funkcję main? Jeśli tak rzeczywiście wygląda twój plik main.c, to polecam przynajmniej zacząć od jakiegoś kursu programowania w języku c.



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: 9 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Majestic-12 [Bot] i 1 gość


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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO