인프런 커뮤니티 질문&답변

dayday님의 프로필 이미지
dayday

작성한 질문수

STM32 CAN 통신

SW 구현 - 26

수신 가능 메시지 할당 방법 문의

해결된 질문

작성

·

273

0

 

[문의사항]

  1. Test Mode4 에서 비트 할당

    • "FilterIdHigh = (addr32<<3) >> 16" 등 실제로 어떻게 각 비트자리에 할당 되나요?

    • "수신 ID 값 = 0x1234567 ~ 0x1234567f" 어떻게 계산되는것인가요? 또한 0x1234567값은 0x12345670 을 말하는 것인가요??

답변 1

1

alex님의 프로필 이미지
alex
지식공유자

안녕하세요.

1) FilterIdHigh에는 EXID[28:13] 값이 저장되고, FilterIdLow에는 (EXID[12:0]<<3) | (IDE<<2) | (RTR<<1) | (TXRQ<<0) 값이 저장됩니다.

따라서 설정하고자 하는 EXID의 값(addr32) 0x12345678, IDE = 1, RTR= 0, TXRQ = 0 인 경우에는 아래와 같이 설정됩니다.
FilterIdHigh = (0x12345678<<3) >> 16 ; // 0x91A2
FilterIdLow = ((0x12345678<<3) & 0xffff) | 0x04; // 0xB3C4
0x12345678<<3 = 0x91A2_B3C0 입니다.

2) 수신 ID 값
mask32 값이 0x1fff_fff0 이기 때문에 bit[28:4]까지는 addr32값과 동일한 값 (0x1234567x)이고, bit[3:0]는 don't care 이기 때문에 0x0 ~ 0xF까지 수신가능합니다.
따라서 수신가능한 address는 0x12345670 ~ 0x1234567F 가 됩니다.

3) 수신 ID 값 = 0x1234567 ~ 0x1234567f 는 오타입니다. 정확한 표현은 수신 ID 값 = 0x12345670 ~ 0x1234567F 가 맞습니다.

감사합니다 ~!!

dayday님의 프로필 이미지
dayday

작성한 질문수

질문하기