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





앞의 글에서처럼 스케치에서 STLINK로 upload시키면 절차도 간단하고 속도가 빨라서 좋기는합니다만, Blue Pill 보드와 ST-LINK를 같이 가지고 다녀야 한다는 불편함이 있습니다. 이번 글에서는 USB 포트로 upload할 수 있도록 해서 간단하게 Blue Pill 보드와 micro USB 케이블만 있으면 되도록 작업해 보겠습니다.

이렇게 구성하기 위해서는 Blue Pill 보드에 부트로더를 기록해야 합니다. STM32F103에 기본적으로 기록되어 있는 부트로더는 UART 포트는 지원하지만, USB 포트는 지원하지 않습니다. 이 부트로더를 USB 포트를 지원하는 부트로더로 바꾸는 작업을 해야 합니다.

STM32F103에 부트로더를 기록하는 방법은 크게 두 가지가 있습니다. 첫째는 STM32F103이 기본적으로 가지고 있는 부트로더를 이용해서 UART 등으로 기록하는 방법이고, 두번째는 ST-LINK로 기록하는 방법입니다. 본 글에서는 ST-LINK로 부트로더를 기록하는 방법을 설명하겠습니다. 이미 STMicroelectronics사의 ST-LINK Utility가 설치되어 있는 경우에는 ③, ④ 단계는 건너 뛰기 바랍니다.


① RogerClarkBourne의 GitHub 사이트에서 STM32duino-bootloader를 클릭한 후에 binaries 폴더를 클릭합니다. binaries 폴더에서 generic_boot20_pc13.bin을 다운로드합니다.

 

 


 

 

② RogerClarkBourne의 GitHub 사이트에서 Arduino_STM32를 클릭합니다. 아래 그림에서 빨간 사각형으로 표시한 [Clone or download] 버튼을 클릭한 후에, [Download ZIP]을 클릭하여 다운로드 받습니다. 다운로드 받은 zip 파일을 적당한 폴더에 풀어 놓습니다.



③ https://www.st.com/en/development-tools/stsw-link004.html에서 파란색 메뉴 중 [Software] 항목을 클릭하거나 페이지의 맨 아래로 이동하여, ST-LINK Utility 프로그램을 다운로드 받습니다. 다운로드 받기 위해서는 회원으로 가입하거나 간단한 인적 사항을 입력해야 합니다. 다운 받은 프로그램을 설치합니다.

 

 

④ 설치 도중 드라이버를 설치하겠느냐는 창이 나오면 [다음(N)>] 버튼을 클릭하여 설치합니다. 이 프로그램은 ST-LINK/V2로 STM32시리즈의 MPU에 다운로드시키는 프로그램으로 stm32duino에서만 사용하는 것은 아닙니다.

 

 

 

 

 

 

⑤ 다음의 사진과 같이 Blue Pill 보드의 BOOT0를 1(high)로 하고, ST-LINK/V2와 Bue Pill 보드를 연결합니다. Blue Pill 보드가 연결된 ST-LINK/V2를 USB 포트에 설치합니다. ST-LINK/V2의 드라이버가 잘 설치되어 있으면 장치관리자에 다음과 그림과 같이 STM32 STLink가 나타납니다.

 

 

 

 

 

 

 

⑥ ST-LINK Utility를 실행한 다음에 [Target] 메뉴에서 [Connect]를 클릭하여 다음 그림과 같이 잘 인식되었는지 확인합니다. 같은 Blue Pill 보드인데, Flash size는 64KBytes인 것도 있고 128KBytes인 것도 있습니다.

 

 

 

 

⑦ [Binary File] 탭을 우측 마우스 버튼으로 클릭한 다음에 [Open File]을 클릭합니다.

 

 

 

 

⑧ ①에서 다운로드 받아 놓은 generic_boot20_pc13.bin 파일을 선택합니다.

 

 

 

 

⑨ [Target] 메뉴의 [Program & Verify] 항목을 클릭한 다음 [Start] 버튼을 클릭하여 부트로더를 Blue Pill 보드에 기록합니다. 부트로더를 성공적으로 기록했으면 더 이상 ST-LINK/V2는 필요 없으므로 USB 포트에서 제거합니다.

 

 

 

 

정상적으로 기록되었으면 Blue Pill 보드의 BOOT0을 다시 0(low)으로 설정합니다. 부드로더가 정상적으로 기록되었으면 전원을 투입하거나 reset 버튼을 눌렀을 때에 다음 동영상에서와 같이 led가 깜빡입니다.

 

 


⑩ ②에서 다운로드 받은 zip 파일을 풀어 놓은 폴더의 [Drivers\win] 폴더에서 [install_drivers.bat]를 마우스 우측으로 클릭하여 [관리자 권한으로 실행]을 선택하여 실행합니다. 꼭 관리자 권한으로 해야만 하는지는 모르겠지만 안전하게 설치하기 위해서 그렇게 실행했습니다.

 

 

 


⑪ ⑩에서 드라이버가 정상적으로 연결되었고, Blue Pill의 USB 포트에 정상적으로 인식이 되면 장치관리자에 다음과 같이 Maple DFU가 나타납니다.

 

 

 

⑫ ②에서 풀어 놓은 폴더를 Arduino를 설치한 폴더 아래의 [hardware] 폴더 안에 모두 다 옮깁니다. 또는 ②에서 풀어 놓은 폴더를 [문서] 아래의 [Arduino] 폴더 안에 있는 [hardware] 폴더에 옮겨도 됩니다. 만약 [hardware] 폴더가 없으면 소문자로 [hardware] 폴더를 만들고 그 안에 옮깁니다.

 

 

⑬ 스케치의 [파일] 메뉴에서 [예제], [Basics], [Blink]를 선택합니다. [툴] 메뉴에서 [Upload method]를 [STM32duino bootloader]로 지정하고, [스케치] 메뉴에서 [업로드]를 클릭합니다. 업로드가 성공적으로 완성되면 아래의 그림과 같은 메시지가 보입니다.

 


 

 

 

 

⑬ ⑫에서 업로드가 성공적으로 끝나자마자 딩동 소리가 두 번 들립니다. Upload가 성공적으로 끝나면 USB 포트를 리셋시키고 새로 시작하면서 Maple DFU를 새로이 serial port로 인식하면서 두 번의 딩동 소리가 나는 것입니다. 실제로 장치관리자를 열어 보면 Maple DFU가 없어지고, 아래의 그림과 같이 Maple Serial(COMx)로 나타납니다. (COM 포트의 번호는 PC마다 다릅니다.) 이런 현상은 최초로 upload할 때에만 한 번 일어납니다.

 

 

 

⑭ Serial Port가 나타났으므로 [툴] 메뉴의 메뉴의 [포트]가 [COMx]로 잡혀 있을 것입니다.(x는 사용자의 PC에서 설정된 포트값입니다. 위의 경우 3)

 

이 방법으로 upload하면 BOOT0나 BOOT1 핀을 바꿀 필요도 없고, upload하기 전이나 후에도 수동으로 reset을할 필요도 없으며, Blue Pill 보드와 USB 케이블만 있으면 되기 때문에 매우 편리합니다. 다만 부트로더가 8KByte를 차지하기 때문에 사용자의 프로그램이 0x08002000번지부터 시작하게 되어, 사용가능한 flash 메모리가 8KByte 줄어듭니다. 즉, 64KByte 제품의 경우 56KByte를, 128KByte 제품의 경우 120KByte를 사용할 수 있습니다.


전원을 투입하거나 reset 버튼을 누르면 스케치 컴파일러가 upload할 것인지를 잠시 기다립니다. 스케치의 upload 신호를 받지 못하면 flash memory의 0x08002000에 있는 응용프로그램을 실행합니다. 스케치의 upload 신호를 기다리는 동안 Blue Pill 보드의 led가 빠르게 깜빡입니다. 다음은 Blink 응용프로그램이 탑재된 상태의 Blue Pill 보드 동작 상황을 보여주는 동영상입니다. 전원 투입 후 잠시 led가 빠르게 깜빡이고, reset 버튼을 누른 후에도 잠시 빠르게 깜빡이는 것을 볼 수 있습니다.

 

 

 

 

간혹 ⑪ 단계에서 장치관리자에 인식이 안되는 경우가 있습니다. 이런 현상이 발생하는 이유는 Blue Pill의 R10 때문입니다. 원래 USB의 D+(Blue Pill의 PA12)는 Vcc에 1.5kΩ으로 풀업 되어 있어야 하는데, Blue Pill의 경우 R10(10kΩ)입니다. 이로 인해서 정상적으로 인식이 안되는 경우가 발생할 수 있습니다. 만약 잘 인식이 안되는 경우에는 PA12 핀을 1.8kΩ 정도의 저항으로 3.3V 단자에 연결하면 이런 현상이 없어집니다. 다음 그림은 이런 조치를 한 예입니다. 모든 PC에서 이런 현상이 나타나는 것은 아닙니다. 필자의 경우에는 별 다른 조치 없이10kΩ 상태에서 잘 인식되었습니다.



출처http://wiki.stm32duino.com/index.php?title=Blue_Pill




참고로 ST-LINK가 없는 경우에는 USB-TTL 도구만 있으면 UART로 부트로더를 기록할 수 있습니다. 이 방법으로 부트로더를 기록하는 것에 관하여는 인터넷에 많은 자료가 있습니다. UART를 이용한 부트로더 기록 방법은 영문으로된 사이트를 링크하는 것으로 대신합니다.

블로그 이미지

엠쿠스

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

,