본문으로 바로가기

CAN normal mode

category ComputerScience & Embedded/NUCLEO & CAN Tranceiver 2025. 3. 1. 20:41

CAN normal mode Introduction

  • CAN normal mode 를 사용하여 두 개의 노드 연결
  • 노드 1(N-1)과 노드 2(N-2) 두 개의 보드 필요

  • N11초마다 LED 번호CAN 데이터 프레임으로 N2에 전송
    • 이를 위해 타이머를 사용하여 1초마다 인터럽트를 발생시키고, 인터럽트 핸들러에서 N1에서 N2로 데이터를 전송
  • N2는 수신된 메시지에 따라 해당하는 LED ON
    • N2 보드에 연결된 4개의 외부 LED(LED1, LED2, LED3, LED4)가 각각 다른 GPIO 핀에 연결
  • N1은 또한 4초마다 리모트 프레임을 보내 2바이트 데이터를 요청
    • N2는 리모트 프레임을 수신한 후, 2바이트 데이터를 데이터프레임으로 N1에 응답
    • N1은 데이터를 수신하고 화면에 표시

CAN normal mode Exercise - Tx

메인 코드 (main.c)

  • GPIO_Init, UART2_Init, TIMER6_Init, CAN1_Init, Filter_config는 이전과 동일하게 설정
  • 새로운 부분은 TIMER6_Init이며, 타이머 핸들을 설정하여 1초 간격으로 타이머가 동작하도록 구성
  • CAN1_Init에서 Loopback 모드Normal 모드로 변경
  • CAN bit timing은 500Kbps로 설정, 이후 1Mbps로 변경 테스트 예정
  • Filter Config는 현재 변경 없음, 이후 특정 프레임을 필터링할 예정
  • CAN_Start 실행 후, CAN TX 및 CAN RX 처리는 타이머 인터럽트 핸들러에서 수행

 

타이머 인터럽트 핸들러 (IT.c)

  • Timer6 IRQ Handler → 타이머 주기 경과 콜백(Timer Period Elapsed Callback)을 트리거
  • 1초마다 CAN TX 실행 (CAN1_TX 함수 호출)

 

CAN TX 구현

  • TX header 설정 후 1바이트 메시지 전송 (LED 번호 전송)
  • DLC는 1, Standard ID 설정 (임의 값 선택)
  • LED 번호를 전역 변수로 설정하고, 전송 후 1씩 증가
  • LED 번호가 4가 되면 다시 0으로 초기화
  • CAN TX API를 사용해 메시지 전송
  • 즉, 1초마다 LED 번호를 전송하는 기능 구현

 

버튼 인터럽트 처리

  • 타이머 시작을 버튼 인터럽트에서 수행.
  • EXTI15_10_IRQHandler를 사용해 버튼 인터럽트 처리.
  • HAL_GPIO_EXTI_IRQHandler API를 호출하여 EXTI 인터럽트 처리.
  • 사용 보드(Nucleo or Discovery)에 따라 EXTI 핸들러가 다를 수 있음 → 적절한 ISR 구현 필요.

 

GPIO Init

  • N1 측 (노드 1)
    • 애플리케이션은 버튼을 눌렀을 때 실행
    • 버튼은 PC13 핀에 연결됨
    • 따라서 PC13을 GPIO 입력(Input) 모드 + 인터럽트(Interrupt) 모드로 설정해야 함
  • N2 측 (노드 2)
    • 4개의 LED를 제어하기 위해 4개의 GPIO 핀 사용
    • 해당 GPIO 핀들은 출력(Output) 모드로 설정해야 함

코드 구현

  • main.c의 기존 GPIO_Init 함수에서 초기화 수행
  • 기존 GPIO_Init 함수에는 온보드 LED 초기화 코드가 있음
  • 여기에 N1의 버튼 핀(PC13) 설정 및 인터럽트 활성화 코드 추가
  • 그리고 N2의 4개 GPIO를 출력 모드로 설정하는 코드 추가
  • GPIO 초기화는 N1과 N2 공통 함수로 작성
반응형

'ComputerScience & Embedded > NUCLEO & CAN Tranceiver' 카테고리의 다른 글

bxCAN Frame Filtering  (0) 2025.03.01
STM32 bxCAN Exercise  (0) 2025.03.01
STM32 bxCAN  (0) 2025.03.01
CAN frame formats / Bus Arbitration  (0) 2025.03.01
CAN (Controller Area Network) Fundamentals  (0) 2025.03.01