이글의 전부 또는 일부, 사진, 소스프로그램 등은 저작자의 동의 없이는 상업적인 사용을 금지합니다. 또한, 비상업적인 목적이라하더라도 출처를 밝히지 않고 게시하는 것은 금지합니다.

 

 

32비트 MCU를 배우려는 목적으로 STM32F407VGT6 보드를 먼저 구입했지만, STM32F103C8T6으로 만든 일명 Blue Pill의 존재를 알게 되었습니다. 저렴한 가격에 혹해서 STM32F103C8T6 보드를 3개 구입했습니다. 원래는 STM32F407VGT6 보드로 STM32F를 익혀가면서 이 블로그를 진행할 예정이었습니다만, STM32f103 보드가 3개인 관계로 계획을 수정하여 STM32F103 위주로 진행하겠습니다. STM32F103 보드에서 익힌 내용을 STM32F407VGT6에서도 구현해 보는 방향으로 진행하겠습니다. 물론 STM32F103에는 없는 기능이 STM32F407VGT6에는 있으므로 이런 내용은 따로 익혀 보도록 하겠습니다.

마이크로프로세서를 처음 접하면 타이머 인터럽트를 제일 먼저 해 보곤 했습니다만, STM32는 시리얼 통신을 먼저 다루게 되었습니다. 시리얼 통신 프로젝트 이후로는 역시 타이머를 익혀서, 타이머로 LED를 켰다 껐다하는 프로젝트를 진행할 예정입니다. 타이머 프로젝트를 마친 후에는 Mono LCD를 제어하는 프로젝트 몇 가지를 진행할 예정입니다.

 

 

LCD를 제어하는 방법으로는 우선 avr에서 했던 것처럼 GPIO 핀으로 제어해 보겠습니다. GPIO 제어 방법을 터득한 후에는 SM32F4xx의 FSMC(Flexible Static Memory Controller)를 이용한 제어 방법을 학습할 예정입니다. 4bit로 제어하기와 8비트로 제어하기를 모두 해 볼 예정입니다. 제어할 LCD로는 16 x 2 규격 및 40 x 4 규격의 Mono Character LCD, Controller가 내장된 Graphic LCD, controller가 내장되지 않은 Graphic LCD를 총 망라하여 가지고 있는 모든 Mono LCD를 다 작동시켜 볼 예정입니다.

 

 

첫 프로젝트는 시리얼 통신으로 무선 Wifi 모듈인 ESP8266을 제어하는 것으로 잡았습니다. STM32F407의 USART2에 ESP8266을 연결하고, USART3에 USB-TTL 모듈을 통해서 PC를 연결합니다. PC로부터의 명령을 USART3로 받아서 USART2에 연결되어 있는 ESP8266에 전달하고, ESP8266이 내보내는 출력을 USART2로 받아서 USART3를 통하여 PC로 전달합니다. 그냥 ESP8266을 PC에 바로 물린 것과 결과는 같지만, STM32F407로 ESP8266을 제어할 수 있는 방법을 터득합니다. 또, STM32가 제대로 동작하는지 모니터하는 도구로 PC를 사용할 수도 있습니다.

 


 




사용할 보드와 프로그래밍 툴 및 소프트웨어는 앞의 글에서 준비 및 설치를 완료한 것으로 간주하고 진행합니다. 앞의 글 링크입니다. http://microprocess.tistory.com/1


사용할 보드와 프로그래밍 툴입니다.



STM32CubeMX로 프로젝트를 만들고, True Studio에서 프로그램을 작성하도록 하겠습니다. 이번 글은 프로젝트를 만드는 과정만 다루고 본격적인 프로그래밍은 다음 글에서 시작합니다. 이번 글에는 어려운 내용은 없지만, 화면을 캡처한 그림이 많아 글이 조금 길어질 것으로 예상합니다.


 

통신을 할 때에 데이터 송신은 필요할 때에 하면 되지만, 데이터 수신은 상대방이 언제 데이터를 보낼지 모릅니다. 송신은 보내고 싶을 때에 보내면 됩니다. 반면에 수신은 데이터가 도착했을 때에 인터럽트가 발생하도록 해서 인터럽트 처리 루틴에서 데이터를 수신하도록 하는 방법을 많이 사용합니다. 이번 프로젝트는 데이터 수신을 인터럽트로 처리하는 방식으로 진행합니다.

 

    

 

 

STM32CubeMX로 프로젝트 만들기

 

 

 

 

① STM32CubeMX를 실행하고 New Project를 클릭합니다.

 

 

 

 

② Part Number Search 난에 STM32F407VG를 입력합니다. 오른쪽 아래 MCUs List에 있는 STM32F407VG 행을 더블 클릭합니다.

 

 

 

 

③ 왼쪽 창의 스크롤바를 아래로 내려 [SYS]를 찾아 클릭한 다음 [Debug] 항목을 [Serial Wire]로 선택합니다. 필자가 사용하는 디버그 방법이 SWD(Serial Wire Debug)이므로 Serial Wire를 선택했습니다. 이 항목은 반드시 설정해야합니다. 만약 이 항목을 설정하지 않고 프로젝트를 만들어서 보드로 다운로드하면 다음 번에는 SWD로는 MPU에 다운로드할 수 없는 사태가 발생합니다.  SWD로 다운로드할 수 없는 사태가 발생하면, BOOT 모드를 달리하여 부팅해서 DFU 또는 USART를 이용해서 프로그램을 다운로드해야 합니다. 중요한 설정이기 때문에 항상 프로젝트를 만들면 첫 순서로 이 항목을 설정하는 것을 습관화시켜야 합니다.

SYS의 Debug를 Serial Wire로 설정하면 아래의 그림에서와 같이 PA13핀과 PA14핀이 초록색으로 바뀝니다.

 

 

 

 

④ 왼쪽 창에서 [RCC] 항목을 찾아 [High Speed Clock(HSE)] 항목을 [Crystal/Ceramic]으로 설정합니다. 오른쪽 창에 있는 STM32F407의 PH0핀과 PH1핀이 초록색으로 바뀝니다.

 

 

 

 

⑤ 왼쪽 창에서 [USART2]를 찾아 [Mode]를 [Asynchronous]로 설정합니다. STM32F407의 PA2핀과 PA3핀이 초록색으로 바뀝니다.

 

 

 

 

⑥ 마찬가지로 왼쪽 창에서 [USART3]를 찾아 [Mode]를 [Asynchronous]로 설정합니다. STM32F407의 PB10핀과 PB11핀이 초록색으로 바뀝니다. Pinout 설정은 완료되었습니다.

 

 

 

⑦ [Clock Configuration] 탭을 클릭합니다. 새로 나온 화면의 [PLL Clock Source]가 기본적으로 [HSI](High Speed Internal)로 설정되어 있는데  [HSE](High Speed External)로 선택합니다. SM32CubeMx로 프로젝트를 만드는 많은 인터넷 사이트에서 이 부분을 언급하지 않아서 혼란을 겪었습니다. 앞의 Pinout 설정 ④에서 [RCC] 항목의 [HSE]를 [Crystal/Ceramic]으로 설정하면 외부 크리스털을 클럭 소스로 쓰도록 설정한 것으로 생각하기 쉽습니다. 그러나, ④ 단계는 말 그대로 Pinout 설정 단계입니다. 외부 크리스털을 사용할 수 있도록 핀을 할당하였을 뿐이고, 실제로 외부 크리스털을 클럭으로 사용하도록 설정하려면, 이 메뉴에서 [PLL Clock Source]를 [HSE]로 설정해야 합니다.

본 글에서 사용하는 보드에는 8MHz의 크리스털이 장착되어 있으므로 좌측의 [Input Frequency]를 8로 입력합니다. HCLK(MHz)의 값을 48MHz로 설정하고 [Enter] 키를 누릅니다.

 

 

 

STM32CubeMx 내에 혀재 설정 값과 맞는 설정이 없으므로 다른 설정을 사용할 것인지 여부를 묻습니다. [Cancel] 버튼을 누르면 현재의 설정을 그대로 적용하기 때문에 HCLK를 48MHz로 바꿀 수가 없습니다. [OK] 버튼을 눌러야 합니다. HCLK를 48MHz로 설정해야하는 이유는 다음 글에서 설명하겠습니다.

 

 

 

 

[OK] 버튼을 누르면 STM32CubeMx가 가지고 있는 값의 세트를 가져와서 전체 클럭 값을 다시 설정합니다. 그 결과 화면입니다. [PLL Clock Source]가 다시 HSI로 설정되었습니다.

 

 

 

[PLL Clock Source]를 다시 [HSE]로 설정하고 [HCLK]를 48MHz로 설정한 다음 [Enter] 키를 누릅니다. [PLL Clock Source]를 [HSE]로 설정하는 순간 값이 맞지 않는 항목들이 빨간색으로 표시되지만,  [HCLK] 값을 48MHz로 입력하고 [Enter] 키를 누르면 프로그램이 재계산하여 값을 맞추어 줍니다.

 

프로그램이 설정해 준 결과 화면입니다.

 

 

⑧ [Configuration] 탭을 클릭합니다. 새로 나온 화면 중 [Connectivity] 항목에 [USART2]와 [USART3]가 있습니다. 이 중 [USART2]를 클릭하면 다음과 같이 [USART2 Configuration] 화면이 나옵니다. [Parameter Settings]를 클릭한 다음에 시리얼 통신 환경을 설정합니다. 필자는 ESP8266을 속도 115200bps, 패리티 없음, 데이터비트 8, 스톱비트 1의 조건으로 사용할 예정입니다. 각자의 통신 환경에 맞도록 설정합니다.

 

 

 

 

⑨ 위의 팝업 창에서 [NVIC Settings] 탭을 클릭하고, [Enabled]에 체크합니다.

 

 

 

 

 

⑩ ⑧, ⑨를 반복하여 [USART3]의 환경도 설정합니다.

 

 

 

⑪ STM32CubeMx의 [Project] 메뉴에서 [Settings...]를 클릭합니다.

 

 

 

⑫ [Project Settings] 팝업 창의 [Project Name]에 STM32F407Uart를 입력합니다. 실제 프로그램은 True Studio로 작성할 것이므로 [Toolchain / IDE ] 항목의 화살표를 클릭하여 [TrueStudio]를 선택한 후에 [OK] 버튼을 클릭합니다.

 

 

 

 

⑬ [Project] 메뉴의 [Generate Code]를 클릭하면 다음 그림과 같은 화면이 나오면서 프로젝트를 생성합니다.

 

 

 

프로젝트 생성이 끝나면 다음과 같은 팝업 창이 나타납니다.

 

 

 

 

⑭ [Open Project] 버튼을 누르면 True Studio가 실행되면서 STM32F407Uart 프로젝트가 열립니다. 아래 그림의 Project 창에 STM32F407Uart가 있습니다.

 

 

 

이상으로 STM32CubeMx로 STM32F407Uart 프로젝트를 만들고,  True Studio에서 코딩할 준비까지 완료하였습니다.

 

 

 

⑮ 추가로 이 프로젝트와 관련된 설정을 같이 저장해 두면 여러모로 도움이 될 수 있습니다. STM32CubeMx의 [Project] 메뉴에서 [Generate Report] 버튼을 누릅니다. 잠시 후 다음과 같은 팝업 창이 나타납니다.

 

 

 

[Open Folder] 버튼을 누르면, 다음과 같이 폴더의 내용이 보입니다.

 

 

위 파일들 중에서 STM32F407Uart.pdf와 STM32F407Uart.txt 파일에 프로젝트의 설정이 들어 있습니다. 프로젝트에 사용한 라이브러리 버전, STM32F407의 핀 설정, 클럭 설정, USART2, USART3 설정 등 프로젝트에서 설정한 내용들이 들어 있습니다. 나중에 프로젝트를 변경할 때에 유용할 것으로 보입니다.

 

초록색으로 표시한 STM32F407Uart.ioc가 STM32CubeMx에서 생성한 프로젝트 파일입니다. 이 파일을 더블 클릭하면 STM32CubeMx 프로그램이 실행되면서, 프로젝트를 수정할 수 있는 상태가 됩니다.

 

다음 글에서는 True Studio에서 USART를 통해서 ESP8266을 제어하는 코딩 작업을 하겠습니다.

 


블로그 이미지

엠쿠스

Microprocessor(STM32, AVR)로 무엇인가를 만들어 보고자 학습 중입니다.

,