'Embedded Programming'에 해당되는 글 38건

  1. 2018.02.25 ChibiOS/RT 설치 1
  2. 2018.02.25 ChibiOS/RT의 특징
  3. 2018.02.13 Embitz 기능
  4. 2018.01.31 왜 RTOS가 필요한가?
  5. 2018.01.21 NUCLEO-F446RE 보드 설정(6) 1
  6. 2018.01.21 NUCLEO-F446RE 보드 설정(5)
  7. 2018.01.21 NUCLEO-F446RE 보드 설정(4) 1
  8. 2018.01.21 NUCLEO-F446RE 보드 설정(3)
  9. 2018.01.21 NUCLEO-F446RE 보드 설정(2)
  10. 2018.01.14 NUCLEO-F446RE 보드 레이아웃


ChibiOS 다운로드

ChibiOS/RT는 http://sourceforge.net/projects/chibios/files에서 최신 버젼을 다운로드 받을 수 있습니다. 상업용 라이센스를 요청하기 전에 제품 평가를 위해서 GPL 버젼을 사용할 수 있으며, 코드는 정확하게 같습니다. 2018.2월 기준, 버젼은 ChibiOS_18.2.0이고 이를 기준으로 설명합니다.


다운로드 받은 ChibiOS_18.2.0을 압축해제 하면 ChibiOS 폴더 내에 아래와 같은 폴더 구조를 볼 수 있습니다.

demos/ -- 각 플랫폼에 따른 예제입니다.

docs/ -- 문서입니다. 

ext/ -- ChibiOS는 아니지만 외부 라이브러리입니다. 예) fat, tcp/ip 스택

os/ -- ChibiOS 소스 코드입니다.

test/ -- 커널 테스트를 위한 소스 코드입니다.

testhal/ -- HAL integration 테스트 예제입니다.

community/

testex/

tools/


ext에 마련된 모듈은 SD 카드를 지원하기 위한 FAT 파일시스템과 네트워크를 지원하기 위한 오픈 소스 스택인 lwip 등이 포함되어 있으며 필요시 사용할 수 있습니다. testhal의 경우 각 플랫폼에 따른 마이크로컨트롤러의 주변장치를 사용하기 위한 HAL 예제가 마련되어 있습니다. 필요한 경우 가져다 쓰면 됩니다. 예를 들어 ADC의 사용 예제를 참고하고 싶으면 testhal\STM32\STM32F4xx\ADC 폴더에 완전한 소스 코드를 확인할 수 있습니다.


한편 docs 내에 readme.txt 파일 내용과 같은 절차에 따라 documentation을 HTML 문서로 만들 수 있으며 ChibiOS 사용시 도움을 얻을 수 있습니다. 사실 컴파일 시 요구되는 폴더는 소스 코드인 os 폴더와 필요하다면 ext 폴더 정도를 사용할 수 있습니다.


새로운 프로젝트 작성

작업의 편의를 위해서 ChibiOS 폴더 아래에 원하는 폴더를 생성합니다. 예를 들어 저렴한 STM32F411RE-NUCLEO64 보드를 사용한다고 가정하여 ~/ChibiOS_18.2.0/myProject/LED로 폴더를 만들었습니다. 그리고 원하는 프로젝트와 가장 유사한 예제를 우선 demos 폴더에서 찾아 자신이 만든 새폴더로 복사합니다.



위 그림과 같은 STM32F411RE-NUCLEO64 보드를 사용할 경우, demos\STM32\RT-STM32F411RE-NUCLEO64 폴더에 이미 친절하게 준비되어 있습니다. 복사한 파일은 반드시 있어야 하는 3개의 헤더 파일인 chconf.h, halconf.h, mcuconf.h와 자신이 코딩할 main.c 그리고 리눅스/유닉스와 같은 커맨드라인 환경에서 개발하는데 필요한 Makefile입니다.


    • chconf.h - Kernel에 관련된 세팅이 포함되며 예를 들어 시스템 타이머와 Kernel 파라미터, 디버깅에 연관된 스위치 설정.

    • halconf.h - ChibiOS/HAL 드라이버에 관련된 설정. 예를 들어, PAL, CAN, ADC, DAC, PWM, Serial 등이며 사용하지 않는 드라이버는 disable 시킴.

    • mcuconf.h - MCU에 관련된 모든 설정. 예를 들어 Clock 트리, DMA, IRQ 우선순위 등.


Makefile 편집

Makefile은 전통적인 make 명령이 이해할 수 있는 문법으로 구성되어 있어 컴파일 및 링크 등이 일괄 처리되도록 규명한 일종의 배치 파일입니다. 다음은 demos\STM32\RT-STM32F411RE-NUCLEO64 폴더에서 복사해 온 Makefile의 내용입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
##############################################################################
# Build global options
# NOTE: Can be overridden externally.
#
 
# Compiler options here.
ifeq ($(USE_OPT),)
  USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16
endif
 
# C specific options here (added to USE_OPT).
ifeq ($(USE_COPT),)
  USE_COPT = 
endif
 
# C++ specific options here (added to USE_OPT).
ifeq ($(USE_CPPOPT),)
  USE_CPPOPT = -fno-rtti
endif
 
# Enable this if you want the linker to remove unused code and data
ifeq ($(USE_LINK_GC),)
  USE_LINK_GC = yes
endif
 
# Linker extra options here.
ifeq ($(USE_LDOPT),)
  USE_LDOPT = 
endif
 
# Enable this if you want link time optimizations (LTO)
ifeq ($(USE_LTO),)
  USE_LTO = yes
endif
 
# If enabled, this option allows to compile the application in THUMB mode.
ifeq ($(USE_THUMB),)
  USE_THUMB = yes
endif
 
# Enable this if you want to see the full log while compiling.
ifeq ($(USE_VERBOSE_COMPILE),)
  USE_VERBOSE_COMPILE = no
endif
 
# If enabled, this option makes the build process faster by not compiling
# modules not used in the current configuration.
ifeq ($(USE_SMART_BUILD),)
  USE_SMART_BUILD = yes
endif
 
#
# Build global options
##############################################################################
 
##############################################################################
# Architecture or project specific options
#
 
# Stack size to be allocated to the Cortex-M process stack. This stack is
# the stack used by the main() thread.
ifeq ($(USE_PROCESS_STACKSIZE),)
  USE_PROCESS_STACKSIZE = 0x400
endif
 
# Stack size to the allocated to the Cortex-M main/exceptions stack. This
# stack is used for processing interrupts and exceptions.
ifeq ($(USE_EXCEPTIONS_STACKSIZE),)
  USE_EXCEPTIONS_STACKSIZE = 0x400
endif
 
# Enables the use of FPU (no, softfp, hard).
ifeq ($(USE_FPU),)
  USE_FPU = no
endif
 
#
# Architecture or project specific options
##############################################################################
 
##############################################################################
# Project, sources and paths
#
 
# Define project name here
PROJECT = ch
 
# Imported source files and paths
CHIBIOS = ../../..
# Startup files.
include $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/mk/startup_stm32f4xx.mk
# HAL-OSAL files (optional).
include $(CHIBIOS)/os/hal/hal.mk
include $(CHIBIOS)/os/hal/ports/STM32/STM32F4xx/platform.mk
include $(CHIBIOS)/os/hal/boards/ST_NUCLEO64_F411RE/board.mk
include $(CHIBIOS)/os/hal/osal/rt/osal.mk
# RTOS files (optional).
include $(CHIBIOS)/os/rt/rt.mk
include $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC/mk/port_v7m.mk
# Other files (optional).
include $(CHIBIOS)/test/lib/test.mk
include $(CHIBIOS)/test/rt/rt_test.mk
include $(CHIBIOS)/test/oslib/oslib_test.mk
 
# Define linker script file here
LDSCRIPT= $(STARTUPLD)/STM32F411xE.ld
 
# C sources that can be compiled in ARM or THUMB mode depending on the global
# setting.
CSRC = $(STARTUPSRC) \
       $(KERNSRC) \
       $(PORTSRC) \
       $(OSALSRC) \
       $(HALSRC) \
       $(PLATFORMSRC) \
       $(BOARDSRC) \
       $(TESTSRC) \
       main.c
 
# C++ sources that can be compiled in ARM or THUMB mode depending on the global
# setting.
CPPSRC =
 
# C sources to be compiled in ARM mode regardless of the global setting.
# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
#       option that results in lower performance and larger code size.
ACSRC =
 
# C++ sources to be compiled in ARM mode regardless of the global setting.
# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
#       option that results in lower performance and larger code size.
ACPPSRC =
 
# C sources to be compiled in THUMB mode regardless of the global setting.
# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
#       option that results in lower performance and larger code size.
TCSRC =
 
# C sources to be compiled in THUMB mode regardless of the global setting.
# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
#       option that results in lower performance and larger code size.
TCPPSRC =
 
# List ASM source files here
ASMSRC =
ASMXSRC = $(STARTUPASM) $(PORTASM) $(OSALASM)
 
INCDIR = $(CHIBIOS)/os/license \
         $(STARTUPINC) $(KERNINC) $(PORTINC) $(OSALINC) \
         $(HALINC) $(PLATFORMINC) $(BOARDINC) $(TESTINC) \
         $(CHIBIOS)/os/various
 
#
# Project, sources and paths
##############################################################################
 
##############################################################################
# Compiler settings
#
 
MCU  = cortex-m4
 
#TRGT = arm-elf-
TRGT = arm-none-eabi-
CC   = $(TRGT)gcc
CPPC = $(TRGT)g++
# Enable loading with g++ only if you need C++ runtime support.
# NOTE: You can use C++ even without C++ support if you are careful. C++
#       runtime support makes code size explode.
LD   = $(TRGT)gcc
#LD   = $(TRGT)g++
CP   = $(TRGT)objcopy
AS   = $(TRGT)gcc -x assembler-with-cpp
AR   = $(TRGT)ar
OD   = $(TRGT)objdump
SZ   = $(TRGT)size
HEX  = $(CP) -O ihex
BIN  = $(CP) -O binary
 
# ARM-specific options here
AOPT =
 
# THUMB-specific options here
TOPT = -mthumb -DTHUMB
 
# Define C warning options here
CWARN = -Wall -Wextra -Wundef -Wstrict-prototypes
 
# Define C++ warning options here
CPPWARN = -Wall -Wextra -Wundef
 
#
# Compiler settings
##############################################################################
 
##############################################################################
# Start of user section
#
 
# List all user C define here, like -D_DEBUG=1
UDEFS =
 
# Define ASM defines here
UADEFS =
 
# List all user directories here
UINCDIR =
 
# List the user directory to look for the libraries here
ULIBDIR =
 
# List all user libraries here
ULIBS =
 
#
# End of user defines
##############################################################################
 
RULESPATH = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC
include $(RULESPATH)/rules.mk
 
cs


86번 라인의 PROJECT는 프로젝트의 이름이자 생성되는 파일명과 같습니다. 89번 라인은 ChibiOS 폴더의 절대 경로 또는 상대 경로입니다. '~/ChibiOS_18.2.0'이 추천됩니다. 161번 라인은 STM32F411RE-NUCLEO64 보드가 STM32F406 디바이스를 내장하므로 'cortex-m4'입니다. 164번은 사용하는 Toolchain을 지정하는 것으로 기본적으로 GNU Toolchain을 사용하도록 되어 있으므로 그냥 둡니다.


95번 라인의 'board.mk'는 사용하는 보드의 설정 정보를 담은 것으로 아래와 같습니다. 여기서는 'board.h'와 'board.c' 파일을 include 하게 합니다. 우선 board.h 파일의 정보는 보드에서 마이크로컨트롤러의 핀이 어떻게 사용되었는지에 관한 정보입니다. 예를 들어 핀인 GPIO는 아날로그와 디지털 모드로 사용될 수 있으며, 디지털 모드는 그 쓰임새에 따라 입력 혹은 출력, pull-up, PWM, CAN, UART 등등 여러가지의 모드로 사용되며 이를 일일이 지정하게 됩니다. board.c 파일은 board.h 파일에서 GPIO 사용을 매크로 지정한데로 초기화하는 함수가 구현되어 있습니다. 따라서 핀의 사용이 달라진다면 board.h는 반드시 수정되어야 합니다.


1
2
3
4
5
6
7
8
9
# List of all the board related files.
BOARDSRC = $(CHIBIOS)/os/hal/boards/ST_NUCLEO64_F411RE/board.c
 
# Required include directories
BOARDINC = $(CHIBIOS)/os/hal/boards/ST_NUCLEO64_F411RE
 
# Shared variables
ALLCSRC += $(BOARDSRC)
ALLINC  += $(BOARDINC)
cs


그러나 사용하고자 하는 보드가 없거나 사용자가 직접 PCB를 제작하고 assemble 한 보드의 경우에는 가장 유사하다고 생각되는 demos 폴더 하에 보드 중에서 찾아보고 /os/hal/boards 폴더 하에 적당한 board.mk, board.h 그리고 board.c 파일을 자신이 생성한 폴더에 복사합니다. 그리고 board.mk 파일에서 경로를 수정하고 board.h 파일에서 GPIO를 수정해야 합니다.


애플리케이션 코딩

'main.c'에 사용자가 원하는 기능을 작성하면 됩니다. demos\STM32\RT-STM32F411RE-NUCLEO64 폴더에서 제공하는 예제인 main.c는 다음과 같습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*
    ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at
        http://www.apache.org/licenses/LICENSE-2.0
    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
*/
 
#include "ch.h"
#include "hal.h"
#include "rt_test_root.h"
#include "oslib_test_root.h"
 
/*
 * Green LED blinker thread, times are in milliseconds.
 */
static THD_WORKING_AREA(waThread1, 128);
static THD_FUNCTION(Thread1, arg) {
 
  (void)arg;
  chRegSetThreadName("blinker");
  while (true) {
    palClearPad(GPIOA, GPIOA_LED_GREEN);
    chThdSleepMilliseconds(500);
    palSetPad(GPIOA, GPIOA_LED_GREEN);
    chThdSleepMilliseconds(500);
  }
}
 
/*
 * Application entry point.
 */
int main(void) {
 
  /*
   * System initializations.
   * - HAL initialization, this also initializes the configured device drivers
   *   and performs the board-specific initializations.
   * - Kernel initialization, the main() function becomes a thread and the
   *   RTOS is active.
   */
  halInit();
  chSysInit();
 
  /*
   * Activates the serial driver 2 using the driver default configuration.
   */
  sdStart(&SD2, NULL);
 
  /*
   * Creates the blinker thread.
   */
  chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
 
  /*
   * Normal main() thread activity, in this demo it does nothing except
   * sleeping in a loop and check the button state.
   */
  while (true) {
    if (!palReadPad(GPIOC, GPIOC_BUTTON)) {
      test_execute((BaseSequentialStream *)&SD2, &rt_test_suite);
      test_execute((BaseSequentialStream *)&SD2, &oslib_test_suite);
    }
    chThdSleepMilliseconds(500);
  }
}
cs


ChibiOS는 멀티 쓰레드(multi-thread)를 지원하고 Thread1은 GPIOA의 5번 핀을 500ms 간격으로 컸다 켰다를 반복합니다. 여기서 chRegSetThreadName("blinker") 함수는 ChibiOS 이하의 os\rt\include\chregistry.h에 선언되어 있으며, chThdSleepMilliseconds() 함수는 ChibiOS 이하의 os\rt\include\chthreads.h에 선언되어 있고, palClearPad()와 palSetPad() 함수는 ChibiOS 이하의 os\hal\include\hal_pal.h에 선언되어 있습니다.


main() 함수에서 hallnit()는 ChibiOS/HAL과 HAL 서브 시스템을 초기화 하는 것이며, chSysInit()는 Kernel이 초기화되고 main 함수가 쓰레드가 되며 RTOS가 활성화되도록 합니다. 이후에는 main() 함수의 스레드와 다른 모든 스레드가 실행될 준비가 되지 않았을 때 실행되는 idle 스레드가 생성됩니다. 한편 halInit() 함수는 ChibiOS 이하의 os\hal\include\hal.h에 그리고 chSysInit() 함수는 ChibiOS 이하의 os\rt\include\chsys.h에 선언되어 있습니다.


sdStart(&SD2, NULL) 함수는 시리얼 드라이버 2를 디폴트 설정으로 활성화 하는 것으로 ChibiOS 이하의 os\hal\include\hal_serial.h에 정의되어 있습니다. chThdCreateStatic() 함수는 Thread1을 생성시키는 함수로 ChibiOS 이하의 os\rt\include\chthreads.h에 선언되어 있습니다.


while 문 내에 palReadPad(GPIOC, GPIOC_BUTTON)) 함수는 GPIOC의 13번 핀에 연결된 버튼 값을 읽어오는 것으로 ChibiOS 이하의 os\hal\include\hal_pal.h에 선언되어 있으며, 버튼이 눌러지면 조건 문 아래의 연속된 test_execute() 함수가 실행되고 이는 500ms 간격으로 버튼을 조사하게 됩니다. 이 test_execute()는 ChibiOS 이하의 test\lib\ch_test.h에 정의된 함수로 두번째 인자인 문자열을 시리얼 드라이버 2에 보내게 됩니다.


빌드

작성이 완료되었으며 make 명령으로 컴파일 합니다. 만일 헤더 파일이 수정되었다면 처음부터 다시 컴파일을 진행할 것이고 오류없이 컴파일이 성공하였다면 ~/ChibiOS_18.2.0/myProject/LED/build 폴더 안에 'ch.elf'를 확인할 수 있을 것입니다.



'Embedded Programming > ChibiOS' 카테고리의 다른 글

ChibiOS/RT의 특징  (0) 2018.02.25
Cortex-M4 환경에서 ChibiOS 사용한 기초 예제  (0) 2017.12.19
Posted by Nature & Life


ChibiOS/RT는 Giovanni Di Sirio에 의해서 개발하였으며, 임베디드(embedded) 애플리케이션을 위한 무료이자 효율적이고, 컴팩트하며 빠른 RTOS(Real Time Operating System)입니다. Kernel primitive의 이해가 쉬운 세트를 제공하며 다양한 아키텍처(ARM7, Cortex-M0, Cortex-M3, Cortex-M4, PowerPC e200z, STM8, AVR, MSP430, ColdFire, H8S, x86)를 지원합니다. ChibiOS/RT는 RTOS로 GPL3 라이센스 하에서 배포됩니다.


ChibiOS/RT는 8, 16, 32-bit 마이크로컨트롤러의 임베디드 애플리케이션을 위해서 설계되었습니다; 사이즈와 실행 효율이 주요 프로젝트의 목표입니다. 참고로 커널 사이즈는 STM32 Cortex-M3 프로세스에서 활성화된 모든 서브시스템에서 최소 1.2KB에서 최대 5.5KB입니다. 커널은 초당 220,000 이상의 스레딩을 생성시키거나 종료할 수 있고, 72MHz의 STM32에서 1.2ms 내에 컨텍스트 스위칭(context switch)을 실행할 수 있습니다.


특징

  • Tiny memory footprint, 고성능, 쉬운 이식성(portable), 깔끔하고 이해가 쉽습니다.

  • 선점형 마이크로커널이자 멀티스레딩(multithreading), 128 우선 순위 레벨, 신뢰성 있고 정적 아키텍처.

  • Semaphores, Mutexes, CondVars, Messages, Event Flags, Mailboxes, Virtual Timers를 위한 커널 지원.

      • Counting semaphores

      • Mutexes with support for the priority inheritance algorithm

      • Condition variables

      • Synchronous and asynchronous Messages

      • Event flags and handlers

  • IRQ abstraction, non-OS fast IRQ sources(zero latency buzzword) 지원.

  • ARM, ARM-CM0, ARM-CM3, ARM-CM4, PowerPC, STM8, MSP430, AVR, ColdFire, H8S, Linux/Win32/MacOS 시뮬레이터를 지원.

  • HAL(Hardware Abstraction Layer) 컴포넌트는 지원되는 플랫폼 간에 애플리케이션의 이식이 가능.

  • Port(GPIO), Serial, ADC, CAN, DAC, EXT, GPT(general-purpose timer), I2C, I2S, ICU, MAC, MMC/SD, PAL, PWM, RTC, SDC, SPI, UART, USB, WDG 디바이스 드라이버 모델을 위한 HAL 지원.

  • uIP과 lwIP TCP/IP stacks(demo 포함)를 위한 지원.

  • FatFS 파일 시스템 라이브러리(demo 포함)를 지원.

  • 동일한 우선 순위 레벨에서 스레드를 위해서 Round-robin 스케쥴링

  • Software timers

  • Queues

  • Synchronous and asynchronous I/O with timeout capability

  • Thread-safe memory heap and memory pool allocators.


스레드, semaphore, 타이머와 같은 모든 시스템 객체는 실행 중에 생성되고 삭제될 수 있습니다. 가능한 메모리를 제외하고 어떤 상한이 없습니다. 시스템 신뢰성을 개선하기 위해서, 커널 아키텍처는 전체적으로 정적이고, memory allocator가 요구되지 않습니다(그러나 옵션으로 가능합니다). 그리고 테이블 혹은 배열과 같은 상한 사이즈 제한과 함께 어떠한 데이터 구조가 존재하지 않습니다. 시스템 API는 에러 코드나 예외와 같은 에러 조건을 갖지 않도록 설계되었습니다.


RTOS는 임베디드 디바이스 애플리케이션을 위해서 설계되었고 다양한 마이크로컨트롤러를 위한 데모 애플리케이션을 포함합니다:

  • ST STM32F1xx, STM32F2xx, STM32F3xx, STM32F4xx, STM32L1xx, STM32F0xx

  • ST STM8S208x, STM8S105x, STM8L152x

  • ST/Freescale SPC56x / MPC56xx

  • NXP LPC11xx, LPC11Uxx, LPC13xx

  • NXP LPC2148

  • Atmel AT91SAM7S, AT91SAM7X

  • Atmel Mega AVR

  • TI MSP430x1611

  • TI TM4C123G and TM4C1294

  • Microchip PIC32MX


소프트웨어 I/O 에뮬레이션(emulation) 모드로 Win32 프로세스에서 커널을 실행시키는 것이 가능합니다. 이는 물리적인 하드웨어의 요구 없이 쉬운 애플리케이션 개발을 허용합니다.




'Embedded Programming > ChibiOS' 카테고리의 다른 글

ChibiOS/RT 설치  (1) 2018.02.25
Cortex-M4 환경에서 ChibiOS 사용한 기초 예제  (0) 2017.12.19
Posted by Nature & Life
Embedded Programming/EmBitz2018. 2. 13. 22:20


임베디드 개발 환경에 적합한 EmBitz의 특징입니다. 무엇보다도 사용 제한이 없으며 무료입니다.


Highlights:

    • Multiple device targets (ARM, MSP430, PIC,  ….).

    • Included optional: GNU ARM Embedded “bare-metal” compiler with different optimized libraries.

    • Powerful debugger fully optimized for embedded development.

    • Written in C++. No interpreted languages (Jave or .NET) or proprietary libs needed.

    • Extensible through plugins

Interface:

    • Syntax highlighting, customizable and extensible

    • Syntax highlighting for assembler sources for all the supported targets (ARM, MSP430, PIC,…)

    • Code folding for C/ C++ and XML files.

    • Tabbed interface (VS2010 style)

    • Code completion

    • Class/symbol Browser (also for the compiler predefined symbols)

    • Smart indent

    • Spelling checker with US dictionary pre-installed

    • CScope integration with binaries pre-installed

    • One-key swap between .h and .c/.cpp files

    • Open files list for quick switching between files (optional)

    • External customizable "Tools"

    • To-do list management with different users

Build engine:

    • Multiple compiler/target support:

- EmBlocks "bare-metal" GNU ARM compiler (with memory report in EmBlocks)

- Keil/ARM realview

- ARM GCC (generic)

- Mspgcc (MSP430)

- PIC32 Microchip

- PIC24, PIC30, dsPIC Microchip

- PIC18 Microchip

- AVR GCC ATmel (MHV windows toolchain detection)

    • Auto detection of installed toolchains

    • Build options for Compiler, Linker and Assembler

    • Inherited options from upper levels are visible at lower levels

    • Compiler build options on source file level

    • Support for parallel builds (utilizing your CPU's extra cores)

    • Multi-target projects

    • Workspaces to combine multiple projects

    • Inter-project dependencies inside workspace

    • New Project Wizard for NXP-ARM, ST-ARM, EnergyMicro and Microchip targets (others will follow)

    • Project loader for uVision ARM projects

    • Project loader for Mplab 8 projects (PIC32,dsPIC, PIC30, PIC24 and PIC18)

    • Project loader for Atmel Studio project/workspace (AVR and ARM)

    • Project importer MplabX projects

    • Project importer CoIde projects

ARM GNU Embedded "bare-metal" Compiler:

    • Based on GNU 5.4-branch

    • Special libraries for the cortex family (with and without fpu/softfp etc)

    • Newlib builds optimized for Speed & Size (and default)

    • Newlib Nano-branch included

    • Unwind handling is excluded for minimum size builds

    • All libraries are selectable from linker panel EmBlocks

    • CMSIS library preinstalled and available without further settings

    • Fully documented and accessible at EmBlocks help menu (inclusive ARM quick references)

Debugger:

    • Special tailored GDB binaries optimized for embedded debugging

(ARM, MSP430, & AVR are selectable in the install package)

    • Step-in/out, Step-over, Step-instruction, Run to cursor & Set PC at cursor

    • Disassembler view mode, mixed or plain

    • Memory view hex,char or dec (signed/unsigned) and 8,16 or 32 bits selectable

    • Memory view Scrollable (uVision style) and with "Address modify" function

    • System view with CMSIS-SVD (XML) description support.

    • Display all the peripherals registers of the device and modify the values if necessary.

    • Live data and variables (on mouse-over) on GDB server support

    • Live watches (global variables)

    • EB monitor – printf/scanf in EB console window without halting the application (the semihosting successor)

    • Supports old Semihosting console handling in debugger-target view through GDB

    • OS aware debugger plugin: OSsupport

– FreeRTOS

    • Navigation between register, disassembly and memory views

e.g. show memory pointed by register/system or disassembly immediate values etc.

    • GUI debug interface settings

    • Easy integration of additional GDB-servers by squirrel scripting

    • Automatic GDB server launch and termination

    *ST-link GDB server available in package which supports flash/ram execution with live data.

    *OpenOCD GDB server available in package which supports live data for STlink.

    • Scripted register window parser for register-flags

    • Changeable register values in register window

    • Cursor aware variable inspect (on cursor or on selection) with live updates

    • Custom variable types possible via scripting

    • Assembler syntax highlight with PC-aware line colouring

    • Debug session storage in separate file (.eds) option

    • Breakpoints in source windows are visible also in assembler pane

    • 'Break on valid source line if possible' option

Additional Plug-ins:

    • SVD online repository plugin (>400 files)

    • Auto versioning

    • File diff viewer.

    • Hex editor (even for large files).

    • Doxy documentation generation front-end.

    • Code snippets.

    • Code statistics.

    • EB monitor


EmBitz(v1.11)에서 코드를 볼 때 색깔이 흐려서 보이지 않는 경우에 "Settings -> Editor..." 메뉴에서 아래와 같이 'Syntax highlighting'에서 설정할 수 있습니다. 이와 같은 설정은 EmBitz 종료시 반드시 저장되어야 합니다.



Posted by Nature & Life


실시간 시스템(real time system)은 임의의 정보가 시스템 내/외부에서 이벤트 혹은 인터럽트(interrupt)의 형태로 시스템에 입력되었을 때 주어진 시간 안에 작업이 완료되어 결과가 주어져야 하는 시스템입니다. 즉, 이벤트 발생과 처리가 실시간으로 이루어지는 시스템입니다. 물론 CPU의 처리 속도를 증가시킬 수도 있지만 속도는 느리더라도 이벤트 처리 시간을 보장할 수 있도록 하여야 한다는 의미입니다.


RTOS(Real Time Operating System) 없이 펌웨어를 제작하여도 모든 작업을 할 수는 있습니다. 예전의 시스템에서 펌웨어(firmware)는 비교적 간단해서 OS의 개념을 적용하지 않고 순차적인 프로그램만으로 작성했어도 그리 문제가 되지 않았습니다. 하지만 최근에 점점 더 소형기기에 들어가는 기능이 다양해지고 Windows OS처럼 이벤트가 수ms 정도에 처리되어도 가능한 상황과 달리, 임베디드 시스템(embedded system)에서는 훨씬 빠른 응답을 요구하여 순차적인 프로그래밍 방식으로는 기능을 구현하기에 어려워졌고 시간도 많이 걸려 다음의 장점으로 여러개의 태스크(task)로 분할하여 개발할 필요가 있다는 것입니다. 왜냐면 여러가지 일을 할 수 있는 순차적인 프로그램 방법으로 구현하면 프로그램의 복잡도가 일의 갯수의 승수에 비례하기 때문입니다.


1. 코드의 개발, 수정, 유지, 보수가 보다 용이합니다.

2. 이벤트에 대해 보다 신속하게 응답할 수 있습니다. - 인터럽트가 발생하면, 진행 중인 태스크 대신 인터럽트를 처리할 태스크를 우선적으로 실행할 수 있습니다.

3. 시스템의 신뢰도와 성능을 높일 수 있습니다.


한편 우선 순위 방식에는 2가지가 있는데, 우선 순위가 높은 태스크가 우선 순위가 낮은 태스크를 잠시 멈추게 하고 프로세서를 차지할 수 있는 권한이 부여되면 최근 대부분 OS가 그렇듯 선점형 우선순위(Preemptive)가 됩니다. 반면에 우선 순위가 높다 하더라도 우선 순위가 낮은 태스크가 완료할 때까지 기다려 주는 방식을 Windows 95이전의 OS와 같은 비선점형 우선순위(Non-preemptive)라 부릅니다.


임베디드 시스템에서는 주로 선점형을 사용하는데, 우선 순위에 따라 프로세서의 사용 권한을 조정하는 것을 스케줄링(Scheduling)라고 부릅니다. 이와 같이 진행 중인 태스크가 바뀌게 되면 컨텍스트(Context)라고 불리는 기존의 태스크에 대한 정보를 저장하고 새로운 태스크를 불러오는 동작을 해야 하는데 이를 컨텍스트 스위칭(context switching)이라고 합니다. 또한 진행 중인 태스크들의 각종 정보를 태스크 컨트롤 블럭(TCB: Task control block)이라고 부릅니다. 다음은 선점형 OS에서 사용하는 스케줄링 방식입니다.


1. Priority Scheduling Algorithm

2. Round-Robin Scheduling Algorithm


이처럼 예전에는 하드웨어 성능과 크기의 제약으로 OS 없이 단순한 기능만 수행 가능했던 것이 하드웨어 성능의 향상으로 다양한 일이 요구되었습니다. 이에 RTOS라는 OS 개념을 도입하여 각각의 태스크에 대한 스케줄링으로 자원을 효율적으로 사용할 수 있게 하고 복잡한 일들을 태스크로 나눔으로써 일을 단순화 시킬 수 있다는 것입니다. 뿐만 아니라 다음과 같은 까다로운 문제가 발생하는데, 이들 문제를 직접해결하기 보다는 멀티태스킹(multi-tasking; 엄밀하게 multi-threadingOS를 도입하는 것이 훨씬 효과적이라는 것입니다. 근래에는 멀티태스킹 뿐 아니라 Network, File System, GUI도 구현하고 있습니다.


1. 태스크간 경쟁의 관리

2. 데드락(deadlock)

3. 우선 순위 역전(priority inversion)

4. 재진입 문제(reentrancy)

5. 태스크간 통신


※ 일반적인 OS vs. RTOS

    • 효율성 / 시간 제약성 : 일반 OS 경우에 태스크들 사이에 효율성을 유지하려고 하지만 real-time OS에서는 태스크에 시간 제약성이 존재하고 이런 시간 제약성 때문에 효율성을 무시하는 경우가 발생하며 효율성은 고려하지 않습니다.

    • 공평성 / 우선순위 : 일반 OS 경우 여러 명의 사용자가 쓰는 경우에는 각 사용자들이 실행하는 프로그램이 태스크로서 수행이 되고 대개의 경우에는 각 태스크가 공평성을 유지하려고 한다. 그러나 real-time OS에서 태스크는 대개 우선순위가 차이가 있도록 하며 이때 태스크 사이의 공평성은 고려하지 않습니다.



결론적으로 
RTOS는 시간의 정확성을 보장하는 멀티태스킹 호출과 인터럽트에 대한 반응시간의 최대값을 보장할 수 있고 실행시간의 편차가 작아야 하는데 즉, 작업의 소요시간을 예측할 수 있어야 합니다. 우선순위가 높은 일이 우선적으로 자원을 분배하여 시간제한 내에 끝날 수 있도록 해야 합니다.


1. 다수의 작업에 우선 순위를 두어 멀티태스킹을 지원합니다.

2. 짧은 interrupt lattency interrupt latency는 인터럽트가 걸려서 인터럽트 핸들러에 도착하기까지의 시간이며 이벤트에 의한 반응 속도가 빠릅니다.

3. 적은 용량의 kernel 사용 - 작고 유연한 구조(10 ~ 50 KB 수준)



'Embedded Programming > Environment' 카테고리의 다른 글

Firmware와 RTOS의 차이점  (0) 2017.12.16
Posted by Nature & Life


NUCLEO-F446RE 보드의 회로도

Top and Power


STM32 MCU


 ST-LINK/V2-1


Extension connectors



'Embedded Programming > STM32 Cortex-M4' 카테고리의 다른 글

NUCLEO-F446RE 보드 설정(5)  (0) 2018.01.21
NUCLEO-F446RE 보드 설정(4)  (1) 2018.01.21
NUCLEO-F446RE 보드 설정(3)  (0) 2018.01.21
NUCLEO-F446RE 보드 설정(2)  (0) 2018.01.21
NUCLEO-F446RE 보드 레이아웃  (0) 2018.01.14
Posted by Nature & Life


STM32 누클레오 보드는 빠른 평가와 LQFP64 패키지로 STM32 마이크로컨트롤러와 함께 개발을 시작하기 위해서 사용되는 저 비용 그리고 사용이 쉬운 개발 플랫폼입니다. 

STM32 누클레오 보드의 자세한 정보와 데모 소프트웨어에 접근하기 위해서 www.st.com/stm32nucleo 웹사이트를 방문하세요. 혹은 STM32 누클레오 보드의 사용자 메뉴얼을 참고하시길 바랍니다.


시작하기


STM32 누클레오 보드를 설정하고 데모 소프트웨어를 사용하기 위해서 아래의 절차를 따르세요:

1. 보드에 점퍼 위치를 확인합니다, JP1 off, JP5 (PWR) on U5V, JP6 on (IDD), CN2 on (NUCLEO) selected.

2. 호스트 PC에서 디바이스 인터페이스의 올바른 인식을 위해서 보드를 연결하기 이전에 www.st.com/stm32nucleo로부터 누클레오 USB 드라이버를 설치합니다. 

3. 보드에 전원을 공급하기 위해서 USB 커넥터 CN1을 통하여 'Type-A to Mini-B' USB 케이블로 PC로 STM32 누클레오 보드를 연결합니다. 빨간색 LED LD3(PWR)과 LD1 (COM)은 켜져야만 합니다. 그리고 녹색 LED LD2는 깜박거려야 합니다.

4. 버튼 B1 (왼쪽 버튼)을 누릅니다.

5. 3개의 LED인 LD1에서 LD3을 버튼 B1을 클릭하면거 깜박거리는 빈도를 관찰합니다.

6. STM32 누클레오 보드 기능을 어떻게 사용하는지에 대한 데모 소프트웨어와 몇개의 예제가 www.st.com/stm32nucleo에서 가능합니다.

7. 가능한 예제를 사용해서 애플리케이션을 개발합니다.


시스템 요구사항


• Windows OS (7, 8 and 10), Linux 64-bit or macOS

• USB Type-A to Mini-B cable


Development toolchain


• Arm Keil: MDK-ARM

• IAR: EWARM

• GCC-based IDEs including free SW4STM32 from AC6

• Arm Mbed online (see http://mbed.org) 

 

Hardware block diagram


Extension connector


STM32 누클레오 보드 상에 Arduino 커넥터는 Arduino Uno V3를 지원합니다. Arduino Uno V1과 호환을 위해서 다음의 설정이 필요합니다:

• SB46과 SB52는 ON이어야 하고,

• SB51과 SB56는 I2C on A4 (핀 5)과 A5 (핀 6 of CN8)를 연결하기 위해서 OFF이어야 합니다.

주의 1: STM32 마이크로컨트롤러의 I/O는 Arduino Uno V3를 위한 5V 대신에 3.3V 호환입니다.

주의 2: CN5 핀 8에 공급되는 VREF+ 전력을 갖는 Arduino 쉴드를 구현하기 전에 SB57을 제거하여만 합니다.


NUCLEO-F446RE 상에 Arduino 커넥터


ST morpho 커넥터는 보드의 양면에서 접근가능한 수컷 핀 헤더(CN7 그리고 CN10)로 구성됩니다. 이들은 STM32 누클레오 보드를 확장 보드 혹은 STM32 누클레오 보드의 앞면이나 뒷면에 위치되는 prototype/wrapping 보드로 연결하는데 사용될 수 있습니다. STM32의 모든 신호와 전력 핀이 ST morpho 커넥터 상에 가능합니다. 이 커넥터는 또한 오실로스코프나 logical analyzer 혹은 전압계에 의해서 프로브될 수 있습니다.


1. BOOT0의 디폴트 상태는 0입니다. 이는 점퍼가 CN7의 핀 5-7상에 있을 때 1로 설정될 수 있습니다. 두개의 사용되지 않은 점퍼는 CN11과 CN12(보드의 뒷면)에서 가능합니다. 

2. U5V는 ST-LINK/V2-1 USB 커넥터로부터 5V 전원이고 이는 +5V 전에 올라갑니다.

3. PA13 and PA14 share with SWD signals connected to ST-LINK/V2-1, it is not recommend to use them as IO pins if ST-LINK part is not cut PA13과 PA14는 ST-LINK/V2-1에 연결된 SWD 신호와 공유됩니다. 만일 ST-LINK 파트가 분리되지 않았다면 IO 핀으로서 이들을 사용하는 것은 권고되지 않습니다.

NUCLEO-F446RE 상에 ST morpho 커넥터



'Embedded Programming > STM32 Cortex-M4' 카테고리의 다른 글

NUCLEO-F446RE 보드 설정(6)  (1) 2018.01.21
NUCLEO-F446RE 보드 설정(4)  (1) 2018.01.21
NUCLEO-F446RE 보드 설정(3)  (0) 2018.01.21
NUCLEO-F446RE 보드 설정(2)  (0) 2018.01.21
NUCLEO-F446RE 보드 레이아웃  (0) 2018.01.14
Posted by Nature & Life


USART communication


STM32 마이크로컨트롤러의 PA2와 PA3 상에 가능한 USART2 인터페이스는 ST-LINK MCU, ST morpho 커넥터 혹은 Arduino 커넥터로 연결될 수 있습니다. 이 선택은 관련된 solder bridge를 설정하는 것에 의해서 변경될 수 있습니다. 티폴트로 Mbed(SB13과 SB14 ON, SB62와 SB63 OFF)를 위한 가상 COM 포트를 지원하기 위해서 타겟 STM32와 ST-LINK MCU 사이에 USART2 통신이 가능합니다. 만일 타겟 STM32 PA2 (D1) 혹은 PA3 (D0) 그리고 쉴드 혹은 확장 보드 사이에 통신이 요구되면, SB62과 SB63는 ON 되어야 하고 SB13과 SB14는 OFF 되어야 합니다. 그러한 경우에 또다른 USART를 ST-LINK MCU로 ST morpho 커넥터와 CN3 사이에 연결선을 사용하여 연결이 가능합니다. NUCLEO-F103RB의 예를 들어, PC10 (TX) and PC11 (RX) 상에 가능한 USART3를 사용하는 것이 가능합니다. 두 연결선(flying wire)은 다음과 같이 연결되어야 합니다:

• PC10 (USART3_TX) available on CN7 pin 1 to CN3 pin RX

• PC11 (USART3_RX) available on CN7 pin 2 to CN3 pin TX


Push-buttons

B1 USER: 유저 버튼은 STM32 마이크로컨트롤러의 I/O PC13 (핀 2)에 연결됩니다.

B2 RESET: 이 푸쉬 버튼은 NRST에 연결되고 STM32 마이크로컨트롤러의 RESET에 사용됩니다.

Note: 푸쉬 버튼에 위치한 파란색 그리고 검은색 플라스틱 덥개는 만일 필요하다면 제거될 수 있습니다. 예를 들어 쉴드 혹은 애플리케이션 보드가 누클레오 보드의 위에 꼽힐 때 등입니다. 이는 버튼에 압력 그러므로 가능한 영구적인 타겟 STM32 RESET을 피할 수 있습니다.


JP6 (IDD)


IDD라 라벨된 점퍼 JP6은 점퍼를 제거하고 전류계를 연결하는 것에 의해서 STM32 마이크로컨트롤러 전류 소비를 측정하는데 사용됩니다:

• Jumper ON: STM32 microcontroller is powered (default).STM32 마이크로컨트롤러가 전력이 공급됩니다(디폴트).

• Jumper OFF: 전류계는 STM32 마이크로컨트롤러 전류를 측정하기 위해서 연결되어야만 합니다. 만일 전류계가 없다면 STM32 마이크로컨트롤러는 전력이 공급되지 않습니다.



'Embedded Programming > STM32 Cortex-M4' 카테고리의 다른 글

NUCLEO-F446RE 보드 설정(6)  (1) 2018.01.21
NUCLEO-F446RE 보드 설정(5)  (0) 2018.01.21
NUCLEO-F446RE 보드 설정(3)  (0) 2018.01.21
NUCLEO-F446RE 보드 설정(2)  (0) 2018.01.21
NUCLEO-F446RE 보드 레이아웃  (0) 2018.01.14
Posted by Nature & Life


OSC clock


OSC clock 공급

외부 고속 클럭(external high-speed clock; HSE)과 대응하는 핀을 설정하는 4가지 방법이 있습니다:

ST-LINK로부터 MCO: ST-LINK MCU의 MCO 출력이 입력 클럭으로서 사용됩니다. 이 주파수는 8MHz로 변경할 수 없고 STM32 마이크로컨트롤러의 PF0/PD0/PH0-OSC_IN로 연결됩니다. 다음의 설정이 필요합니다:

– SB55 OFF and SB54 ON

– SB16 and SB50 ON

– R35 and R37 removed

X3 크리스탈(미제공)로부터 온보드 HSE 오실레이터: 전형적인 주파수와 커패시터 그리고 저항에 대해서 STM32 마이크로컨트롤러 데이터시트를 참조하세요. STM32 마이크로컨트롤러에 대한 오실레이터 설계 가이드에 대한 AN2867 Application note를 참조하세요. X3 크리스탈은 다음의 특성을 갖습니다: 8MHZ, 16pF, 20ppm 그리고 DIP footprint. Hong Kong X'tals Limited에서 제조한 9SL8000016AFXHF0을 사용할 것을 권장합니다. 다음의 설정이 요구됩니다:

– SB54 and SB55 OFF

– R35 and R37 soldered

– C33 and C34 soldered with 20 pF capacitors

– SB16 and SB50 OFF

• 외부 PF0/PD0/PH0로부터 오실레이터: CN7 커넥터의 29 핀을 통한 외장 오실레이터로부터. 다음의 설정이 요구됩니다:

– SB55 ON

– SB50 OFF

– R35 and R37 removed

• HSE not used: PF0/PD0/PH0 and PF1/PD1/PH1이 클럭 대신에 GPIO로써 사용됩니다. 다음의 설정이 요구됩니다:

– SB54 and SB55 ON

– SB16 and SB50 (MCO) OFF

– R35 and R37 removed


STM32 누클레오 보드 하드웨어 버젼에 따라서 HSE 핀의 두가지 가능한 디폴트 설정이 있습니다. 보드 버젼 MB1136 C-01 혹은 MB1136 C-02은 PCB 뒷면에 위한 스티커 상에 표시됩니다. 보드에 대응하는 보드 마킹 MB1136 C-01은 HSE가 사용되지 않은 것이고 MB1136 C-02 혹은 그 이상은 클럭 입력으로 ST-LINK MCO를 사용합니다.

Note: NUCLEO-L476RG과 NUCLEO-L452RE에 대하여 ST-LINK MCO 출력은 저 파워 모드에서 전력 소비를 줄이기 위해서 OSCIN으로 연결되지 않았습니다. 결론적으로 NUCLEO-L476RG 그리고 NUCLEO-L452RE 설정은 HSE가 사용되지 않는 것입니다.


OSC 32 kHz clock supply


저 속도 클럭(LSE)에 대응하는 핀을 설정하는 3가지 방법이 있습니다:

• On-board oscillator: X2 크리스탈, STM8S를 위하 오실레이터 설계 가이드를 참조하세요. STM32 마이크로컨트롤러를 위한 오실레이터 설계 가이드에 대해서 STM8A와 STM32 microcontrollers application note (AN2867). Abracon corporation에서 제조된 ABS25-32.768KHZ-6-T을 사용하는 것을 권장합니다.

• Oscillator from external PC14: CN7 커넥터의 25 핀을 통한 외장 오실레이터로부터. 다음의 설정이 요구됩니다:

– SB48 and SB49 ON

– R34 and R36 removed

• LSE not used: PC 14와 PC 15는 저 속도 클럭 대신에 GPIO로서 사용됩니다. 다음의 설정이 요구됩니다:

– SB48 and SB49 ON

– R34 and R36 removed


STM32 누클레오 보드 하드웨어의 버젼에 따라서 3가지 가능한 디폴트 설정이 있습니다. 보드 버젼 MB1136 C-01 혹은 MB1136 C-02는 PCB 뒷면에 위치한 스티커 상에 표시됩니다. 보드 마킹 MB1136 C-01는 LSE가 사용되지 않은 것으로써 설정된 보드에 대응합니다. 보드 마킹 MB1136 C-02 혹은 그 이상 버젼은 온보드 32 kHz 오실레이터로 설정된 보드를 의미하고 보드 마킹 MB1136 C-03 그 이상 버젼은 새로운 LSE 크리스탈(ABS25) 그리고 C26, C31 그리고 C32 값 갱신을 사용한 보드입니다.



'Embedded Programming > STM32 Cortex-M4' 카테고리의 다른 글

NUCLEO-F446RE 보드 설정(5)  (0) 2018.01.21
NUCLEO-F446RE 보드 설정(4)  (1) 2018.01.21
NUCLEO-F446RE 보드 설정(2)  (0) 2018.01.21
NUCLEO-F446RE 보드 레이아웃  (0) 2018.01.14
NUCLEO-F446RE 보드 설정(1)  (0) 2018.01.13
Posted by Nature & Life


STM32 누클레오 보드는 2 파트로 나누어집니다: ST-LINK 파트와 STM32 파트. PCB의 ST-LINK 파트는 보드의 사이즈를 줄이기 위해서 자를 수 있습니다. 이 경우에 남겨진 타겟 STM32 파트는 오직 VIN, E5V 그리고 ST morpho 커넥터 상에 3.3V 그리고 Arduino 커넥터 CN6 상에 3.3V에 의해서 전력이 공급될 수 있습니다. 메인 STM32는 CN4와 ST morpho 커넥터(SWCLK CN7 pin 15 그리고 SWDIO CN7 pin 13) 상에 가능한 SWD 사이에 연결선을 이용해서 프로그램하는데 ST-LINK를 사용하는 것은 여전히 가능합니다.


Embedded ST-LINK/V2-1


ST-LINK/V2-1 프로그래밍과 디버깅 툴은 STM32 누클레오 보드에 집적되었습니다. ST-LINK/V2-1는 STM32 누클레오 보드가 Mbed가 가능하도록 합니다. 임베디드(embeddedST-LINK/V2-1는 STM32 디바이스에서 오직 SWD만을 지원합니다. 디버깅 그리고 프로그래밍에 대한 정보에 대해서 그 기능은 STM8 그리고 STM32 User manual(UM1075)에 대한 ST-LINK/V2 in-circuit debugger/programmer를 참조하세요. 이 메뉴얼에서는 모든 ST-LINK/V2 기능에 대하여 자세하게 설명합니다.


ST-LINK/V2에서의 변화는 다음과 같습니다.

• New features supported on ST-LINK/V2-1:

– USB software re-enumeration

– Virtual COM port interface on USB

– Mass storage interface on USB

– USB power management request for more than 100 mA power on USB

• Features not supported on ST-LINK/V2-1:

– SWIM interface

– Minimum supported application voltage limited to 3V

• Known limitation:

ST-LINK/V2-1 target 상에 readout protection을 활성화하는 것은 타켓 애플리케이션을 앞으로 동작할 수 없습니다. 타겟 readout protection은 ST-LINK/V2-1 보드에서 유지되어져아 합니다.


점퍼 상태에 따라 임베디드 ST-LINK/V2-1를 사용하는 2가지 다른 방법이 있습니다:



• 온보드(on-board) STM32을 프로그램/디버그

SWD 커넥터 CN4에 연결된 케이블을 사용하여 외부 애플리케이션 보드에서 MCU를 프로그램/디버그


드라이버


누클레오-64 보드를 USB를 이용하여 Windows 7, Windows 8 혹은 Windows XP PC로 연결하기 전에 ST-LINK/V2-1 드라이버는 설치되어야 합니다. 이는 www.st.com 웹사이트로부터 다운로드 할 수 있습니다. 경우에 따라서 STM32 누클레오-64 보드는 드라이버가 설치되기 전에 PC에 연결될 수 있고, PC 디바이스 메니저는 일부 누클레오 인터페이스를 "Unknown"으로 보고할 수도 있습니다. 이런 상황을 해결하기 위해 해당 드라이버를 설치한 후에 STM32 누클레오-64 보드에서 발견된 "Unknown" USB 장치를 이 해당 드라이버로 디바이스 메니저에서 직접 변경해 주어야만 합니다.

Note: 다음 그림에서 보여지는 것과 같이 USB Composite Device를 사용해서 진행하는 것을 추천합니다.



ST-LINK/V2-1를 사용하여 보드 상에 STM32의 프로그래밍과 디버깅


보드에 STM32를 프로그래밍하기 위해서 다음 그림에서 같이 CN2에 두 점퍼를 꼽습니다. 이는 STM32 누클레오 보드의 STM32 마이크로컨트롤러와 통신을 방해할 수 있기 때문에 CN4 커넥터를 사용하지 마세요.



ST-LINK/V2-1를 사용해서 외부 STM32 애플리케이션을 프로그래밍과 디버깅


외부 애플리케이션에서 STM32를 프로그래밍하기 위해서 ST-LINK/V2-1를 사용하는 것은 매우 쉽습니다. 다음 그림에서 나타내듯이 CN2에서 두 점퍼를 간단히 제거하고 그리고 아래 테이블과 같이 CN4 디버그 커넥터로 애플리케이션을 연결합니다.

Note: SB12 NRST (타겟 STM32 RESET)은 만일 CN4 핀 5가 외부 애플리케이션에서 사용된다면 OFF 되어져야만 합니다.




'Embedded Programming > STM32 Cortex-M4' 카테고리의 다른 글

NUCLEO-F446RE 보드 설정(4)  (1) 2018.01.21
NUCLEO-F446RE 보드 설정(3)  (0) 2018.01.21
NUCLEO-F446RE 보드 레이아웃  (0) 2018.01.14
NUCLEO-F446RE 보드 설정(1)  (0) 2018.01.13
NUCLEO-F446RE 보드 스펙  (0) 2018.01.13
Posted by Nature & Life


NUCLEO-F446RE 보드의 레이아웃(layout)입니다.


Top 레이아웃


Bottom 레이아웃



'Embedded Programming > STM32 Cortex-M4' 카테고리의 다른 글

NUCLEO-F446RE 보드 설정(3)  (0) 2018.01.21
NUCLEO-F446RE 보드 설정(2)  (0) 2018.01.21
NUCLEO-F446RE 보드 설정(1)  (0) 2018.01.13
NUCLEO-F446RE 보드 스펙  (0) 2018.01.13
STM32F4 시리즈  (1) 2018.01.13
Posted by Nature & Life