STM32F429의 CAN 컨트롤러 특징 및 설정 방법
STM32F429의 CAN 컨트롤러 개요
STM32F429 마이크로컨트롤러는 강력한 CAN(Controller Area Network) 통신 기능을 내장하고 있어 다양한 산업용 및 자동차 애플리케이션에서 활용될 수 있습니다. STM32F429의 CAN 컨트롤러는 Bosch CAN 2.0B 프로토콜을 지원하며, 최대 1 Mbps의 전송 속도를 제공합니다.
CAN 컨트롤러는 CAN1과 CAN2 두 개의 독립적인 채널을 제공하며, 각 채널은 별도의 메시지 필터를 갖추고 있어 효율적인 데이터 수신이 가능합니다. 또한, STM32F429의 CAN 인터페이스는 HAL 라이브러리를 통해 쉽게 구성할 수 있으며, 다양한 운영 모드를 지원합니다.
STM32F429의 CAN 컨트롤러 특징
- Bosch CAN 2.0B 지원: 확장 및 표준 프레임을 모두 지원합니다.
- 다중 CAN 인터페이스: STM32F429는 두 개의 독립적인 CAN 컨트롤러(CAN1, CAN2)를 제공합니다.
- 강력한 필터링 기능: 수신 메시지를 효율적으로 분류할 수 있는 28개의 필터 뱅크를 지원합니다.
- Low-power 모드 지원: 저전력 동작을 위한 Sleep 및 Stop 모드를 제공합니다.
- 하드웨어 자동 재전송: 메시지 전송 실패 시 자동 재전송 기능을 포함합니다.
- FIFO 버퍼 제공: 수신 데이터 처리를 위한 FIFO 버퍼를 갖추고 있어 메시지 손실을 최소화합니다.
- Bit Timing Configuration 지원: 사용자 정의 비트 타이밍 구성이 가능하여 다양한 CAN 네트워크 환경에 대응할 수 있습니다.
STM32F429의 CAN 핀 구성
STM32F429의 CAN 인터페이스는 특정 핀에 매핑되어 있으며, CAN1과 CAN2는 각각 다음과 같은 핀을 사용할 수 있습니다.
CAN 인터페이스 | TX 핀 | RX 핀 |
---|---|---|
CAN1 | PA12 | PA11 |
CAN2 | PB13 | PB12 |
CAN 통신을 위해서는 반드시 해당 핀을 GPIO로 설정하고, CAN 기능에 맞게 초기화해야 합니다.
STM32CubeIDE를 이용한 CAN 초기화 절차
STM32CubeIDE를 이용하여 CAN을 설정하는 과정은 다음과 같습니다.
STM32CubeMX에서 CAN 활성화
- STM32CubeMX에서 CAN1 또는 CAN2를 활성화합니다.
- 해당 핀을
Alternate Function
모드로 설정합니다. - CAN 통신 속도 및 필터 설정을 구성합니다.
HAL 라이브러리를 이용한 CAN 초기화
HAL_CAN_Init()
함수를 호출하여 CAN 모듈을 초기화합니다.- 필터 설정을 적용하여 특정 메시지만 수신할 수 있도록 구성합니다.
HAL_CAN_Start()
함수를 호출하여 CAN 모듈을 활성화합니다.
CAN 송신 및 수신 설정
HAL_CAN_AddTxMessage()
함수를 사용하여 CAN 메시지를 송신합니다.HAL_CAN_GetRxMessage()
함수를 이용하여 수신된 데이터를 처리합니다.
CAN 필터 설정 방법
CAN 통신에서 필터는 특정 ID의 메시지만 수신할 수 있도록 설정하는 중요한 기능입니다. STM32F429에서는 28개의 필터 뱅크를 지원하며, 다음과 같은 방식으로 필터를 설정할 수 있습니다.
CAN_FilterTypeDef sFilterConfig;
sFilterConfig.FilterBank = 0;
sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
sFilterConfig.FilterIdHigh = 0x0000;
sFilterConfig.FilterIdLow = 0x0000;
sFilterConfig.FilterMaskIdHigh = 0x0000;
sFilterConfig.FilterMaskIdLow = 0x0000;
sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;
sFilterConfig.FilterActivation = ENABLE;
HAL_CAN_ConfigFilter(&hcan1, &sFilterConfig);
위 코드는 CAN1 인터페이스에서 모든 메시지를 수신할 수 있도록 필터를 구성하는 예제입니다. 특정 ID의 메시지만 수신하려면 FilterIdHigh
및 FilterMaskIdHigh
값을 조정해야 합니다.
CAN 송신 예제 코드
아래는 STM32F429에서 CAN 메시지를 송신하는 코드 예제입니다.
CAN_TxHeaderTypeDef TxHeader;
uint8_t TxData[8] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88};
uint32_t TxMailbox;
TxHeader.DLC = 8;
TxHeader.IDE = CAN_ID_STD;
TxHeader.RTR = CAN_RTR_DATA;
TxHeader.StdId = 0x321;
if (HAL_CAN_AddTxMessage(&hcan1, &TxHeader, TxData, &TxMailbox) != HAL_OK) {
// 전송 실패 처리
}
CAN 수신 예제 코드
아래는 STM32F429에서 CAN 메시지를 수신하는 코드 예제입니다.
CAN_RxHeaderTypeDef RxHeader;
uint8_t RxData[8];
if (HAL_CAN_GetRxMessage(&hcan1, CAN_RX_FIFO0, &RxHeader, RxData) == HAL_OK) {
// 수신된 데이터 처리
}
결론
STM32F429의 CAN 컨트롤러는 강력한 기능을 제공하며, HAL 라이브러리를 활용하여 쉽게 설정할 수 있습니다. 본 장에서는 STM32F429의 CAN 컨트롤러 특징과 설정 방법을 다루었으며, 실습을 통해 CAN 통신을 구현할 수 있도록 하였습니다.
'CAN > CAN Open' 카테고리의 다른 글
CANOpen SDO/PDO 통신 실습 (STM32F429) (0) | 2025.08.08 |
---|---|
CANOpen 스택 포팅 방법(STM32F429) (0) | 2025.08.07 |
CANOpen 노드 구현 (STM32CubeIDE 및 HAL 활용) (0) | 2025.08.05 |
CANOpen 스택 구조 분석 (0) | 2025.08.04 |
CANOpen 개발 라이브러리 및 툴 (0) | 2025.08.03 |