저번에는 STM32 에 있는 CAN 통신기능으로
CAN-RX 와 CAN-TX를 설정하여 CAN Trasceiver 로 CAN 통신을 하였다.
그 때 했던 것과 다르게
보드 - SPI - MCP2515 - CAN 통신
방식으로 하는 부품을 얻게 되었다.
그래서 테스트 해보려 한다.
이번에는 CubeIDE가 아닌 keil MDK-ARM v5.27을 사용했으며
printf() 를 제외하고는 거의 일치한다고 본다.
이것은 CAN 통신의 Data Frame 이다.
Purpose | bit | explain |
---|---|---|
Start | 1 | |
Standard ID | 11 | |
RTR | 1 | |
IDE | 1 | |
RB0 | 1 | |
DLC | 4 | |
Data | 8*8 | |
CRC | 15 | |
CRC DEL | 1 | |
Ack slot bit | 1 | |
ACK Del | 1 | |
EOF | 7 | |
IFS |
SPI 를 통해 데이터를 전송
14 bytes 가 SRAM 에 저장된다.
1 byte - Control Register
5 bytes - Standard ID
8 bytes - Data
MCP2515 IC에 의해
SPI로 레지스터를 사용하여 설정하고, 송 수신할 수 있다.
레지스터를 데이터 시트에 따라 하나하나 읽어야하는데
첫번째 사진인 CAN CONTROLLER REGISTER MAP 에서
SIDH
SIDL
EID8
EID0
이 붙어 있는
Data, Filter, Mask 를 먼저 봐서 어떤 식으로 구성되어 있는지 파악하고
두번째 사진인 CONTROL REGISTER SUMMARY 에서
위에서 설정한 것들을 가지고 어떻게 송 수신을 할 수 있는지 알아내야한다.
CubeMx를 실행
Terminal 확인용
-> USART3
SPI-CAN 통신용
->SPI3
SPI Chip Select
-> PD2 (GPIO_OUTPUT)
Button for EXTI
-> PD10 (GPIO_EXTI10)