Witam:)
Od kilku dni próbuję uporać się z CAN. Po początkowych próbach z inicjalizacją funkcjami bibliotecznymi odpuściłem je sobie na rzecz inicjalizacji za pomocą rejestrami. Nie podobało mi się, gdy odkryłem, że funkcje ustawiały bit 16 w rejestrze CAN_MCR [CAN frozen during debug mode].
Posiłkując się tym, co jest na forum oraz tą instrukcjąskleiłem inicjalizację, która działa. Bitrate 500 kbit.
Odpowiednie zegary, GPIO (Rx-PD0, Tx-> PD1 oraz remap), kontroler NVIC ustawiłem wcześniej i wywołuję je przed inicjalizacją CAN.
Konstrukcja wiadomości:
Przerwanie odbioru:
Przerwanie wysłania:
części main'a z wysyłaniem:
____________________________________________________________________
Problem:
Po przejściu przez linie wysyłania wiadomości w rejestrze CAN_ESR ustawiane są bity 5,6 w RM008 opisne jako sygnalizacja CRC error.
Jakby coś z rozmiarem (długością) wiadomości?
Ustawiany jest także bit 18, od licznika TransmitErrorCounter oraz błąd transmisji dla skrzynki 0 TERR0 w rejestrze TSR.
Czyżby te magiczne hexy były źle ustawione? Przeliczałem bitrate dla 36MHz jakie u mnie taktuje APB1
Ktoś może wie jak to udrożnić ??
części main'a z wysyłaniem:
Podgląd rejestrów:
Od kilku dni próbuję uporać się z CAN. Po początkowych próbach z inicjalizacją funkcjami bibliotecznymi odpuściłem je sobie na rzecz inicjalizacji za pomocą rejestrami. Nie podobało mi się, gdy odkryłem, że funkcje ustawiały bit 16 w rejestrze CAN_MCR [CAN frozen during debug mode].
Posiłkując się tym, co jest na forum oraz tą instrukcjąskleiłem inicjalizację, która działa. Bitrate 500 kbit.
Spoiler:
Kod: text
Odpowiednie zegary, GPIO (Rx-PD0, Tx-> PD1 oraz remap), kontroler NVIC ustawiłem wcześniej i wywołuję je przed inicjalizacją CAN.
Konstrukcja wiadomości:
Spoiler:
Kod: text
Przerwanie odbioru:
Spoiler:
Kod: text
Przerwanie wysłania:
Spoiler:
Kod: text
części main'a z wysyłaniem:
Spoiler:
Kod: text
____________________________________________________________________
Problem:
Po przejściu przez linie wysyłania wiadomości w rejestrze CAN_ESR ustawiane są bity 5,6 w RM008 opisne jako sygnalizacja CRC error.
Cytat:CRC = Cyclic Redundancy Code
Error flag: 6 dominant bits if node is error
active else 6 recessive bits.
Suspend transmission: applies to error
passive nodes only.
Jakby coś z rozmiarem (długością) wiadomości?
Ustawiany jest także bit 18, od licznika TransmitErrorCounter oraz błąd transmisji dla skrzynki 0 TERR0 w rejestrze TSR.
Czyżby te magiczne hexy były źle ustawione? Przeliczałem bitrate dla 36MHz jakie u mnie taktuje APB1
Ktoś może wie jak to udrożnić ??
części main'a z wysyłaniem:
Spoiler:
Kod: text
Podgląd rejestrów: