6/17/2019

STM32CubeMX 와 TrueStudio

1. STM32관련 부분개발 IDE 환경

현재 ST에서는 STM32CubeMX 제공하고 있으며, Atolic에서는 TrueStudio 개발환경을 제공을 해주고 있다.
STM32CubeMX는 GUI을 이용하여 쉽게 PLL 설정 부터 PIN 설정을 쉽게가능하고 관련 SW를 쉽게 소스를 설치 및 설정할수 있도록 지원하고, 소스를 생성가능하다.
TrueStudio는 이클립스 CDT 기반으로 GCC를 이용하여 구현되어있으며, 이클립스를 사용을 해본사람이면, 쉽게 사용이 가능하다.


  • Download 
STM32CubeMX
  https://www.st.com/en/development-tools/stm32cubemx.html

TrueStudio
  https://atollic.com/truestudio/

STM32CubeIDE
  https://www.st.com/en/development-tools/stm32cubeide.html


현재 ST사에서 상위 두개 프로그램 합쳐서 제공
STM32CubeIDE 1.0.0  ( STM32 CubeMX 와 TrueStudio 합쳐진 것으로 생각하면됨)

1.1  STM32CubeMX 

STM32CubeMX의 역할은 쉽게 GUI로 PIN 및 Clock 을 설정 하고,  관련 Package를 선택을 하면, 쉽게 코드가 생성이되는 Tool 이다.

처음 해야할 일이 회로도 기반으로 PINOUT를 설정하고, 그 다음에, PLL 관련 설정 일 것이다.
그리고, 사용할 Driver 부터 Middleware를 선택하여, 기본 사용법을 익히자.

  • PinOut&Configuration (전체 PINOUT 보기 )




  • PinOut&Configuration->RCC 설정 
PLL의 입력 Clock 과 Clock 관련 핀설정



  • Clock Configuration 
현재 STM32F104F 는 내부에 오실레이터 8MHz 와 외부 오실레터를 별도로 둘 수 가 있다.
회로도를 보고, 내부 오실레이터 사용할지, 외부 오실레이터를 사용할지 잘 보자.
그리고, 최종 APB PCLK 과 Datasheet의 권고사항을 잘 보자.
이 Chip에는 MCO라는 것이 있는데, 이는 Ethernet PHY 칩에게 공급되는 Clock으로 정확하게 이해하자.



  • PinOut&Configuration->SYS (JTAG의 SW모드 설정)
STM의 JTAG or SWD(Serial Wired Debug)설정부분이며, 이 부분을 제대로 설정하지 않는다면 다음에 제대로 쓸수가 없다.
현재 나의 경우는 SWD모드로 사용.


JTAG에서 SWD모드를 사용하고 있으며, 상위에서 그 부분을 설정해줘야 한다. 그리고, ST-Link Utility를 비롯하여 연결되는 Interface는 JTAG 대신 SWD로 설정해줘야한다.


  • JTAG과 SWD 모드 
  1. JTAG 4Pin
  2. JTAG 5Pin
  3. SWD (SWDIO,SWCLK ) 


  https://www.st.com/resource/en/user_manual/dm00026748.pdf


  • STM32F10x기본구조 



JTAG 관련정보
  http://forum.falinux.com/zbxe/index.php?document_srl=796669&mid=lecture_tip


  • PinOut&Configuration->Timers
Timer를 기본적으로 하나를 반드시 사용해야하는 줄 알았는데,  내부의 SysTick 라는 것이 존재하여 리눅스처럼, Jiffies 설정을 위해서 별도로 사용할 필요가 없다.
HW 적으로 필요하다면, RTC/TIM를 설정해서 사용하자.



  • PinOut&Configuration->Connectvity
UART부분 설정으로, Consol의 역할로 나의 경우는 TX만 설정하고, RX는 Pull -down으로 설정
대신, Interrupt는 사용한다.



  • Ethernet의 PIN 및 Interface 설정 
MII Interface로 설정하고, NVIC의 Interrupt는 별도로 사용하지는 않았다.
관련 PHY는 설정은 Default로 사용해도 무방할 것이다.



Auto-Negotiation 과 RX Mode의 Polling은  While 무한루프 함수를 사용하여, 이더넷을 살펴봐서 이벤트가 발생하며, 이를 알려주는 방식이다.



  • PinOut&Configuration->Middleware->LWIP
LWIP에서 필요한 부분 설정을 하며, 기본으로 체크해야 할 부분이 Checksum은 Hardware 지원변경하고, General Setting에서 필요한 기능을 사용설정

옵션으로 SNMP 멀티캐스트 필요하다면 설정, SNTP시간설정필요하다면 설정.




  • PinOut&Configuration->GPIO 설정
GPIO를 인터럽트로 사용하고 싶다면, 아래의 설정을 이해를 하자.

  1. Nested vectored interrupt controller (NVIC)
  2. External interrupt/event controller (EXTI)

아래와 같이 GPIO를 External Interrupt Mode 설정 


GPIO->NVIC에서 EXTI line 을 설정 선점 우선순위도 설정가능



  • PinOut&Configuration->NVIC

사용할 Interrupt 및 Exception 을 설정하고 Priorioty도 설정



1.2 TrueStudio 사용방법

다른 이클립스와 동일하며, 확인해야할 것은 Compiler인 GCC 이다.
처음 코드가 생성되면 제대로 동작이 된다면, 아래와 같이 쉽게 동작인된다.



기본적으로 Linux 커널처럼 weak를 사용하며, 이미 Function들은 정의가 되어있지만, 구현되지 않은 것이 많다.
그래서, 그런부분은 필요에 따라 본인이 구현을 해서 넣으면, 관련부분은 동작이 된다.


  • GPIO Interrupt

상위 GPIO에서 설정한대로 설정하고, ISR만 아래처럼 구현을 하면된다.

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)  
{
  if (GPIO_Pin == GPIO_PIN_14)
  {
  }
}

  • UART의 Printf사용방법
UART를 설정을 했다면, 아래와 같이 GCC에서 아래의 함수를 추가하면 printf가 동작한다.
만약 UART의 scanf도 사용하고 싶다면,  __io_getchar(void) 를 이용하면 될것이다.


  • Linker Script
GCC 기반이므로, Linker Script 관련부분은 아래 참조
  https://ahyuo79.blogspot.com/2018/04/link-script.html

Flash Write
  https://m.blog.naver.com/PostView.nhn?blogId=gauya&logNo=220936982058&proxyReferer=https%3A%2F%2Fwww.google.com%2F
  http://blog.naver.com/PostView.nhn?blogId=wararat&logNo=220761212163&parentCategoryNo=&categoryNo=71&viewDate=&isShowPopularPosts=true&from=search
  https://community.st.com/s/question/0D50X00009XkfIOSAZ/stm32f0-help-with-flash-to-read-and-write-hal-libraries

UART 관련사항
  https://mul-ku.tistory.com/entry/STM32-UART-%EC%88%98%EC%8B%A0-%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8-%EC%82%AC%EC%9A%A9%EB%B2%95-%EB%B0%8F-%EA%B0%84%EB%8B%A8%ED%95%9C-%EC%98%88%EC%A0%9CHAL-DRIVER


TrueStudio  SVN
  https://mobilegen.tistory.com/38