개정내역버전 개정내역 일자 0.1.0 첫번째릴리즈 2010/07 0.2.0 Bootloader 추가 2012/05 0.2.1 개발환경소개추가 2012/10 사용된 Tool 버전 Tool Version IDE STVD 4.3.1 (2012 년 5 월기준최신버전 ) Cosmic C compiler Editor Windows Cosmic C compiler 4.3.4 32K_Code Limited Ver Ultra Edit v14 이후버전 Win7 Pro 32bit 참고문서 번호 회사명 문서명 1 STMicroelectronics STM8S microcontroller family reference manual ( 문서번호 : RM0016) 2 COSMIC Software C Cross Compiler User s Guide for ST Microelectronics STM8 3 STMicroelectronics STM8S103x,105x,20xx Data sheet ( 문서번호 : Doc ID 15441, 14771, 14733 ) 4 STMicroelectronics STVD ( 문서번호 : UM0036) 각문서에대한최신버전은 www.st.com/stm8s 에서확인바랍니다. 소개 본문서는 STMicroelectronics 사의 STM8S 시리즈 8 비트 MCU 를처음사용하는고객의기술지원을위해서만들어진 CSP(Customer Support Package) 에대해설명하고있습니다. 이문서에는 STVD(ST Visual Development) IDE, Cosmic C Compiler 사용법및이를사용해서작성한 CSP 에대한내용이들어있습니다. 지원디바이스 STM8S103, 105, 207, 208, STM8A (903 시리즈는지원되지않음 ) 시작하기에앞서 CSP 를처음부터끝까지진행하면서과정을설명할것이며본문서범위를벗어난자세한내용은참고문서를통해서습 득하시기를바랍니다. YS Kim ddaemjang@daum.net - 1 -
1. STVD IDE 화면구성 Menu & Toolbar Edit&Debug window Work space Open file tab Output Message Status bar 그림 1 2. Work space, project 만들기 Work space 에는하나이상의프로젝트가포함될수있으며각프로젝트를활성화시켜서컴파일및디버깅이가능합니 다. Bootloader 와 Application 을동시에개발진행할경우 Bootloader 와 Application 에대해각각의프로젝트로만 들어하나의 Work space 에포함시키면개발이쉬워집니다. 2.1 Work space, project 생성. 2.1.1 File 메뉴에서그림 2 와같이 New Workspace 선택하면그림 3 과같은 New Workspace 창이나타납니다. 그림 2 그림 3 YS Kim ddaemjang@daum.net - 2 -
2.1.2. Create workspace and project 를선택후확인을클릭합니다. 그러면그림 4 와같은창이뜨는데 Workspace filename 에원하는이름 (csp_project_stm8s105) 을넣은후 Workspace 위치를지정합니다. 그림 4 예제에서는 E:\STM8S UserBL\Application\Ver 1.0\stvd_prj 를선택했습니다. OK 를클릭하면그림 5 와같이 NewProject 창이뜨는데 Project filename 을입력하고 Toolchain 을 STM8 Cosmic 으로선택하고 Cosmic compiler 가설 치되어있는 Directory 를선택합니다. 그림 5 예제에서 Cosmic컴파일러는 C:\Tools\COSMIC\CSSTM8_32K에설치되어있으므로이를선택했습니다. OK 버튼을클릭합니다. 그러면그림6 과같이 MCU를선택하는창이뜨게되는데프로젝트에사용되는 MCU를선택합니다. MCU는프로젝트설정이후에도변경가능하므로프로젝트진행도중 MCU가바뀌어도문제가되지않습니다. 그림6의오른쪽창은선택된 MCU를지원하는 S/W, H/W Tool을보여줍니다. YS Kim ddaemjang@daum.net - 3 -
그림 6 프로젝트에사용될 MCU 를선택하고 Select 버튼을클릭하고 OK 버튼을클릭합니다. 그러면 Workspace 설정은끝이납니다. 설정을모두마친상태의창은그림 7 과같습니다. 그림 7 2.1.3 CSP의폴더의구성은그림8과같이 STM8_UserBL폴더에 Application, Bootloader,Common,STM8S_Driver, STM8S_StdPeriph_Driver, Up loader의폴더를구성한후각각의폴더에하위폴더를구성했습니다. 실제프로젝트가진행되면서몇단계에걸쳐서버전관리가필요하므로 Application 관련된파일은 Ver_x.x폴더에모두저장되도록했습니다. 이전버전을그대로둔후에버전을 1.0으로올려서작업을해야할필요가있을때 Ver_0.1 폴더를전체복사후폴더이름만 Ver_1.0으로변경후프로젝트파일을열면이전버전의프로젝트설정이그대로유지되므로소스파일만수정해서컴파일 / 디버깅이할수있어편리하기때문입니다.. YS Kim ddaemjang@daum.net - 4 -
그림 8 2.2. 프로젝트에소스파일추가하기 처음프로젝트가생성되면프로젝트가위치한 Directory 에 main.c/stm8_interrupt_vector.c 파일이자동으로생성 되는데이두파일은프로젝트에서제거하도록합니다. 그림 9 2.2.1 먼저 Source File Folder 를클릭후마우스오른쪽버튼을클릭하면그림 9 와같이창이뜨는데여기서 Add Files to Folder 를클릭합니다. 그러면탐색기창이뜨는데탐색기창을이용해서소스코드및헤더파일을마우스로 선택한후열기버튼을클릭해서추가시킵니다. YS Kim ddaemjang@daum.net - 5 -
그림 10 2.2.2 만약프로젝트에폴더를추가하려면 project 를마우스로클릭한후마우스오른쪽버튼을누른후 New Folder 를 선택합니다. 그림 11 2.2.3. New Folder창이뜨면 Common를입력하고 OK를클릭합니다. 그러면 Common이라는폴더가 project하위에생성이됩니다. 2.2.4. 다시 Common을마우스로클릭 > 마우스오른쪽버튼을클릭 > New Folder 를선택후 src, inc를타이핑하면 Common하위에 inc, src폴더를생성할수있습니다. 여기에소스를포함하는것은 2.2.1항을참조하세요. 그림 12 YS Kim ddaemjang@daum.net - 6 -
CSP 에서는 ST 에서제공하는 FwLib 를전혀사용하지않습니다. 이유는라이브러리가전디바이스에공통으로사용될수 있도록구성이되어있어덩치가커지기때문에 Flash 메모리가 4K, 8K 정도되는디바이스에는부담이되기때문입니다. 그러나각주변장치 (Peripheral) 에대한헤더파일은사용하고있습니다. 2.3 프로젝트옵션설정 그림 14 와같이프로젝트이름에마우스를클릭하고마우스오른쪽버튼을클릭하고 Settings.. 를클릭하거나 Shift+F7 키를누르면프로젝트의설정을변경할수있는그림 15 와같이 Project Settings 라는창이뜨는데이번절에서는이 창에있는각각의설정탭에서필요한부분을설명하도록하겠습니다. 프로젝트표시및변경콤보박 스 Build configuration 표시및변경콤보 박스 그림 14 그림 13 YS Kim ddaemjang@daum.net - 7 -
Build configuration, Debug/Release 또는사용 자정의환경을선택할수있음. 설정탭. 그림 14 Work Space 에포함된프로젝트파일을표시하는창하나의 Work Space 에는여러개의프 로젝트가포함될수있음. 프로젝트추가는 Project 메뉴에서 Insert/Add New Project to Workspace 에서할수있음. 2.3.1. General tab 처음프로젝트생성시입력한정보가표시됩니다. Output directory는 Debug로되어있는데컴파일후생성되는 Motorola srecord파일및디버깅에관련된파일이저장되는폴더입니다. Debug/Release및사용자가빌드환경을추가하는경우에는사용자추가환경도선택할수있습니다. 그리고컴파일러는 STM8 Cosmic를선택하시고컴파일러를설치한폴더의 Root path가맞지않으면 Project specific toolset path를체크하고 Root path를지정하시기바랍니다. 만약 Program Files에 Compiler를설치했다면 C:\Program Files\COSMIC\CXSTM8 을지정하면됩니다. 이 Root path가제대로지정이되지않으면기본라이브러리를포함하지못해서링커에러가발생합니다. YS Kim ddaemjang@daum.net - 8 -
그림 15 2.3.2. Debug tab 기본프로젝트설정과같으며특별히설정할것은없습니다. 그림 16 2.3.3. MCU Selection tab 프로젝트생성할때선택한 MCU가표시되는데진행되는프로젝트에서 MCU가변경되면이탭에서 MCU를다시지정할수있습니다. MCU선택에따라서오른쪽에사용가능한툴정보가표시됩니다. MCU를변경하면 Linker탭에서설정한 Linker 관련설정은모두초기화가되므로유의하세요. YS Kim ddaemjang@daum.net - 9 -
그림 17 2.3.4 C Compiler tab 이부분은프로젝트의규모와상황에따라서변경되어질부분이있습니다. General Catagory 부터설명하겠습니다. 그림 18 3.2.4.1 Memory models Cosmic compiler는 4가지메모리모델을제공합니다.. 코드사이즈가 64Kb 보다작을경우 : Short Stack(+mods0) 를선택하면전역변수가 Short range에위치하게되는데 Short range는어드레스 0x00 0000~0x00 00FF까지의 256바이트영역입니다. 이이상의영역에전역변수를위치시키기위해서는 @near라는지시자를사용해서변수를선언해야합니다. @near unsigned char var; Long Stack(+modsl0) 를선택하면전역변수가기본적으로 long range에위치하게됩니다. Long range는 zero YS Kim ddaemjang@daum.net - 10 -
page(0x000000~0x0000ff) 를제외한부분입니다. 그러므로전역변수는 0x00 0100영역부터할당이되며 zero page에전역변수를할당하기위해서는 @tiny라는지시자를사용해야합니다. @tiny unsigned char var; /* 0x00~0xff 사이의램에 var를할당합니다. */ unsigned char var1; /* 0x100이후의램에 var1을할당합니다. */. 코드사이즈가 64KB보다큰경우 Short Stack(+mods) 를선택하면 Short Stack(+mods0) 와전역변수배치가동일합니다. Long Stack(+modsl) 을선택하면 Long Stack(+modsl0) 와전역변수배치가동일합니다. 이외에메모리포인터관련한내용이더있는데이부분은참고문서 2의 39 페이지부터보시기바랍니다. 2.3.4.2. Compiler message Display Compile 시 Warning/Error 를출력하는레벨을변경할수있습니다. 2.3.4.3. Optimizations 컴파일러최적화단계를선택할수있습니다. Maximize excution speed, Disable for debugging, Minimize code size, Customize를선택할수있는데 Customize를선택하면그림 19와같이상세한설정을할수있습니다. 각설정에대한설명은참고문서를참조하시기바랍니다. 그림 19 2.3.4.4. Debug Info 디버그옵션인데대부분의경우기본 Setting을사용하므로변경할필요성은없습니다. Customize를선택하면좀더상세한설정을할수있는카테고리로이동합니다. 2.3.4.5. Listing List 파일생성에관한설정을할수있습니다. Customize 를선택하면좀더상세한설정을할수있는카테고리로이 동합니다. 2.3.4.6. C Language 기본설정은 Enforce Fucntion Prototyping인데이설정에서는함수의 Prototype이존재하지않으면 #error cpstm8..\src\main.c:146(12) missing prototype 이라는에러메시지를출력합니다. Category에서 Customize를선택하면좀더상세한설정을할수있는카테고리로이동합니다. 2.3.4.7. User defined Options 이부분은 Compiler 옵션을지정하는부분인데자세한내용은참고문서 2 를참조하시기바랍니다. YS Kim ddaemjang@daum.net - 11 -
2.3.4.8 Preprocessor Category Preprocessor definitions 항목의내용은소스코드에서 #define STM8S105, #define _APPLICATION_CONFIG라고 Coding한것과동일한효과를내며전체프로젝트파일에영향을줍니다. 각각의정의는스페이스로구분되어집니다. Additional include directors 헤더파일이있는폴더를지정하면소스코드에서폴더의경로를표현하지않고 #include header_file_name.h 라고만해도컴파일러가이항목에포함된 Directory에서자동으로헤더파일을찾아서컴파일을진행하므로소스파일에서헤더파일의경로를일일이지정하지않아도됩니다. 그림 20 그림 20 2.4 Assembler, Pre Link, Post Build, Post Build tab 중요한부분이없으므로건너뛰도록하겠습니다. 자세한내용을알고싶으면참고문서 2, 4 를읽어보시기바랍니다. 2.5 Linker tab 2.5.1 General category General Category 부분에서중요한부분은 Object / Libraries 부분인데이부분에 *.o, *.lib 파일을지정해서프로 젝트에추가할수있습니다. 만약어떠한모듈이타회사로부터 Object 또는 library 로제공되었을때이부분에추 가하고소스파일에서헤더파일을 Include 한후 Object 또는 library 에있는함수를 Call 하면됩니다. YS Kim ddaemjang@daum.net - 12 -
그림 21 2.5.2 Input category 코드배치를상세하게설정할수있는카테고리입니다. 그림 22 Vector file name에 stm8_interrupt_vector.c 파일을지정해주고 Vector addr. 를지정해주어야합니다. Vector address의기본설정은 0x8000 (STM8 MCU의 Flash start address ) 입니다. STM8 MCU의 Flash 첫영역은 Vector address이며 0x7F 바이트가할당됩니다. Vector 영역이후부터코드배치가이루어지게됩니다. YS Kim ddaemjang@daum.net - 13 -
2.5.3 STM8S Memory map RAM Zero page 0x00 0000 0x00 00FF RAM.data 0x00 0100 램영역은 0x00 0000 번지부터시작하며디바이스의 RAM 용량에따라서마 지막어드레스는달라집니다. 그리고 RAM 의끝부분에스택이위치하며스 택은거꾸로자라나게됩니다. Stack EEPROM Option bytes Peripheral Registers CPU/SWIM/debug/ITC Registers FLASH /32 int vector End of RAM 0x00 4000 End of EEPROM 0x00 4800 0x00487F 0x00 5000 0x00 57FF 0x00 7F00 0x00 7FFF 0x00 8000 0x00 807F EEPROM은 0x00 4000번지부터시작하며최대 2Kbytes입니다. Option bytes는 0x00 4800부터시작하며 0x00 487F까지입니다. GPIO,TIMER등의주변장치레지스터는 0x00 5000부터시작해서 0x00 57FF까지입니다. 이부분은 CPU레지스터및디버깅관련레지스터가위치합니다. FLASH영역중 0x00 8000번지부터 0x00 807F까지는인터럽트벡터영영입니다. 이후부터.const,.text 섹션이배치됩니다. FLASH 크기는디바이스에따라 4K~128Kbytes까지입니다. FLASH / User program memory End of FLASH 표 1. 2K 의 Boot ROM 과 Reserved 된영역은위그림에표현되지않았으며자세한내용은각디바이스의데이터시트참조. 2.5.4 Input category Input category는링커에게코드배치를어떻게할지를설정해주는부분입니다. 이 category를수정하면 (TargetSName).lkf 파일에자동으로적용이됩니다.Linker의코드배치는표1. 의메모리맵과연관이되어져있으며디바이스의 Flash memory, RAM용량에따라메모리의끝부분의어드레스는달라질수있음을주의해야합니다. YS Kim ddaemjang@daum.net - 14 -
1 2 3 그림 23 1 Interrupt vector 소스를지정하는부분입니다. 버튼을눌러서 stm8s_interrupt_vector.c 파일을지정하면됩니다. 2 Vector addr. 부분은 Flash memory의시작번지를지정하면됩니다. 시작어드레스에서 0x7F의크기를가집니다. 3 Segment, Section을추가삭제할수있는부분입니다. 먼저 Segment에 section을추가하고그 section에소스코드가어떻게컴파일 / 링크되어배치되는지를보겠습니다. Code,Constants 세그먼트에는.const,.text 두개의기본섹션이있습니다. 다들아시겠지만.const 부분에는 Constant,.text부분에는프로그램코드가배치됩니다..const가.text보다위에있으므로 constant가 FLASH메모리에먼저배치되고그뒤에프로그램코드가배치됩니다. 즉위에있는 section부터 Flash memory에순서대로배치합니다. section구분이없이프로그램을작성하면 0x008000~0x00807F까지는인터럽트벡터테이블이위치하고다음에 const 상수가위치한후다음부터프로그램실행코드가배치되게됩니다. Stm8s_z_function.c 의내용 #include "stm8s.h" #pragma section (appl_code) u8 * chk_appl_present(void) { static const u8 appl_present[]={"appl"}; return((u8 *)&appl_present[0]); } #pragma section () 소스에 #pragma section (appl_code) 의문장은.appl_code section에 u8 * chk_appl_present() 함수를배치하겠다는의미입니다. #pragma section () 문장의이후에코드가있으면이코드는기본적인.text section에배치됩니다. 그 YS Kim ddaemjang@daum.net - 15 -
럼.appl_code는어떻게배치될까요? 답은프로그래머가 Linker에게어디에배치하라고알려주는것입니다. 먼저.appl_code section을추가해보겠습니다. Linker 탭의 input category부분에서 Segment/Section 부분에마우스를클릭하고마우스의오른쪽버튼을클릭하면아래그림과같이창이뜨는데여기서 Add Section을클릭합니다. 그림 24 Add Section 을클릭하면아래그림 25 와같이커서가나타나는데.appl_code 를타이핑합니다. 그림 25 Section Segment Bootloader 를사용하지않는대부분의 Application 에서는그냥 section 이니 segment 니상관없이코드를작성해도동 작하는데아무런지장이없습니다. YS Kim ddaemjang@daum.net - 16 -
3. Package 적용. 3.1 프로젝트의구성 csp_project_stm8s105.stw Work Space 파일을열면 csp_application, csp_bootloader 두개의프로젝트가있습니다. 각각의프로젝트에는소스또는헤더파일을포함하는그룹이있으며이그룹에소스및헤더파일이포함되어있습니다. 그림 26 Work space에있는프로젝트는한개만 Active로설정가능한데프로젝트를선택후마우스오른쪽버튼을클릭해서 Set as Active Project를선택 ( 그림 27) 하거나그림 28과같이 Menu에서 Project를클릭후 Set Active Project에서프로젝트를선택하거나그림 29과같이 Tool bar 에서프로젝트를선택해서 Active 상태로만들수있습니다. Active상태에있는 Project는프로젝트이름이볼드체로바뀌게됩니다. 그림 27 그림 28 YS Kim ddaemjang@daum.net - 17 -
그림 29 3.1 Bootloader 소스수정. 먼저 csp_bootloader 를 Active 상태로만듭니다. 3.1.1 Project_conf.h Project_conf.h 파일을열어서아래의부분을수정합니다. 먼저외부의 X Tal이나 Resonator를사용하려면 #define _MASTER_CLK을 _USE_HSE로정의하고 _SYS_CLK를 X TAL이나 Resonator 클럭으로설정합니다. 내부 RC오실레이터를사용하려면 _MASTER_CLK을 _USE_HSI로정의한후 _SYS_CLK을 1~16Mhz사이에서선택합니다. STM8의내부 RC오실레이터의발진주파수는 16Mhz입니다. STM8S는 PLL이없으므로내 / 외부발진주파수이상의클럭은사용할수없으나클럭디바이더를통해서낮추어사용할수는있습니다. 그림 30 3.1.2 Comm.h 파일 3.1.2.1 시리얼번호 시리얼번호를사용하려면 #define ksupport_seralize 를주석처리하지말고사용하지않으려면주석처리합니다. 그림 31 3.1.2.2 USART 통신속도설정 그림 32 YS Kim ddaemjang@daum.net - 18 -
kblcommspeed 를 4800, 9600, 19200, 38400, 57600, 115200 중에서선택합니다. 3.1.2.3 디바이스 FLASH 크기및 Application 이위치할어드레스정의 그림 33 사용하고자하는디바이스의메모리크기와 Application 이위치할어드레스를정의합니다. Bootloader 는 0x8000 번지 부터시작되며 Bootloader 의용량에따라 Application 은 0x8800 또는 0x9000 부터시작합니다. 3.1.2.4 GPIO Configuration 설정 Application 에서는 stm8s_gpio_conf_app.h, Bootloader 에서는 stm8s_gpio_conf_boot.h 파일을회로도에맞게수정 해야합니다. Bootloader 에서는최소한 USART 핀과관련된 Port 들은설정이되어야통신을할수있습니다. GPIO 설정옵션은아래의 Enumeration중하나를선택할수있습니다. typedef enum { kinputfloatwithoutint = 0, kinputpullupwithoutint = 1, kinputfloatwithint = 2, kinputpullupwithint = 3, koutputopendrain = 4, koutputpushpull = 5, koutputpp10mhz = 6, koutputtrueopendrain = 7, kinputadc = 8 }e_gpio_mode; 각포트마다아래와같이핀특성을정의하면 GPIO_InitAll() 매크로에의해서자동으로초기화가됩니다. YS Kim ddaemjang@daum.net - 19 -
아래의설정은포트의초기입. 출력모드를설정하는부분입니다. /** * GPIOA Group pin characteristic */ #define GPIO_A0_F kinputfloatwithoutint /**< */ #define GPIO_A1_F kinputfloatwithoutint /**< 16Mhz XTAL */ #define GPIO_A2_F kinputfloatwithoutint /**< 16Mhz XTAL */ #define GPIO_A3_F kinputfloatwithoutint /**< */ #define GPIO_A4_F kinputfloatwithoutint /**< NC */ #define GPIO_A5_F kinputfloatwithoutint /**< NC */ #define GPIO_A6_F koutputpushpull /**< NC */ #define GPIO_A7_F kinputfloatwithoutint /**< */ 아래의설정은포트의초기출력값을설정하는부분입니다. /** * @brief GPIOA Pins Output value when battery power on. */ #define GPIO_A0_IV 0 #define GPIO_A1_IV 0 /**< */ #define GPIO_A2_IV 0 /**< */ #define GPIO_A3_IV 0 /**< */ #define GPIO_A4_IV 0 /**< */ #define GPIO_A5_IV 0 /**< */ #define GPIO_A6_IV 0 /**< */ #define GPIO_A7_IV 0 /**< */ 3.2 Application 소스수정 Csp_application을 Active프로젝트로설정합니다. 3.2.1 Project_conf.h Project_conf.h파일을열어서 Bootloader 설정과같이 Oscillator와 System Clock를설정합니다. Oscillator설정과 System Clock가 Bootloader설정과같을필요는없습니다. 즉, Bootloader는내부 RC발진에 16Mhz System Clock를사용하더라도 Application은외부 1~16Mhz X TAL 또는 Resonator를사용할수있습니다. 3.2.2 Comm.h 파일 통신속도는 Application 과 Bootloader 가동일해야합니다. 왜냐하면윈도우응용프로그램이동일한조건에서동작하 도록프로그래밍되어있기때문입니다. 3.2.3 Version.c 파일 현재버전에맞게 const NEAR u8 u8p_firmware_ver[7] = { 'V','e','r',' ','1','.','0' }; 부분을수정합니다. YS Kim ddaemjang@daum.net - 20 -
Ver 부분은수정하면 Bootloader 가제대로동작하지않으므로 1.0 부분만수정하기바랍니다. 3.3 Bootloader 프로젝트설정. 대부분의프로젝트설정은 4 장에서설명한것과동일하나 C Compiler 탭의 Preprocessor 카테고리와 Linker 탭부분이 램코드사용때문에틀린데이부분에대해서만설명하기로합니다. 3.3.1 C Compiler 탭설정 Preprocessor definitions 항목에 _BOOTLOADER_CONFIG 부분이 Application 과다릅니다. 자세한것은 comm.c 파일을 참조하시기바랍니다. 그림 34 3.3.1 링커탭설정 Bootloader에서는주변장치인터럽트를사용할수없습니다. 이유는 Vector table을 Application에 Remapping해주고있기때문입니다. Bootloader와 Application의 Stm8_interrupt_vector.c파일을비교해보시면쉽게이해할수있을것입니다. STM8시리즈의 FLASH/EEPROM Memory는 1바이트, 4바이트, 128바이트단위로지우고쓸수있으며 1,4,128바이트를지우고쓰는시간은 Max 6mS로동일합니다. 그러므로 Application을빠르게업데이트하려면 128바이트단위로 Flash를프로그래밍해야하며그러기위해서는 Flash/EEPROM을지우고쓰는일부의코드가램에서실행되어야합니다. 이와관련됩부분이 RAM segment의.ram_code section부분입니다. 램코드를실행하기위한코드작성은 6장의부록에서자세히설명할것입니다. YS Kim ddaemjang@daum.net - 21 -
그림 35 3.4 Application 프로젝트설정. 3.4.1 C Compiler 탭설정 그림 36 3.4.2 Linker 탭설정 YS Kim ddaemjang@daum.net - 22 -
그림 37 3.5 프로젝트빌드 아래그림 38 은프로젝트빌드관련툴바입니다. 그림 38 1 Project 선택콤보박스 2 Build configuration 선택콤보박스 3 Compile : 소스파일컴파일 4 Build : 디펜던시를따져서변경된부분만 Build 5 Rebuild All : 모든 Build관련파일을삭제하고다시 Build 6 Stop Build : 진행중인 Build동작을정지 7 Project settings : Shift+F7 동일기능 F7키를누르거나 Rebuild All 버튼을누르면컴파일 / 링크를시작하며끝난후 Output창에아래의메시지를볼수있습니다. Running Linker clnk lc:\tools\cosmic\cxstm8_32k\lib o Debug\csp_bootloader.sm8 mdebug\csp_bootloader.map Debug\csp_bootloader.lkf cvdwarf Debug\csp_bootloader.sm8 Running Post Build step chex o Debug\csp_bootloader.s19 Debug\csp_bootloader.sm8 csp_bootloader.elf 0 error(s), 0 warning(s) YS Kim ddaemjang@daum.net - 23 -
성공적으로빌드가되었습니다. 3.6 디버깅 5.6.1 디버깅툴선택 Debug instrument > TargetSettings.. 를클릭하면디버거를선택할수있는창이뜨는데여기서사용하고자하는툴 을선택합니다. SWIM 을지원하는디버거는 STice > Rlink > ST Link 입니다. 가격이높은순서로. 그림 39 3.6.2 Debug 툴바 3.6.2.1 버튼설명 Start debugging : 이버튼을누르면디버깅화면으로전환됩니다. 만약소스가수정되었다면다시빌드를할것인지를물어봅니다. Yes를선택하면빌드후디버깅화면으로전환됩니다. 그림 40 Stop debugging : 이버튼을누르면디버깅을종료합니다. Go to PC : 소스코드창이어디에있든지이버튼을누르면현재프로그램카운터의값이가리키는소스코드로이동을합니다. 디버깅이정지된상태에서만활성화됩니다. RUN : 프로그램을실행합니다. 이버튼을누르면 Reset을한후실행됩니다. Chip Reset : MCU를리셋시킵니다. PC값이 Startup roution의시작부분으로리셋됩니다. Restart Application : main함수의첫부분으로 PC값이바뀝니다. Coutinue : 실행을멈추었던부분부터다시시작합니다. 버튼또는브레이크포인트로인해실행을정지시킨 경우정지된부분부터실행을시키려면이버튼을눌러야합니다. RUN 버튼을누르면프로그램이 Reset 된후다시시작 됨에유의하시기바랍니다. Stop Debugging : 실행되고있는프로그램을정지시킵니다. YS Kim ddaemjang@daum.net - 24 -
나머지버튼들은시간날때실제클릭해서동작을시켜보시기바랍니다. 3.6.3 디버깅관련윈도우열기 그림 41 그림 32 에서보고자하는창을선택합니다. 3.6.4 Disassembly 창 그림 42 가 Disassembly 창인데 Assembly 상태에서브레이크포인트를걸거나할때사용합니다. 대부분의경우 C 소스에 서브레이크포인트를걸기때문에자주사용하지는않습니다. 그림 42 3.6.5 Core Register CPU Core 관련된레지스터의값및 Flag 상태를볼수있는창입니다. 그림 43 YS Kim ddaemjang@daum.net - 25 -
3.6.6 Memory 전체메모리의내용을볼수있는창입니다. 창의맨윗부분에참조하고자하는주소값을 Hex 값으로입력하면입력한 주소부터의메모리내용이표시됩니다. 3.6.7 Instruction break point 그림 44 3.6.8 Watch window 변수의값을볼수있는창입니다. 변수를추가하려면 Variable 컬럼의마지막줄을더블클릭한후값을보려고하는 변수명을입력하면됩니다. 그림 35 그림 45 3.6.9 Call Stack 스택의내용중어드레스항목 ( 함수이름 ) 만나열한창으로가장위의항목이가장최근에 Call된함수이며어떤함수호출을통해서현재브레이크포인트에서멈추었는지를알수있습니다. 어떤함수가실행되었는지알수있음. 아래그림 45에서는 main() 함수에서 iwdg_init() 함수를호출했으며 iwdg_init() 함수에서실행이멈추었음을알수있습니다. 3.6.10 Peripheral Register 그림 46 내장된주변장치관련레지스터를볼수있는창입니다. YS Kim ddaemjang@daum.net - 26 -
그림 47 3.7 Bootloader 로 Application 프로그램하기 3.6 절에서 Bootloader 가프로그램되었으므로이 Bootloader 를통해서 Applicaton 을 Flash 에업로드해보도록하겠 습니다. 3.7.1 csp_bootloader 를 Active 프로젝트로만든후 F7 키를눌러서빌드를한후 Start debugging 버튼 ( ) 을클릭 해서디버그모드로전환합니다. 그럼 Flash 를프로그래밍하게됩니다. Stop Debugging 버튼 ( ) 을클릭해서디버그 모드에서빠져나옵니다. 3.7.2 csp_application 을 Active 프로젝트로만든후 F7 키를눌러서빌드를합니다. 그러면 STM8S UserBL\Application\Ver 1.0\stvd_prj\Debug\csp_application.s19 파일이생성됩니다. 3.7.3 STM8S UserBL\UpLoader\Firmware Uploader.exe 프로그램을실행합니다. 그리고디바이스는 STM8S 를선택하 고시리얼포트를 57600 통신속도로엽니다. 그림 48 3.7.4 STM8S UserBL\Application\Ver 1.0\stvd_prj\Debug\csp_application.s19파일을 Firmware File Select에서열기를합니다. Full Auto 버튼을클릭하면 Version Check, BL Activation, Appl. Erase, Upload, Jump to appl을순서대로실행 YS Kim ddaemjang@daum.net - 27 -
해서 Application 업로드를완료하게됩니다. 3.7.5 Firmware Uploader 프로그램설명 3.7.5.1 Device selection Bootloader가지원되는디바이스입니다. STM32를선택하면통신속도 115200으로설정되며 Firmware select 버튼을누르면 *.bin 파일을열수있습니다. STM8은 STM8S, STM8L을모두지원하며 STM8을선택하면통신속도는 57600으로설정되며 *.s19, *.hex파일을열수있습니다. EFM32를선택하면통신속도 115200으로설정되며 *.bin파일을열수있습니다. 3.7.5.2 Serial Port Configuration PC 의시리얼포트설정입니다. 설명은생략합니다. 3.7.5.3 Serialize 시리얼번호를차례로부여하는기능을합니다. 이기능을사용하려면 comm.h파일에서 #define ksupport_seralize를주석해제해야합니다. Serial No. data file을열고 Enable을체크한후 Write 버튼을클릭하면시리얼번호를프로그램합니다. Auto Inc. 버튼을누르면시리얼번호프로그램후시리얼번호가 1 증가합니다. Read 버튼은프로그램되어있는시리얼번호를확인할때사용합니다. Serialize가 Enable되어있으면부트로드시자동으로시리얼번호를프로그램합니다. 3.7.5.4 Application 프로그램버튼설명. 버튼 : Version Check, BL Activation, Appl. Erase, Upload, Jump to appl 을순서대로실행해서 Application 업로드를완료하게됩니다 버튼 : Application 의버전을확인합니다. Application 프로젝트의 Version.c 파일의 u8p_firmware_ver 의 String 을표시합니다. Application 이변경될때마다 Ver x.x 를변경해서프로그램을하면부트 로드를하기전에현재 Application 의버전을확인할수있도록합니다. 그림 49 버튼 : Application 이실행되고있는상태에서 Bootloader 로실행을옮기는명령을보내는버튼입니다. 버튼 : Bootloader 가실행되는상태에서 Application 을지우는명령을보내는버튼입니다. YS Kim ddaemjang@daum.net - 28 -
버튼 : Application 데이터를전송하는명령을보내는버튼입니다. 버튼 : Application 전송이완료된상태에서이버튼을누르면 Application 이실행됩니다. Bootloader 에서 Application 으로 Jump 하기전에 Ver 이라는문자열이미리예약된영역에있는지확인후있으면 Application 으로 Jump 를하고없으면 Bootloader 상태에있게됩니다. 4. 부록 4.1 RAM 코드실행 4.1.1 RAM 코드의필요성 1. 내부 EEPROM이나 FLASH Memory를 Block단위 (64/128바이트) 로지우거나쓸경우에는일부의코드가 RAM에서실행이되어야합니다. 2. STM8 디바이스의경우 Low power run 모드가있는데이조건이 LSE,LSI는구동되는상태에서 RAM에서코드가실행되는조건입니다. 이때에도 RAM에서코드를실행해야하기때문에필요합니다. 위의경우 FLASH Memory 에서함수를 RAM 으로복사하고함수를호출하면 RAM 으로복사된함수가호출되게하기위해서 는몇가지작업이필요합니다. 이번절에서는이에대한간략한설명을하겠습니다. 4.1.2 RAM 에서실행될코드작성 #pragma section (ram_code) /* RAM 에서실행될코드의시작, ram_code section 시작 */ int ram_execute_func(void) { /* ram에서실행될함수입니다.*/ return 0; } #pragma section() /* RAM에서실행될코드의끝, ram_code section 끝 */ #pragma section (appl_code) void main(void) { /* 초기화코드 */ _fctcpy( r ); // 초기화때 Flash 메모리에있는 Ram 코드를 RAM 으로복사하는함수임. 램코드를실행하 // 기위해서는초기화부분에반드시 _fctcpy() 함수를호출해야함. r' 은 ram_code 의첫 // 문자.. YS Kim ddaemjang@daum.net - 29 -
do { }while(1); } #pragma section () 4.1.3 STVD 프로젝트설정 Shift+F7 키를입력해서 Project settings창을띄운후 Linker탭으로이동합니다. 그리고 Category 리스트에서 Input을선택하면아래의그림과같은창이뜨는데여기서 Ram을선택하고마우스오른쪽버튼을클릭하면그림 51과같이 Add Section, Add Segment 의창이뜨는데여기서 Add Section를선택한후.ram_code를입력합니다. 그림 50 그림 51.ram_func 의오른쪽에보면 From To Options 가있는데 Options 그리드를선택한후마우스오른쪽버튼을클릭한 후 Change 를클릭한후 ic 를입력합니다. 그리고 OK 를클릭해서설정을종료합니다. YS Kim ddaemjang@daum.net - 30 -
그림 52 4.1.4 map 파일에서확인 \STM8S\UserBL\Bootloader\stvd_prj\Debug\csp_bootloader.map 파일을열면아래그림 50 과같이램영역과 Flash 영역에동일사이즈로.ram_code 세그먼트가생성됨을확인할수있습니다. 그리고 _fctcpy 함수를통해서 0x80b2 번지에서 0x100 번지로복사가되는것을알수있습니다. 4.2 Build configuration 추가삭제. Build configuration은비슷한프로젝트에서프로젝트설정이조금씩다를경우프로젝트를새로만들지않고설정을바꾸어서 Build할수있도록합니다. Debug/Release 설정이기본적으로제공되며프로젝트를생성하면기본값으로설정이됩니다. Debug 설정에서는컴파일러옵션의최적화레벨을낮추어서디버깅이유리하게 Release설정에서는최적화레벨을높여실행속도 / 코드사이즈를최적화할수있도록하는목적으로사용됩니다. 먼저그림 53 과같이 Build 메뉴에서 Configurations 를클릭합니다. 그러면그림 54 과같은 Project Configurations 창이뜨는데이창에서 Add, Remove, Rename 등의작업을할수있습니다. 그럼 STM8S103_BL 이라는 이름으로설정을추가해보겠습니다. 그림 53 그림 54 Add 버튼을클릭합니다. 그러면그림 55 와같이 New Configuration 이라는창이뜨는데이름을 STM8S103_BL 로입력 하고 Copy settings from 을 Debug 로설정하고 OK 버튼을클릭합니다. 이는 Debug 설정을복사해서가져온다는의미입 YS Kim ddaemjang@daum.net - 31 -
니다. 그림 55 그림 51 의 Project Configurations 창으로되돌아가는데여기서 Close 버튼을클릭합니다. 그림 56 그림 56 과같이 Build Configuration 이추가된것을확인할수있으며 MCU Selection 에서 MCU 를바꾸는것을제외 한 Compiler/Linker 설정등은변경해서 Build 할수있습니다. MCU Selection 에서 MCU 를바꾸면 Linker 탭의모든설정이초기화됨에유의하세요.. 4.3 FLASH 의특정영역에상수값위치시키는방법 4.3.1 소스코드에아래와같이섹션을정의합니다. ( 배열의크기는상관없음.) #pragma section const {abs_const} const u8 u8_abs_array[8] = { 0x11,0x22,0x33,0x44,0x55,0x66,0x77 }; #pragma section {} 4.3.1 프로젝트셋팅의링커탭으로이동해서세그먼트와섹션을정의합니다. 4.3.1.1 Linker Tab의 Input Category 에서 Abs Const라는 Segment를생성하고 From 열을클릭한후마우스오른쪽버튼을누르면팝업창이뜨는데 Change를클릭후시작주소를 To열을클릭한후마우스오른쪽버튼을클릭후 Change를클릭한후에끝주소를입력합니다. 그림 57 4.3.2.2 Abs Const 밑에.app_str 이라는 Section 을추가합니다. Abs Const 를클릭후마우스오른쪽버튼을누른후 Add Section 을클릭한후.app_str 이라고입력합니다. 그리고 Option 열에서마우스오른쪽버튼을클릭한후 k( Keep Symbol 옵션 ) 라고입력합니다. YS Kim ddaemjang@daum.net - 32 -
그림 58 설정을모두완료하면아래그림과같습니다. OK 버튼을클릭후 Build 를하면끝이납니다. 그림 59 Map 파일을확인하면그림 60 과같이 0xBF80 ~ 0BF88 의영역에.abs_const 가배치된것을확인할수있습니다. 그림 60 YS Kim ddaemjang@daum.net - 33 -
5. 개발환경 5.1 STVD (ST Visual Debugger) COSMIC Compiler 와합해서컴파일 / 디버깅을할수있게해주는통합개발환경임. C/Assembler 프로그램을편집 하고컴파일한후디버깅까지할수있는통합개발환경임. Microchip 사의 MPLAB 과동일한기능을함. 5.2 STVP ( ST Visual programmer ) ST7 / STM8 / STM32 마이크로컨트롤러의 FLASH/EEPROM/OPTION BYTE 를프로그램할수있는소프트웨어임. YS Kim ddaemjang@daum.net - 34 -
ST LINK 이외의다양한툴을지원함. 5.3 ST LINK/V2 STM8 시리즈마이크로컨트롤러와 SWIM 핀을통해연결되며 Programming 과 Debugging 을동시에할수있는저가의 개발툴. 5.4 COSMIC CXSTM8 컴파일러 STVD 와통합해서컴파일환경을자동화할수있는 ANSI, SIO 표준 C 컴파일러 YS Kim ddaemjang@daum.net - 35 -