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



Teraz jest 28 mar 2024, o 16:11


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 1 ] 
Autor Wiadomość
PostNapisane: 17 lis 2020, o 21:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2014
Posty: 150
Pomógł: 1

Hej wszystkim,

Mam mały problem z zaimplementowaniem protokołu CAN na STM32F103 (tzw bluepillu). Ale po kolei.


Mam Bluepilla podłączonego poprzez PA11 (CAN_Rx) i PA12 (CAN_Tx) do transceivera CJMCU-1051 (wejscia CRX -> PA11 i CTX -> PA12 ). Sygnały CANL oraz CANH wychodzące z transceivera) mam połączone z magistralą CAN na któej są już dwie nody i komunikują się ze sobą z baudratem = 500kBps (po sieci biegają 4 ramki):
Obrazek

Więc sieć dzial.

I teraz mój kod.
Konfiguracja zegarów na maksymalne taktowanie - 72MHz ( PCLK1 zgodnie z RM ustawone na 36MHz):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


SysTick skonfigurowany na 1ms:

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


No i czas na konfigurację CANa:

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


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

dostaję wartość 1 czyli CAN_InitStatus_Success (konfiguracja przebiegła poprawnie i CAN jest w trybie normal - normalnej pracy) , co potwierdzają rejestry:
Obrazek

W głównej pętli programu chcę wysyłać ramkę co 1s, zmienna source_time jest to zmienna inkrementowana w przerwaniu od SysTicka i to ją chcę wysyłać po magistrali
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Rezultatem jest ustawienie się statusu transmisji na (wartość zwraca przez funkcję CAN_TransmitStatus) na pending (ramka oczekuje na wysłanie) dla wszystkich banków FIFO, co potwierdzają rejestry
Obrazek

Po podłączeniu sond oscyloskopu pomiędzy uP a transceiver, można zaobserwować, że transceiver przepuszcza ramki biegające po CANie -> więc nie jest uszkodzony
Obrazek

Reasumując, może ma ktoś pomysł dlaczego STM nie wypuszcza ramki do transcivera tylko jest cały czas w trybie pending?



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO