STM32 마이크로컨트롤러는 CAN 통신을 위한 하드웨어 모듈로 bxCAN(basic extended CAN)을 내장하고 있다. 이 모듈은 CAN 2.0A/B 프로토콜을 완전히 지원하며, 차량 네트워크나 산업용 제어 시스템 등에서 폭넓게 활용된다.
Loop-back Mode는 CAN 컨트롤러 하나만으로 통신 테스트를 할 수 있는 동작 모드이다. 송신된 메시지가 내부적으로 수신 경로로 다시 전달되며, 실제 CAN tranceiver나 다른 노드가 없어도 Tx ↔ Rx 기능을 자체적으로 검증할 수 있다.
STM32의 bxCAN은 HW 수준에서 CAN 프로토콜을 처리하며, 다음과 같은 주요 기능을 제공한다.
송신 메일박스(Tx Mailbox): 3개
→ 각 메일박스는 하나의 CAN 메시지를 보관할 수 있으며, 동시에 최대 3개의 송신 대기 메시지 등록 가능
수신 FIFO(Rx FIFO0, FIFO1): 각 FIFO는 최대 3개의 메시지 저장 가능
Filter Bank: 총 28개 제공, ID 기반 수신 필터링 가능
일부 STM32 MCU는 두 개의 CAN 컨트롤러(CAN1, CAN2)를 제공한다. 이들은 모두 CAN 2.0A/B specification을 충실히 구현하지만, STM32의 내부 메모리 연결 구조에 따라 다음과 같이 구분된다.
① CAN1(Master bxCAN)
SRAM에 직접 접근 가능하며, 필터 뱅크 제어 권한 보유
② CAN2(Slave bxCAN)
SRAM 접근 불가, 일부 기능(CAN 필터 등) 사용을 위해 CAN1의 초기화가 필요
참고로, 여기서 Master/Slave 구분은 CAN 프로토콜 상의 개념이 아닌, STM32 내부 구조에 따른 용어이다. CAN은 Multi-master 방식으로 동작한다.
bxCAN은 HW 수준에서 식별자(ID)를 기준으로 수신 메시지를 필터링하는 기능을 제공한다.
송신 시 여러 개의 메시지가 동시에 대기할 수 있으므로, HW는 우선순위 기반 전송 스케줄러를 통해 메시지를 관리한다.
메시지 식별자(ID)가 작을수록 우선순위가 높다. 동일 시점에 여러 메시지가 대기 중이면, 우선순위가 가장 높은 메시지가 먼저 전송된다.
STM32의 bxCAN 컨트롤러는 다음과 같이 3가지 테스트 모드를 지원한다.
이러한 모드들은 실제 네트워크에 연결하기 전, 내부 통신 기능 점검 및 디버깅을 위한 용도로 제공된다.
Silent Mode는 bxCAN이 버스를 방해하지 않고 수신만 가능하도록 설정되는 모드이다.

① 특징
② 내부 동작
Loop Back Mode는 CAN 컨트롤러의 송수신 기능을 내부 루프백을 통해 자가 테스트하는 데 사용된다.

① 특징
② 용도
이 모드는 위의 두 모드의 특성을 결합한 형태이다.

① 특징
② 용도
<참고 자료>
Kiran Nayak, Mastering Microcontroller: Timers, PWM, CAN, Low Power(MCU2), Udemy, 2025.05.