현재 ST에서는 STM32CubeMX 제공하고 있으며, Atolic에서는 TrueStudio 개발환경을 제공을 해주고 있다.
STM32CubeMX는 GUI을 이용하여 쉽게 PLL 설정 부터 PIN 설정을 쉽게가능하고 관련 SW를 쉽게 소스를 설치 및 설정할수 있도록 지원하고, 소스를 생성가능하다.
TrueStudio는 이클립스 CDT 기반으로 GCC를 이용하여 구현되어있으며, 이클립스를 사용을 해본사람이면, 쉽게 사용이 가능하다.
- Download
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 설정
- Clock Configuration
회로도를 보고, 내부 오실레이터 사용할지, 외부 오실레이터를 사용할지 잘 보자.
그리고, 최종 APB PCLK 과 Datasheet의 권고사항을 잘 보자.
이 Chip에는 MCO라는 것이 있는데, 이는 Ethernet PHY 칩에게 공급되는 Clock으로 정확하게 이해하자.
- PinOut&Configuration->SYS (JTAG의 SW모드 설정)
현재 나의 경우는 SWD모드로 사용.
JTAG에서 SWD모드를 사용하고 있으며, 상위에서 그 부분을 설정해줘야 한다. 그리고, ST-Link Utility를 비롯하여 연결되는 Interface는 JTAG 대신 SWD로 설정해줘야한다.
- JTAG과 SWD 모드
- JTAG 4Pin
- JTAG 5Pin
- 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
HW 적으로 필요하다면, RTC/TIM를 설정해서 사용하자.
- PinOut&Configuration->Connectvity
대신, Interrupt는 사용한다.
- Ethernet의 PIN 및 Interface 설정
관련 PHY는 설정은 Default로 사용해도 무방할 것이다.
Auto-Negotiation 과 RX Mode의 Polling은 While 무한루프 함수를 사용하여, 이더넷을 살펴봐서 이벤트가 발생하며, 이를 알려주는 방식이다.
- PinOut&Configuration->Middleware->LWIP
옵션으로 SNMP 멀티캐스트 필요하다면 설정, SNTP시간설정필요하다면 설정.
- PinOut&Configuration->GPIO 설정
- Nested vectored interrupt controller (NVIC)
- 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의 scanf도 사용하고 싶다면, __io_getchar(void) 를 이용하면 될것이다.
- 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