본문 바로가기

전자공학/프로그래밍

STM32CubeMX 사용과 MCU선정 방법 파헤치기 2탄

안녕하세요.

Edward입니다.

 

1탄에 이어서 STM32CubeMX 사용방법에 대해서 이어서 진행하겠습니다 ^^

"이 포스팅의 중요한 Key point는 SPI, CAN, UART, Clock의 세팅 방법입니다."

STM32CubeMX를 설치하는 방법과 관련된 링크는 아래를 참고해주세요^^

 : STM32CubeMX 설치하기(링크)

 : STM32CubeMX 사용과 MCU선정 방법 파헤치기 1탄


 

자, 1편에서는 칩 세팅 로딩까지만 확인했습니다.

이제, Peripheral기능을 설정하여 기능을 추가하는 방법에 대해 알아보겠습니다 ^^

하나씩 순서대로 설명할게요! ^^

1. SPI를 3ea를 사용할 거예요. 근데, SPI 3ea 중에 2개는 Master로, 1개는 Slave로 세팅해서 사용할 거예요!!

  • SPI1 = Master
  • SPI2 = Slave
  • SPI3 = Master
    • Basic Parameters
      • 기본 세팅으로 아래와 같이 세팅합니다. 
        • Frame Format = Motorola
        • Data Size = 8 Bits
        • First Bit = MSB First
    • Clock Parameters
      • 일단 기본 세팅으로 시작하고 Clock지정 후에 다시 봐야 해요.
      • 그리고 SPI로 연동할 IC에 따라서 Clock 동작이 변형되니깐 일단 기본으로 진행합니다. 
        • Prescaler(for Baud Rate) = 2
        • Baud Rate = 8.0 Mbits/s
        • Clock Polarity (CPOL) = Low
        • Clock Phase (CPHA) = 1 Edge
    • Advanced Parameters
      • CRC는 기본 Disable로 하고 NSS(CS)를 Master 세팅이니깐 Output Hardware로 세팅합니다.
        • CRC Calculation = Disabled
        • NSS Signal Type = Output Hardware

그러면 SPI 3ea를 사용했으니 MCU 핀에 자동적으로 등록되었어요!!

아! 그리고 SPI2는 Slave로 세팅한다면 대부분 인터럽트를 사용해요!! 그래서 만약 인터럽트를 사용하실 경우에는 "NVIC Settings" 탭에서 SPI2 global interrupt를 Enable로 체크해주셔야 합니다!!!

SPI1 Master 세팅
SPI2 Slave 세팅

 

SPI3 Master 세팅

 

 

2. CAN 기능은 2ea 세팅할 거예요!

사실 CAN은 속도 이외에 크게 세팅할 것이 없어요.

CAN의 가장 빠른 속도는 1 Mbps이고, 대부분 250 kbps나 500 kbps를 많이 사용해요!

그리고 가장 중요한 건 CAN을 2개 사용할 경우인데요.

제가 맞는지는 모르겠지만, 제가 CAN을 2개 사용했을 때, 버퍼의 문제가 있었어요.

CAN1은 RX0/TX0을 사용해야 하고, CAN2는 RX1/TX1을 사용해야 한다고 Datasheet에서 본 것 같아, 그대로 하니깐 문제없이 동작했었어요. 정확하게 지금 기억이 나질 않네요.

다만, CAN이 서로 개별 동작을 해야 하니깐 버퍼를 따로 구동해야 하는 건 맞습니다 ^^

CAN1 파라미터 세팅
CAN1 인터럽트 세팅
CAN2 인터럽트 세팅

 

 

3. UART를 세팅해봅시다!!

왜 USART1핀을 사용했냐면?!

사실 STmicroelectronics칩에는 펌웨어 다운로드용 부트로더 기능을 UART로 업데이트 가능하도록 제공하는데요. 

이번에 사용하는 STM32F412RG 시리즈는 USART1이 펌웨어 다운로드용 부트로더 핀입니다.

그래서 펌웨어 다운로드용으로도 사용하고, 또 디버깅용으로 사용하려고 합니다 ^^

디버깅용으로 사용할 거니깐 인터럽트 세팅은 필요 없고요 ^^ Baud rate는 115200으로 맞춰주시면 됩니다!

USART1 세팅

 

4. Clock을 세팅해봅시다!!

가장 중요한 부분인데요.

MCU는 내부 X-tal과 외부 X-tal, 둘 중 하나를 사용하여 동작을 할 수 있습니다.

가장 간편한 건 내부 X-tal로 세팅해서 사용하는 방법인데요.

내부 X-tal 방법은 외부 X-tal보다 클럭 오차율이 높습니다.

그래서 좀 더 정확한 동작과 성능을 원하시면 외부 X-tal을 부착하는 것이 좋아요.

그래서 저는 외부 X-tal을 부착할 겁니다 ^^

RCC Clock 세팅

 

 

5. 전체 Clock 세팅하기!!

마지막 세팅이에요!!

"Clock Configuration"탭으로 가서 Clock 속도를 설정할 거예요.

방금 위에서 말씀드린 바와 같이 Clock은 외부 X-tal을 사용할 거고요. 12 Mhz를 사용할 거예요!!

그리고 MCU 전체 Clock은 100 Mhz로 동작시키겠습니다!!

굉장히 쉽죠??ㅎㅎ

전체 Clock 세팅하기

 

6. 마지막으로 코드 제너레이트!!!

자, 이제 이 세팅한 방법을 이용해서 코드 제너레이트를 할 거예요!!

"Projtect Manager" 탭으로 가서 아래와 같이 세팅하시면 돼요!! 사실 "Tools"탭은 안 건드려도 됩니다 ㅎㅎ

여기서 주요로 봐야 할 점은 코드 제너레이트를 어떤 Toolchain으로 하는 건데요.

STmicro에서 지원하는 무료 Tool은 2가지가 있어요.

1. TrueStudio

2. STM32 CubeIDE

초창기에는 TrueStudio라는 Tool을 지원했었는데요. 이젠 지원을 안 하나 보더라고요.

최근 ST에서는 STM32 CubeIDE만 업데이트 지원을 하기 때문에 이 Toolchain으로 사용하시면 될 것 같아요!!!

다 되었다면?! 상단에 "GENERATE CODE"를 누르시면 됩니다 ^^

 

다음은 STM32 CubeIDE를 설치하는 방법을 알아볼게요!!