칩은 STM사의 STM32F103C8 를 사용하고
컴파일러는 KEIL컴파일러를 이용하려고 합니다.
1. 폴더구조 생성
- 먼저 폴더구조를 생성합니다. GPIO라는 폴더안에 LIB/USER/MDK_STD 폴더를
생성합니다.
LIB폴더는 라이브러리, USER폴더는 직접코딩한 파일, MDK_STD폴더는 프로젝트
파일을 넣을 예정입니다.
2. SPL 다운로드
- SPL를 다운로드해야합니다.
구글검색창에 stm32f10x standard peripheral library를 입력한 후
가장 위에 링크로 접속합니다.
자주들러야하는곳이므로 회원가입을 하고 맨아래에 있는 SPL을 다운로드 합니다.
3. 필요한 파일 가져오기
- 다운로드받은 파일을 압축해제한 후
en.stsw-stm32054\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries 경로에 있는
CMSIS와 STM32F10X_STDPERIPH_DRIVER 폴더를 1번에서 생성한 LIB폴더로
복사 붙여넣기 합니다.
4. KEIL 실행
- KEIL 실행 후 project -> new mvsion project... 경로는 1번에서 만들었던
MDK_STD에 파일이름을 넣고 저장합니다.
5. 칩 선택
- 아래와 같이 Legacy Device Database 로 놓고 search에서 내가 사용하고자하는
칩의 이름을 입력하여 선택 후 OK 버튼을 누릅니다.
예/아니오 메시지박스는 아니오를 선택합니다.
6. 폴더구조 및 파일 생성1
- 우측 Target1 을 우클릭한 후 Manage Project Items.. 을 선택합니다.
7. 폴더구조 및 파일 생성2
- 아래와 같이 폴더 생성후 이름을 변경해 주고
우측 하단의 Add Files...버튼을 눌러 아래 경로에서 3개지 파일을 add해줍니다.
- GPIO_161130\LIB\CMSIS\CM3\CoreSupport\core_cm3.c
- GPIO_161130\LIB\CMSIS\CM3
\DeviceSupport\ST\STM32F10x\system_stm32f10x.c
- GPIO_161130\LIB\CMSIS\CM3
\DeviceSupport\ST\STM32F10x\startup\arm\startup_stm32f10x_md.s
[참고] startup_stm3210x_??.s 파일 중 어떤 파일을 선택해야할까?
아래링크를 참고해라!!
http://munshark.tistory.com/94
8. 메인파일 생성
- main.c 파일 생성 후 USER폴더에 넣어줍니다.
순서는 아래와 같습니다.
1. File -> New
2. File -> Save As...
3. main.c 파일 추가
4. USER -> 우클릭 -> Add Files to Group User.. -> main.c추가
9. define 설정에러
- 아래와 같이 코딩해준 후 F7버튼을 눌러 빌드를 해줍니다.
하지만 에러 발생!! 에러창을 더블클릭하면 에러발생지점으로 이동합니다.
에러원인은 define를 안해줬기때문!!
10. define 설정에러 수정
- 아래와 같이 프로젝트를 우클릭 후 Option for Target '...를 눌러
C/C++탭에서 STM32F10X_MD를 입력해주면 빌드가 됩니다.
11. 그외 기타 설정
- Xtal -> 디버깅 속도 설정
- Use MicroLIB -> http://www.keil.com/arm/microlib.asp 참고
- hex file 생성
- One ELF Section per Function -> 사용하지 않는 함수는 링크하지않음
(빌드완료후 이미지사이즈를 최소화해줌)
- C99 -> 변수선언을 맨위가 아닌 아무곳에서나 가능하도록 함
- 헤더파일 경로 설정
- ST Link 사용
- core clock -> 잘모르겠음....
12. 빌드 및 다운로딩
- 일단 main.c 코딩은 다음과 같이 하고,
다음 실습에서 datasheet를 확인해가며
한줄한줄 분석해보시다~
#include "stm32f10x.h"
int main(void)
{
//pc13
RCC->APB2ENR = 0x00000010;
GPIOC->CRH = 0x00200000;
while(1)
{
GPIOC->ODR ^= 0x01<<13;
for( uint32_t i = 0 ; i < 72000000/16 ; i++)
{
__NOP();
}
}
}
'프로그래밍' 카테고리의 다른 글
ARM실습_GPIOx_ODR레지스터를 이용한 LED출력 (0) | 2016.12.04 |
---|---|
ARM데이터시트_핀 또는 칩의 최대로 흘려줄 수 있는 전류 (0) | 2016.12.03 |
ARM데이터시트_PIN I/O 설명 (0) | 2016.12.03 |
ARM데이터시트_CMSIS의 어떤 파일을 가져와야할까?? Glossary를 참고하자!! (0) | 2016.12.03 |
OpenCV_설치방법 (0) | 2016.05.06 |
댓글