CAN/CAN Open

STM32F429의 CAN 컨트롤러 특징 및 설정 방법

임베디드 친구 2025. 8. 6. 19:51
728x90
반응형

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을 설정하는 과정은 다음과 같습니다.

  1. STM32CubeMX에서 CAN 활성화

    • STM32CubeMX에서 CAN1 또는 CAN2를 활성화합니다.
    • 해당 핀을 Alternate Function 모드로 설정합니다.
    • CAN 통신 속도 및 필터 설정을 구성합니다.
  2. HAL 라이브러리를 이용한 CAN 초기화

    • HAL_CAN_Init() 함수를 호출하여 CAN 모듈을 초기화합니다.
    • 필터 설정을 적용하여 특정 메시지만 수신할 수 있도록 구성합니다.
    • HAL_CAN_Start() 함수를 호출하여 CAN 모듈을 활성화합니다.
  3. 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의 메시지만 수신하려면 FilterIdHighFilterMaskIdHigh 값을 조정해야 합니다.

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 통신을 구현할 수 있도록 하였습니다.

728x90
반응형