ATNEL tech-forum
https://forum.atnel.pl/

STM32F103 + CAN -> procek nie wypuszcza ramki z banków FIFO
https://forum.atnel.pl/topic23438.html
Strona 1 z 1

Autor:  amilo_pa [ 17 lis 2020, o 21:40 ]
Tytuł:  STM32F103 + CAN -> procek nie wypuszcza ramki z banków FIFO

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?

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/