Skip to content

taejin-seong/STM32F103VET6-bxCAN-Test-With-UART

Repository files navigation

๋ณธ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” STM32์˜ ๋‚ด์žฅ๋˜์–ด์žˆ๋Š” bxCAN์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๊ฐœ์˜ STM32F103VET6 MCU ๊ฐ„ CAN ํ†ต์‹ ์„ ์ฃผ๊ณ  ๋ฐ›๋Š” ์†ก์ˆ˜์‹  ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์˜€์œผ๋ฉฐ ์ด๋ฅผ PC ํ„ฐ๋ฏธ๋„ ์ฐฝ์— ๋„์–ด์„œ ํ™•์ธํ•ด๋ณด๋Š” ๊ณผ์ •์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.



์ฐธ๊ณ ๋กœ STM32 Connectivity Line์„ ์ œ์™ธํ•œ F1 ์‹œ๋ฆฌ์ฆˆ STM32๋“ค์€ ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹ ์— ์‚ฌ์šฉ๋˜๋Š” 512byte RAM์„ USB์™€ CAN์ด ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— USB์™€ CAN์„ ๋™์‹œ์— ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ CAN๊ณผ USB๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋ฉด STM32F105/7์ด๋‚˜ F2 ์‹œ๋ฆฌ์ฆˆ ๋“ฑ ๋‹ค๋ฅธ ์‹œ๋ฆฌ์ฆˆ์˜ STM32๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋Š” CAN ํ†ต์‹ ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์ดํ•ด์™€ CAN ํ†ต์‹ ์„ ์œ„ํ•œ ๊ธฐ๋ณธ์ ์ธ ์„ค์ •๋ฒ•์— ๋Œ€ํ•œ ํ•™์Šต์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
์•„๋ž˜ ์‚ฌ์ดํŠธ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ํ•™์Šตํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.


CAN/CAN-FD ํ†ต์‹ ์˜ ์ž์„ธํ•œ ์ด๋ก ์  ์†Œ๊ฐœ์™€ 8bit AVR MCU์—์„œ์˜ CAN ํ†ต์‹ ์„ ์œ„ํ•œ ๋ ˆ์ง€์Šคํ„ฐ ์„ค์ •๋ฒ•์„ ๋‹ค๋ค„์ค๋‹ˆ๋‹ค. [์ด๋ก ๋ถ€๋ถ„ ๋งค์šฐ ์ถ”์ฒœ]


CAN ํ†ต์‹ ์˜ ์ด๋ก ์  ์†Œ๊ฐœ์™€ 32bit STM32F4 MCU์—์„œ์˜ CAN ํ†ต์‹ ์„ ์œ„ํ•œ ์„ค์ •๋ฒ•์„ ๋‹ค๋ค„์ค๋‹ˆ๋‹ค.


CAN ํ†ต์‹ ์˜ ์ด๋ก ์  ์†Œ๊ฐœ์™€ 2bit STM32F0 MCU์—์„œ์˜ CAN ํ†ต์‹ ์„ ์œ„ํ•œ ๋ ˆ์ง€์Šคํ„ฐ ์„ค์ •๋ฒ•์„ ๋‹ค๋ค„์ค๋‹ˆ๋‹ค.


๊ฐœ๋ฐœ ํ™˜๊ฒฝ

IDE

  • STM32CubeIDE 1.6.0
  • STM32CubeMX

ํ„ฐ๋ฏธ๋„ ํ”„๋กœ๊ทธ๋žจ

  • Tera Term

๊ฐœ๋ฐœ ๋ณด๋“œ

  • STM32F103VET6 Custom Development Board
    • ๐Ÿ“Œ ์ด๋ฏธ์ง€ ๋งํฌ ๋ฐ ๊ตฌ๋งค์ฒ˜

    • ๐Ÿ“Œ ๊ฐœ๋ฐœ๋ณด๋“œ ํšŒ๋กœ๋„

      • ์ œ๊ณต๋˜๋Š” ๊ฐœ๋ฐœ๋ณด๋“œ ํšŒ๋กœ๋„๋ฅผ ํ™•์ธํ•ด ๋ณธ ๊ฒฐ๊ณผ, ํšŒ๋กœ๋„์— ํ‘œ๊ธฐ๋˜์–ด์žˆ๋Š” ์ปค๋„ฅํ„ฐ ๋ฐ ํ•€ ํ—ค๋”๋ช…์ด ์‹ค์ œ ๋ณด๋“œ์˜ ์ปค๋„ฅํ„ฐ ๋ฐ ํ•€ ํ—ค๋”๋ช…๊ณผ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒƒ์„ ํ™•์ธํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ฃผ์˜ํ•˜์‹œ๊ณ  ํšŒ๋กœ๋„๋ฅผ ๋ณด์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

CAN ํŠธ๋žœ์‹œ๋ฒ„ ๋ชจ๋“ˆ


ํ•˜๋“œ์›จ์–ด ๊ตฌ์„ฑ






bxCAN ์„ค์ •

Baud Rate ์„ค์ •

  • CAN ํ†ต์‹ ์˜ Baud Rate๋ฅผ ์„ค์ •ํ•  ๋•Œ๋Š” 1 bit๋ฅผ ์ „์†กํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์„ค์ •ํ•ด์•ผํ•จ.
  • Baud Rate = 500kbps ์œผ๋กœ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ๊ณผ์ •.

(1). Prescaler ์„ค์ •

  • Baud Rate๋Š” ์ดˆ๋‹น 500k bit์ด๋ฏ€๋กœ 1bit ๋‹น 2us๊ฐ€ ์†Œ์š”.
  • STM32F103VET6์˜ CAN์€ APB1 ํŽ˜๋ฆฌํŽ˜๋Ÿด ํด๋Ÿญ ๋ฒ„์Šค์— ๋‹ฌ๋ ค์žˆ์Œ.
  • APB1์ด 36MHz ์ผ ๋•Œ, ์ด์— ๋”ฐ๋ผ Prescaler๋ฅผ 9 ๋กœ ์„ค์ •ํ•จ. ์ฆ‰, 9/36MHz = 0.25us.
  • 0.25us ๋‹จ์œ„๊ฐ€ 1๊ฐœ์˜ ํƒ€์ž„ํ€€ํ…€(TQ : Time Quantum (plural: Quanta)) ์‹œ๊ฐ„ ๋‹จ์œ„๊ฐ€ ๋จ.

(2). 1 Bit Time์— TQ๋ฅผ ๋ช‡ ๊ฐœ ๋ฐฐ์น˜ํ•  ๊ฒƒ์ธ๊ฐ€?

  • 1 Bit Time์— 8๊ฐœ์˜ TQ๋ฅผ ๋ฐฐ์น˜ํ•˜๋ฉด 0.25us x 8 = 2us๊ฐ€ ๋จ.
  • ์ฆ‰, 1 Bit Time์— 8๊ฐœ์˜ TQ๋ฅผ ๋ฐฐ์น˜ํ•˜๋„๋ก ์„ค์ •ํ•จ.
  • ์—ฌ๊ธฐ๊นŒ์ง€ ํ†ต์‹ ์†๋„ 500kbps๊ฐ€ ๊ฒฐ์ •๋จ.

(3). 1 Bit Time์— TQ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐฐ์น˜ํ•  ๊ฒƒ์ธ๊ฐ€?

  • 8๊ฐœ์˜ TQ๋ฅผ SYNC_SEG, BIT SEGMENT 1 (BS1), BIT SEGMENT 2 (BS2) ์— ๊ฐ๊ฐ ๋‚˜๋ˆ ์„œ ๋ฐฐ์ •.
  • SYNC_SEG๋Š” 1TQ๋กœ ๊ณ ์ •.
  • ๋‚˜๋จธ์ง€ 7๊ฐœ์˜ TQ๋ฅผ BS1๊ณผ BS2์— ๊ฐ๊ฐ ๋ฐฐ์ •ํ•ด์•ผํ•จ.
  • ๋จผ์ € SAMPLE POINT๋ฅผ 75%๋กœ ๋งŒ๋“ค๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜๊ณ , SAMPLE POINT๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณต์‹์œผ๋กœ ์ •ํ•ด์ง.
    • Sample Point = (SYNC_SEG + BS1) / Total TQ
  • ๋”ฐ๋ผ์„œ ์œ„์˜ ๊ณต์‹์„ ์ด์šฉํ•˜๋ฉด 75/100 = (1 + BS1) / 8 ์ด๋ฏ€๋กœ ์ด๋ฅผ BS1์— ๋Œ€ํ•˜์—ฌ ํ’€๋ฉด BS1=5, ์ €์ ˆ๋กœ BS2=2
  • ๊ทธ๋Ÿฌ๋ฏ€๋กœ SYNC_SEG = 1, BS1 = 5, BS = 2์˜ TQ๋ฅผ ๋ฐฐ์ •๋ฐ›๊ฒŒ ๋จ.
  • ์ด์™€ ํ•จ๊ป˜ SJW (Re-Synchroniztion Jump Width) ๋Š” 1๋กœ ์„ค์ •
  • ์—ฌ๊ธฐ๊นŒ์ง€ TQ ๋ฐฐ์น˜์— ๋”ฐ๋ฅธ Sample Point๊ฐ€ ๊ฒฐ์ •๋˜๊ณ  1 Bit Time์ด ์™„์„ฑ๋จ.

(4). ์‚ฌ์ดํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ๊ณ„์‚ฐํ•˜๊ธฐ




Filter Mask ID์™€ Filter ID ์„ค์ •

  • STM32F103VET6์˜ bxCAN (Basic Extended CAN) ์€ CAN์˜ 2.0A์™€ B ๋‘˜ ๋‹ค ์ง€์›ํ•จ.
    • ์ฆ‰, CAN 2.0B ๋ฒ„์ „์ด๋ฏ€๋กœ ํ•˜์œ„ํ˜ธํ™˜ ๋•Œ๋ฌธ์— 2.0A๋„ ์ง€์›์ด ๊ฐ€๋Šฅ.
  • ๋ณธ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” 11 bit Standard ID, 16 bit Filter Scale, Filter ID Mask ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•จ.

(1). MCU 1์˜ Filter Mask ID์™€ Filter ID



(2). MCU 2์˜ Filter Mask ID์™€ Filter ID



๊ทธ ์™ธ ์„ค์ •

  • ๋ณธ ํ”„๋กœ์ ํŠธ์—์„œ์˜ ๋ชจ๋“  ๋””๋ฐ”์ด์Šค๋Š” ๋งˆ์Šคํ„ฐ ๋ชจ๋“œ๋กœ ์ž‘๋™ํ•จ.
  • Filter๋ฅผ ๊ฑฐ์ณ ์ˆ˜์‹ ๋œ ๋ฉ”์„ธ์ง€๋“ค์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด FIFO0์„ ์‚ฌ์šฉํ•จ.
  • CAN ํ†ต์‹ ์„ ์œ„ํ•œ Filter ์ •๋ณด๋“ค์€ Bank 0๋ฒˆ์— ์ €์žฅ๋˜๋ฉฐ ํ•˜๋‚˜์˜ Bank๋งŒ ์‚ฌ์šฉํ•จ.
  • CAN ํ†ต์‹ ์˜ ์ˆ˜์‹  ๋ถ€๋ถ„์€ ํด๋ง๋ฐฉ์‹์ด ์•„๋‹Œ ์ธํ„ฐ๋ŸฝํŠธ ๋ฐฉ์‹์„ ์ฑ„ํƒํ•˜์˜€์Œ.
  • CAN ํ†ต์‹ ์˜ ์†ก์‹  ๋ถ€๋ถ„์˜ Data Field ํฌ๊ธฐ๋Š” 8byte๋กœ ์„ค์ •ํ•จ.

STM32CubeMX ์„ค์ •

Clock Configuration

๐Ÿ“Œ




Pinout

๐Ÿ“Œ





Peripheral & Core Configuration

1. UART1

๐Ÿ“Œ


2. CAN

๐Ÿ“Œ


3. GPIO

๐Ÿ“Œ
โ€ข PC6 (LED2), PC7 (LED1)์€ ๊ฐœ๋ฐœ ๋ณด๋“œ ๋‚ด์— ์—ฐ๊ฒฐ๋œ 2๊ฐœ์˜ LED Pin์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.



4. DMA

๐Ÿ“Œ
โ€ข USART1 DMA Request Setting
ย ย ย ย ย -ย [USART1_RX]ย :ย ย Mode โ†’ Circular
ย ย ย ย ย -ย [USART1_TX]ย :ย ย Mode โ†’ Normal (All Default)




5. NVIC

๐Ÿ“Œ




ํ…Œ์ŠคํŠธ ํŒŒ์ผ

๊ตฌ์„ฑ ๋ฐ ๊ฒฝ๋กœ

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ตฌํ˜„ํ•œ ํ…Œ์ŠคํŠธ ํ•จ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค

    • stm32f103vet6_fsmc_can_test โ†’ src โ†’ ap โ†’ ap.c โ†’ void apMCU1CanTest(void){...}
    • stm32f103vet6_fsmc_can_test โ†’ src โ†’ ap โ†’ ap.c โ†’ void apMCU2CanTest(void){...}
  • apMCU1CanTest() ํ•จ์ˆ˜์™€ apMCU2CanTest() ํ•จ์ˆ˜๋ฅผ ๊ฐ๊ฐ ๋‹ค๋ฅธ ํƒ€๊ฒŸ MCU์— ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ CAN ํ†ต์‹ ์„ ํ…Œ์ŠคํŠธ ํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ap.c ํ•จ์ˆ˜์—์„œ ์ œ๊ณตํ•˜๋Š” ํ…Œ์ŠคํŠธ ์™ธ์— ๋‹ค์–‘ํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์‘์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



์‹คํ–‰ ๋ฐฉ๋ฒ•

  • ๊ธฐ๋ณธ ํ…Œ์ŠคํŠธ ํ•จ์ˆ˜๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” stm32f103vet6_fsmc_can_test โ†’ src โ†’ main.c์—์„œ ๋นŒ๋“œ ์‹œํ‚ฌ ํ…Œ์ŠคํŠธ ํ•จ์ˆ˜์˜ ์ฃผ์„์„ ํ•ด์ œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
#include "main.h"

int main(void)
{
   hwInit();
   apInit();
   
// apBoardLedTest();
// apUartTest();
   apMCU1CanTest(); //0x7F3
// apMCU2CanTest(); //0x7F6
   
   return 0;
}

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ

(1). ํ„ฐ๋ฏธ๋„์ฐฝ ์ดˆ๊ธฐํ™”๋ฉด



(2). MCU 1์—์„œ MCU 2๋กœ ํ•ด๋‹น ID์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์†ก์‹ ํ•˜๋Š” ๊ฒฝ์šฐ

  • Filter ์„ค์ •์œผ๋กœ ์ธํ•ด MCU 2์—์„œ๋Š” 0x104, 0x10C ID๋ฅผ ๊ฐ€์ง€๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ์ˆ˜์‹ ํ•˜์ง€ ์•Š๊ณ  0x100, 0x108 ID๋ฅผ ๊ฐ€์ง€๋Š” ๋ฉ”์„ธ์ง€๋งŒ ์ˆ˜์‹ ํ•จ.


(3). MCU 2์—์„œ MCU 1์œผ๋กœ ํ•ด๋‹น ID์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์†ก์‹ ํ•˜๋Š” ๊ฒฝ์šฐ

  • MCU 1์—์„œ๋Š” MCU 2๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” 0x100, 0x108 ID์˜ ๋ฉ”์„ธ์ง€๋ฅผ ๋ชจ๋‘ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์Œ.


(4). 0x100 Std ID๋กœ ๋ฐ์ดํ„ฐ 1์„ ์†ก์‹ ํ•  ๋•Œ์˜ CAN ๋ฉ”์„ธ์ง€์˜ Data Frame ํŒŒํ˜• ์ธก์ •

  • Data Field๋Š” 8 byte๋กœ ์„ค์ •๋จ.
  • ๋งˆ์ง€๋ง‰ 7 bits๋Š” End Frame ์˜๋ฏธ.

  • Data Frame ํฌ๋ฉง


์ฐธ๊ณ 

ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•  ๋•Œ๋Š” ๋‹ค์Œ ๊ฒฝ๋กœ์— ์žˆ๋Š” ํด๋”๋ฅผ ๋นŒ๋“œ ๋ฐ ๋””๋ฒ„๊ทธ ํ•ญ๋ชฉ์—์„œ ์ œ์™ธํ•ด์•ผ ์ •์ƒ์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค.

  • stm32f411ceu6_fw_module โ†’ src โ†’ lib โ†’ Core

How to exclude

๐Ÿ“Œ
โ€ข Core ํด๋”๋ฅผ ํด๋ฆญํ•˜๊ณ  ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ใ€€ใ€€ใ€€



โ€ข ์ตœ์ข…์ ์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ํด๋” ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.





About

STM32F103VET6 Dev Board, Perform bxCAN test through Uart.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages