STM32 누클레오 보드의 스펙입니다:

• STM32 microcontroller in LQFP64 package

• Three LEDs:

– USB communication (LD1), user LED (LD2), power LED (LD3)

• 2 push buttons: USER and RESET

• 2 types of extension resources

– Arduino™ Uno V3 연결을 위한 connector

– ST morpho extension을 위한 모든 I/O의 헤더

• Flexible board power supply:

– USB VBUS or external source (3.3 V, 5 V, 7 - 12 V)

– Power management access point

• On-board ST-LINK/V2-1 debugger and programmer with SWD connector

– Selection-mode switch to use the kit as a standalone ST-LINK/V2-1

• USB re-enumeration capability. Three different interfaces supported on USB:

– Virtual COM port

– Mass storage

– Debug port

• Comprehensive free software HAL library including a variety of software examples

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


전원


전원은 USB 케이블을 통한 호스트 PC나 외부 소스: VIN(7~12V), E5V(5V) 혹은 CN6 혹은 CN7 상에 +3.3V 전원 핀에 의해서 공급됩니다. VIN, E5V 혹는 +3.3V는 외부 전원 장치 혹은 보조 장치를 사용하여 STM32 누클레오 보드에 전력을 공급하는데 사용됩니다. 이 전원은 표준 EN-60950-1:2006+A11/2009를 준수해야 합니다. 그리고 제한된 전력 용량과 함께 Safety Extra Low Voltage(SELV)이어야 합니다.


ST-LINK/V2-1은 USB 파워 메니지먼트를 지원하며 이는 호스트 PC로부터 100mA 이상의 전류를 필요로 합니다. STM32 누클레오 보드와 쉴드 모두는 ST-LINK USB 커넥터 CN1 (U5V 혹은 VBUS)로부터 전력이 공급될 수 있습니다. 오직 ST-LINK 파트만 전력이 USB enumeration 전에 공급됨을 유의하세요. 왜냐하면 호스트 PC는 그 시간에 보드에만 100mA를 공급하기 때문입니다. USB enumeration 동안에는 STM32 누클레오 보드는 호스트 PC로부터 300mA 전류를 요구합니다.


만일 호스트가 요구된 전력을 공급가능하다면 STM32 MCU는 급전되고 LED LD3는 켜집니다. 그러므로 STM32 누클레오 보드와 쉴드 보드는 최대 300mA까지 소비할 수 있습니다. 만일 호스트가 요구된 전류 공급이 불가능하다면 STM32 MCU와 확장 보드를 포함한 MCU 파트는 전원이 공급되지 않습니다. 결론적으로 LED LD3는 커져있고 이러한 경우에 외부 전원을 사용해야 합니다: 외장 전원 입력: VIN와 E5V


USB (U5V)에 의해서 전원이 공급될 때 JP5의 핀 1과 핀 2는 연결되어야 합니다. USB (U5V)에 의해서 전원이 공급될 때 보드의 최대 전류 소비에 따라 JP1을 설정할 수 있습니다. JP1 점퍼는 USB에 의해서 전원이 공급되고 U5V 상에 최대 전류 소비가 확장보드 혹은 Arduino 쉴드를 포함하여 100mA를 초과하지 않아야 합니다. 그러한 조건에서 100mA 이하의 전류가 PC로 요구되기 때문에 USB enumeration는 항상 성공할 것입니다. 가능한 JP1의 설정은 다음과 같습니다.



외장 전원 VIN과 E5V는 다음 표와 같습니다. 보드는 VIN 혹은 E5V에 의해서 전원이 공급되며 점퍼는 다음을 따라야 합니다:

      • JP5에 핀 2와 핀 3을 점퍼로 연결합니다.

      • JP1에 점퍼를 제거합니다.



VIN 혹은 E5V는 외부 전원으로 사용될 수 있습니다. 이 경우에 STM32 누클레오 보드와 확장 보드의 전류 소비는 USB 경우에 허용된 전류를 초과합니다. 이 조건에서 통신, 프로그래밍, 디버깅으로만 USB를 사용하는 것이 여전히 가능합니다. 그러나 VIN 혹은 E5V를 사용할 때 우선 보드에 전원을 공급하고 나서 USB 케이블을 PC에 연결하는 것은 필수입니다. 이런 식의 절차는 enumeration이 외장 전원 덕택에 이루어지는 것을 보장합니다.


다음의 절차를 따라야 합니다:


1. JP5의 핀 2와 핀 3를 점퍼로 연결합니다.

2. JP1이 제거되었는지 확인합니다.

3. 외장 전원을 VIN 혹은 E5V에 연결합니다.

4. 외장 전원의 전력은 7V< VIN < 12V to VIN, or 5V for E5V

5. LD3가 켜졌는지 확인합니다.

6. PC를 USB 커넥터 CN1에 연결합니다.


만약 이 순서를 따르지 않는다면 보드는 우선 VBUS에 공급된 후 VIN 혹은 E5V에 공급되어질 수 있어 다음의 위험에 직면할 수 있습니다:

1. 만일 300mA 이상이 보드에 의해서 요구되면 PC는 손상될 수 있고 혹은 전류원은 PC에 의해서 제한될 수 있습니다.

2. 300mA는 enumeration에서 요구되고 (JP1은 OFF이어야 하기 때문) 그래서 이 요구는 거절되고 enumeration은 PC가 충분한 전류를 공급할 수 없다면 성공하지 못하는 위험이 있습니다. 결론적으로 보드는 전원이 공급되지 않습니다 (LED LD3 OFF 상태를 유지합니다).


예를 들어 경우에 따라서 3.3V가 확장 보드에 의해서 공급될 수 있고 전원 입력으로 곧바로 +3.3V (CN6 pin 4 or CN7 pin 12 and pin 16)를 사용할 수 있습니다. STM32 누클레오 보드는 +3.3V로 전원이 공급될 때 ST-LINK는 전원이 공급되지 않고 그러므로 프로그래밍과 디버그 특성이 불가능합니다. 외장 전원 +3.3V는 다음과 같이 간략화 하였습니다.



보드로 +3.3V를 사용할 때 2가지 다른 설정이 가능합니다:

ST-LINK를 제거합니다 (PCB cut). or

• SB2 (3.3V regulator) and SB12 (NRST) are OFF.


USB, VIN or E5V으로 전원을 공급할 때 +5V (CN6 pin 5 or CN7 pin 18) Arduino 쉴드 혹은 확장 보드를 위한 전원으로서 사용될 수 있습니다. 이 경우에 최대 전류는 위의 관련 표를 따라야 합니다. +3.3V (CN6 pin 4 or CN7 pin 12 and 16)도 전원으로 또한 사용될 수 있습니다. 전류는 regulator U4 (500 mA max)의 최대 전류 용량으로 제한됩니다.


LED


3색 LED(green, orange, redLD1 (COM)은 ST-LINK 통신 상태에 대한 정보를 지시합니다. LD1 디폴트 색깔은 red이고 LD1은 다음 setup과 함께 PC와 ST-LINK/V2-1 사이에 통신이 진행 중임을 지시하기 위해서 green으로 변경됩니다.

• 느린 깜박임 Red/Off: USB 초기화 전

• 빠른 깜박임 Red/Off: PC와 ST-LINK/V2-1 (enumeration) 사이에 첫번째 올바른 통신 후에

• Red LED On: PC와 ST-LINK/V2-1 사이에 초기화가 완료되었을 때

• Green LED On: 성공적인 장치 통신 초기화 후에

• 깜박임 Red/Green: 장치와 통신 통신 중에

• Green On: 통신을 성공적으로 마침

• Orange On: 통신 실패

사용자 LD2: green LED는 STM32 타겟에 의존하는 STM32 I/O PA5 (pin 21) or PB13 (pin 34)에 대응하는 Arduino 신호 D13에 연결된 사용자 LED입니다:

• I/O 가 HIGH value, LED는 켜집니다

• I/O 가 LOW, LED는 커집니다

LD3 PWR: red LED는 STM32 파트가 전원이 공급되고 +5V가 가능하지를 지시합니다.



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

NUCLEO-F446RE 보드 설정(2)  (0) 2018.01.21
NUCLEO-F446RE 보드 레이아웃  (0) 2018.01.14
NUCLEO-F446RE 보드 스펙  (0) 2018.01.13
STM32F4 시리즈  (1) 2018.01.13
STM32 MCU 누클레오 보드  (0) 2018.01.12
Posted by Nature & Life


STM32 Nucleo-64 개발보드는 STM32F446RE MCU를 실장하며 Arduino와 ST morpho 연결이 가능합니다. 다음은 ST사의 보드 설명과 간단한 스펙 그리고 사용자 메뉴얼입니다.


NUCLEO-F446RE

Brief specification

사용자 메뉴얼


요약하면 STM32 누클레오 보드는 사용자에게 STM32 MCU를 이용하여 새로운 아이디어와 프로토타입을 만드는데 저렴하고 유연한 방법을 제공합니다. 성능과 전력 소모 그리고 스펙의 다양한 조합의 선택해서 말입니다. 호환되는 보드로서 SMPS는 Run 모드에서 전력 소모를 크게 줄여줍니다.


Arduino Uno V3 연결이 가능하고 ST morpho 헤더는 광범위한 특성화된 쉴드 보드의 선택과 함께 STM32 누클레오 오픈 개발 플랫폼의 기능의 손쉬운 확장을 가능하게 합니다.


STM32 누클레오 보드는 별도의 프로브를 필요로 하지 않는데 이는 ST-LINK/V2-1 디버거/프로그래머를 탑재하기 때문입니다.


STM32 누클레오 보드는 다양한 패키지 형태의 소프트웨어 예제와 함께 STM32의 이해가 쉬운 소프트웨어 HAL 라이브러리와 제공되며 게다가 http://mbed.org의 Arm Mbed 온라인 리소스에 곧바로 접근할 수 있습니다.


Key Features

    • STM32 microcontroller in LQFP64 package

    • External SMPS to generate Vcore logic supply (only available on '-P' suffixed boards)

    • 1 user LED shared with Arduino™

    • 1 user and 1 reset push-buttons

    • 32.768 kHz LSE crystal oscillator

    • Board expansion connectors:

      • Arduino™ Uno V3

      • ST morpho extension pin headers for full access to all STM32 I/Os

      • External SMPS experimentation dedicated connector (only available on '-P' suffixed boards)

    • Flexible power-supply options: ST-LINK USB VBUS or external sources

    • On-board ST-LINK/V2-1 debugger/programmer with USB re-enumeration capability. Three different interfaces supported on USB: mass storage, virtual COM port and debug port

    • Comprehensive free software libraries and examples available with the STM32Cube MCU Package

    • Support of a wide choice of Integrated Development Environments (IDEs) including IAR™ , Keil® , GCC-based IDEs, Arm® Mbed™

    • Arm® Mbed Enabled™ compliant (only for some Nucleo part numbers)


NUCLEO-F446RE


위 보드는 상단과 하단의 PCB로 구분되며 상단의 MCU는 ST-LINK/V2-1 디버거/프로그래머가 구현된 부분으로, 온보드(on-board 혹은 embedded) 디버거/프로그래머라 합니다. 이 PCB 상의 USB 포트에 사용자 개발환경(IDE)이 설치된 PC와 연결되고 각 사용자 개발환경에 따라서 USB 드라이버를 설치(www.st.com)해야 합니다.


P-NUCLEO-IHM001



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

NUCLEO-F446RE 보드 레이아웃  (0) 2018.01.14
NUCLEO-F446RE 보드 설정(1)  (0) 2018.01.13
STM32F4 시리즈  (1) 2018.01.13
STM32 MCU 누클레오 보드  (0) 2018.01.12
Discovery vs. Nucleo board  (1) 2018.01.11
Posted by Nature & Life


STM32F4 시리즈는 ARM사의 Cortex-M4 코어를 사용한 ST사의 고성능 MCU로 음성신호와 같은 디지털 신호 처리에 필수적인 DSC(Digital Signal Controller)와 부동소수점 연산기(Floating Point Unit; FPU)를 내장하고 있어 기존 MCU가 가지고 있었던 약점을 극복하고, 많은 주변 장치들을 탑재하여 다양한 용도에 손쉽게 사용할 수 있도록 만들어졌습니다.


ARM Cortex-M4 기반의 STM32F4 MCU 시리즈는 180MHz 주파수까지 동작하는 플레시 메모리로부터 실행되는 최대 225 DMIPS/608 CoreMark를 갖는 Cortex-M 기반의 MCU를 위한 산업계 최고의 벤치마크 점수에 도달이 가능하게 한 ST의 NVT 기술과 ART 가속기의 지렛대 역할을 해 왔습니다.


동적 전력 스케일링으로 전류소모는 STM32F410에서 최소 89 µA/MHz으로부터 STM32F439의 260 µA/MHz까지의 플레시 범위에서 동작합니다. 다음은 STM32F4 시리즈의 중요 스펙입니다:


  • Cortex-M4 코어.

    • 최대 동작 클럭 : 168MHz

    • 최대 210DMIPS(1.25DMIPS/MHz)

    • DSP instruction

    • 16bit FPU 내장

  • Memory

    • 512KB Flash

    • 192KB SRAM + 4KB Backup SRAM

    • MPU

    • DMA

  • Peripherals

    • 16 채널 12 bit ADC. 최대 2.4MSPS

    • 2 채널 12 bit DAC

    • 16/32 bit Timer

- Advanced Control Timer

- General Purpose Timer

- Capture/Compare/PWM

    • RTC

    • Watchdog Timer

    • 6 UART/USART

    • 3 SPI, 3 I2C, SDIO

    • USB Full-speed, High-speed

    • CAN. 최대 1Mbps

    • 10/100 Ethernet

    • True Random Number Generator


다음의 STM32F4 시리즈의 ST사의 일복요연한 구분입니다. 참고하시기 바랍니다:



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

NUCLEO-F446RE 보드 설정(1)  (0) 2018.01.13
NUCLEO-F446RE 보드 스펙  (0) 2018.01.13
STM32 MCU 누클레오 보드  (0) 2018.01.12
Discovery vs. Nucleo board  (1) 2018.01.11
STM32F4 시리즈의 소자 구별 방법  (0) 2018.01.03
Posted by Nature & Life


매우 저렴한 STM32 누클레오(Nucleo) 보드는 STM32 MCU를 사용하여 사용자의 새로운 아이디어를 시도하고 빠르게 프로토타입을 생성하게 합니다. 동일한 커넥터를 사용하여 STM32 누클레오 보드 시리즈는 다양한 특화된 애플리케이션 하드웨어 애드온(add-on)(Nucleo-64는 Arduino Uno rev3와 ST morpho 커넥터를 포함하고, Nucleo-32는 Arduino Nano 커넥터를 포함합니다) 방식으로 쉽게 확장할 수 있습니다.


Arduino UNO R3 and ST morpho connector


STM32 누클레오 보드는 ST-Link 디버거/프로그래머를 동일 보드에 구현하였기 때문에 별도이 프로브가 필요하지 않습니다.


다양한 소프트웨어 예제와 함께 이해가 쉬운 STM32 소프트웨어 HAL 라이브러리가 STM32 누클레오 보드와 함께 제공되며, IAR EWAEM, Keil MDK-ARM, mbed 그리고 GCC/LLVM-based IDE를 포함한 넓은 범위의 개발 환경에서 완벽하게 동작합니다.


모든 STM32 누클레오 사용자는 www.mbed.org에서 mbed 온라인 리소스(compiler, C/C++ SDK, and 개발자 커뮤니티)에 자유롭게 접근할 수 있으며 불과 수분 내에 완성된 애플리케이션의 제작이 가능합니다.


다음의 ST사에서 STM32 누클레오 보드의 구분입니다.



다음은 누클레오 보드의 주문 코드와 탑재된 STM32 MCU의 목록입니다.



다음은 누클레오 보드의 주문코드에 대한 의미를 나타낸 예제입니다.



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

NUCLEO-F446RE 보드 스펙  (0) 2018.01.13
STM32F4 시리즈  (1) 2018.01.13
Discovery vs. Nucleo board  (1) 2018.01.11
STM32F4 시리즈의 소자 구별 방법  (0) 2018.01.03
STM32F405xx 스펙 요약  (0) 2017.11.17
Posted by Nature & Life


영국의 ARM사가 주도하는 mbed는 ARM-cortex기반의 MCU를 사용하여 IoT제품이나 여러 전자제품의 프로토타이핑(prototyping)을 쉽게 제작하고 Cloud 서비스 테스트까지 할수 있는 플랫폼으로, Arduino와 같은 해에 시작하고 2009년에 베타서비스를 시작했지만 2013년에야 mbed를 오픈하기로 결정하고 주변 디바이스, API, 기판 설계 데이터, 펌웨어 등을 공개하면서 주목받기 시작하였습니다.



사실 기존에는 Arduino라는 가볍고 쉬운 AVR이 존재했지만 ARM 계열에서는 Arduino Due 제외하고는 가볍고 쉬운 AVR은 없었고 대부분 전문 컴파일러를 사용하여 제작하였기 때문에 전문가가 아니면 사용하기가 어려웠었습니다. 그렇기 때문에 ARM에서도 Arduino와 같이 접근성이 좋고 빠르게 개발이 가능하도록 만든 소프트웨어가 바로 "mbed"라는 것입니다. 아직까지 국내에서는 Arduino보다 인지도가 적은 편이지만 Ardunio보다 더 좋은 성능으로 IoT개발 보드 시장 영역을 넓혀가고 있다는 것입니다.


참고로 ARM사의 cortex-M4를 MCU의 경우에는 IoT에서 가장 중요한 화두인 전력문제에 있어서 저전력기술을 활용함으로써, 100~180MHz로 동작하는 동안 매우 낮은 동적 전력 사용량을 제공하며, 경쟁사 유사제품에 비해 7배 낮은 정적 소비 전력을 보여줍니다. 


웹브라우저를 통한 온라인 컴파일 및 소스 버전 관리 기능(Web-IDE)을 제공하여 어떤 OS에서든 웹브라우저에서 온라인으로 컴파일이 가능하고, 프로그램 업로드는 별도 장비없이 USB에 연결만 하면 가능하도록 되어 있다는 것입니다. 게다가 커뮤니티를 통한 라이브러리 공개 및 방대한 개인 위키 페이지 제공으로 협업에 유익하고 무엇보다, 모든 사용자가 기본적으로 같은 하드웨어를 이용하고 있기에 확장 보드가 아닌 이상 바로 적용 가능하다는 것입니다.



mbed의 장점으로는 기본적으로 MCU의 성능이 Arduino보다 좋기 때문에 고성능으로 더 높은 사양대를 커버할 수 있지만, Ardunio에 비해 상대적으로 사용자가 적다는 단점이 있습니다. 온라인 컴파일러에서 브레이크 포인터를 사용하여 스텝별 실행 및 내부 레지스터, 변수 등의 디버깅은 불가능하고 프로그램 업로드 방식에 있어서도 파일을 추출하고 이 파일을 다시 보드에 업로드 시켜야하는 상대적으로 Arduino에 비해 귀찮은 과정도 단점으로 여겨질 수 있습니다.


Arduino와 mbed 차이점으로, 모든 Arduino는 Atmel MCU 사용하여 작은 메모리와 제한된 기능을 가지고 있으며 느리다는 것입니다. 대부분의 Arduino 보드들은 ATmega328이고, Mega보드는 ATmega2560이며, 새로운 Due보드는 ARM Cortex-M3를 사용한다. 반면에 mbed 플랫폼은 더 빠르고, 메모리도 크고, 더 많은 기능을 가진 ARM Cortex MCU를 사용합니다. 사실 공식적인 mbed 플랫폼들은 Cortex-M0, M3와 M4를 기반으로 만들어진다는 것입니다.


프로토타입을 만드는데는 둘 다 우수하지만 프로토타입을 만든 후에 생산을 하고자 할 때는 mbed가 더 scalable한 플랫폼이기 때문에 더 낮고, 아주 간단한 응용제품을 제외하고는 ARM MCU들이 같거나 더 싼 가격에 더 낮은 전력 소모를 하며, 더 많은 기능을 가지고 있기 때문에 그 입지가 점점 좁아지고 있다는 것입니다.



Posted by Nature & Life


디스커버리 vs. 누클레오 보드


STM32F103과 같이 인기있는 MCU 문제 중의 하나는 현존해는 매우 다양한 보드가 있다는 것입니다. 어떤 것을 선택할지, 어떤 것을 고르는 것이 올바른지 선택이 쉽지 않다는 것입니다.


Discovery

다년간 STM은 자사의 여러 MCU와 함게 매우 저렴한 개발보드 시리즈를 제공하였습니다. 가장 저렴한 것은 아마도 가장 오래된 'F05'일 것입니다:


32F411EDISCOVERY


이들 보드의 장점은 USB 인터페이스와 함께 두번째 MCU가 장착(위 그림에서 맨 상단에 위치한 MCU)되어 있다는 것이고 이는 JTAG 프로그래머로써 동작한다는 것입니다. 이들 "ST-Link" 인터페이스는 STM 자사의 원도우 툴에서 사용될 수 있으며 또한 문의할 수 있는 GitHub의 texane/stlink repository이 존재한다는 것입니다.


각 ST-Link는 업로더, 씨리얼 브릿지 그리고 하드웨어 디버거, 이들 "DISCO" 그리고 "DISCOVERY" 보드를 셋업하는 방법이 될 수 있습니다. 게다가 이 ST-Link는 다른 MCU에도 사용할 수 있습니다. 일단 PCB에 연결되고 나면 디버깅이 가능하다는 것입니다.


STM에서 생산된 각 칩 패밀리에 대한 보드들이 존재합니다. 즉, L0's, F3's, F7's, 등등.


라이센스는 이들 보드를 상업적인 제품이나 이를 다시 파는 행위가 금지합니다. 하지만 개인적 취미로의 사용에 대해서는 상관이 없다는 것입니다.


Nucleo

디스커버리 보드 후에 다음 세대로서 STM은 일부의 매우 훌륭한 다음 특성을 갖춘 "Nucleo" 보드의 범주를 출시하였습니다:


    • 여전히 온보드 ST-Link가 장착되었지만 새로운 (호환되는) "V2.1"타입입니다.

    • 펌웨어는 또한 USB 스틱으로서 연결된 장치쪽으로 당겨 업로드 시킬 수 있습니다.

    • 모든 Nucleo 보드는 같은 모양, layout 그리고 dimensions을 갖습니다.

    • 모든 보드는 Arduino 쉴드 호환 헤더를 포함합니다.

    • 모든 신호은 모든 보드상에 같은 장소에 위치한 핀에서 가능합니다.

    • 많은 납땜을 위한 점퍼가 핀 특성을 조정하기 위해서 존재합니다(일부는 단선, 일부는 단락).


디스커버리 보드의 일부에서와 같이 여기에도 약간 불편함이 있습니다:


    • 모든 보드들은 크리스탈(crystal)을 실장하지 않습니다, 따라서 내부 8MHz RC 까지 동작시킬 수 있습니다.

    • 그러나 적어도 64MHz까지 끌어올리기 위해서 PLL을 사용할 수 있습니다. 그리고 크리스탈은 추가할 수 있습니다.


Nucleo 보드의 가장 인상깊은 low-level 특성은 MCU에 대해서 같은 LQFP-64 패키지를 사용한다는 것입니다 그리고 그러므로 하드웨어 칩 레벨에서 조차 이들 변화의 일부는 거의 100% 호환된다는 것입니다:


NUCLEO-F401RE


이들 Nucleo 보드는 디스커버리 보드처럼 STM에서 동일한 주의사항을 갖습니다.


하나의 훌륭한 특성은 거기에는 매우 다양한 MCU가 존재하고 모두 동일하게 동작하며 같은 물리적 layout을 갖고 그들 모두 Arduino 쉴드를 지원한다는 것입니다. 이것은 F103RB와 같은 하나의 Nucleo 보드와 함께 시작할 수 있다는 것을 의미합니다. 그리고 만약 가능하지 않거나 충분히 빠르지 않거나 혹은 올바른 특성을 갖지 않는다면 사용자는 쉽게 다른 모델로 교체할 수 있다는 것입니다.



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

STM32F4 시리즈  (1) 2018.01.13
STM32 MCU 누클레오 보드  (0) 2018.01.12
STM32F4 시리즈의 소자 구별 방법  (0) 2018.01.03
STM32F405xx 스펙 요약  (0) 2017.11.17
AVR vs. STM32 comparison for Drone  (0) 2015.12.04
Posted by Nature & Life


STM32F4 시리즈의 소자 구별 방법(Part numbering)입니다. 참고하세요!





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

STM32 MCU 누클레오 보드  (0) 2018.01.12
Discovery vs. Nucleo board  (1) 2018.01.11
STM32F405xx 스펙 요약  (0) 2017.11.17
AVR vs. STM32 comparison for Drone  (0) 2015.12.04
왜 STM32가 유리한가?  (0) 2015.12.02
Posted by Nature & Life
Embedded Programming/ChibiOS2017. 12. 19. 19:29


http://www.playembedded.org/blog/en/2017/08/24/demos-chibios-stm32/

http://www.playembedded.org/blog/en/2016/10/29/explanation-multithreading-chibios/


Cortex-M4 MCU(ST32F4)를 환경에서 Real Time OS(RTOS)인 ChibiOS를 이용한 임베디드(embedded) 시스템의 코딩의 예제입니다. 참고하시기 바랍니다.

 

주요 헤더 파일입니다.

chconf.h

Kernel에 관련된 세팅이 포함되며 예를 들어 시스템 Timer와 Kernel 파라미터, 디버깅에 연관된 스위치 등입니다.

/*===========================================================================*/
/**
* @name Debug options
* @{
*/
/*===========================================================================*/
 
/**
* @brief   Debug option, kernel statistics.
*
* @note    The default is @p FALSE.
*/
#define CH_DBG_STATISTICS                   FALSE
 
/**
* @brief   Debug option, system state check.
* @details If enabled the correct call protocol for system APIs is checked
*          at runtime.
*
* @note    The default is @p FALSE.
*/
#define CH_DBG_SYSTEM_STATE_CHECK           FALSE
 
/**
* @brief   Debug option, parameters checks.
* @details If enabled then the checks on the API functions input
*          parameters are activated.
*
* @note    The default is @p FALSE.
*/
#define CH_DBG_ENABLE_CHECKS                FALSE
 
/**
* @brief   Debug option, consistency checks.
* @details If enabled then all the assertions in the kernel code are
*          activated. This includes consistency checks inside the kernel,
*          runtime anomalies and port-defined checks.
*
* @note    The default is @p FALSE.
*/
#define CH_DBG_ENABLE_ASSERTS               FALSE
 
/**
* @brief   Debug option, trace buffer.
* @details If enabled then the trace buffer is activated.
*
* @note    The default is @p CH_DBG_TRACE_MASK_DISABLED.
*/
#define CH_DBG_TRACE_MASK                   CH_DBG_TRACE_MASK_DISABLED
 
/**
* @brief   Trace buffer entries.
* @note    The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
*          different from @p CH_DBG_TRACE_MASK_DISABLED.
*/
#define CH_DBG_TRACE_BUFFER_SIZE            128
 
/**
* @brief   Debug option, stack checks.
* @details If enabled then a runtime stack check is performed.
*
* @note    The default is @p FALSE.
* @note    The stack check is performed in a architecture/port dependent way.
*          It may not be implemented or some ports.
* @note    The default failure mode is to halt the system with the global
*          @p panic_msg variable set to @p NULL.
*/
#define CH_DBG_ENABLE_STACK_CHECK           FALSE
 
/**
* @brief   Debug option, stacks initialization.
* @details If enabled then the threads working area is filled with a byte
*          value when a thread is created. This can be useful for the
*          runtime measurement of the used stack.
*
* @note    The default is @p FALSE.
*/
#define CH_DBG_FILL_THREADS                 FALSE
 
/**
* @brief   Debug option, threads profiling.
* @details If enabled then a field is added to the @p thread_t structure that
*          counts the system ticks occurred while executing the thread.
*
* @note    The default is @p FALSE.
* @note    This debug option is not currently compatible with the
*          tickless mode.
*/
#define CH_DBG_THREADS_PROFILING            FALSE
 

/** @} */


halconf.h

ChibiOS/HAL 드라이버에 관련된 특성을 포함합니다. 예를 들어, PAL, CAN, ADC, DAC, PWM, Serial 드라이버 등이 해당됩니다. 참고로 사용하지 않는 드라이버는 disable 시켜야 합니다.


/**
* @brief   Enables the PAL subsystem.
*/
#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
#define HAL_USE_PAL                 TRUE
#endif
 
/**
* @brief   Enables the ADC subsystem.
*/
#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
#define HAL_USE_ADC                 FALSE
#endif
 
/**
* @brief   Enables the CAN subsystem.
*/
#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
#define HAL_USE_CAN                 TRUE
#endif
 
/**
* @brief   Enables the DAC subsystem.
*/
#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
#define HAL_USE_DAC                 FALSE

#endif


mcuconf.h

MCU에 관련된 모든 설정을 포함합니다. 따라서 MCU에 따라 다릅니다. Clock 트리, DMA, IRQ 우선순위 등이 예입니다.


ChibiOS의 가장 중요한 특성 중의 하나는 멀티스레딩(multi-threading)입니다. 이는 Kernel이 한가지 이상의 스레드를 독립적으로 나란히 동시에 실행하는 것입니다. 스레드는 실제의 함수이고 시작되었을 때 우선순위 레벨(priority level)과 working area에 연관됩니다. Working area는 스레드에 할당된 메모리의 부분이고 우선 순위는 상대적인 숫자로 나타냅니다.


모든 스레드는 그 루프 내에 sleep과 suspending 함수를 가져야 합니다. 이런 방식으로 CPU의 소유권은 여러 스레드 사이에서 스위치 되고 스케쥴은 진행될 수 있습니다. ChibiOS는 다른 sleep 함수를 제공합니다. 다음 함수는 XXX [ms] 시간 동안 스레드를 suspending 합니다. 이 함수는 ChibiOS 이하의 os\rt\include\chthreads.h에 선언되어 있습니다.


chThdSleepMilliseconds(<xxx>);


Makefile

Embitz와 같은 IDE 환경을 사용시 일일이 지정해야 하고 IDE 툴마다 다를 수 있지만, 전통적인 Unix 환경에서 Makefile을 이용한 방법이 일목요연하고 유지관리가 용이하기 때문에 Makefile을 이용한 빌드 기준으로 설명합니다.


ChibiOS를 사용하기 위해서는 ChibiOS가 설치된 상대 경로의 지정이 필요합니다. 

# Imported source files and paths
PROJECT = build
CHIBIOS = ../../..
MCU = cortex-m4
TRGT = arm-none-eabi-


참고로 'build'는 프로젝트 이름이며 MCU는 cortex-m4이고 TRGT는 GNU Toolchain을 사용함을 의미합니다.

main.c

static THD_WORKING_AREA(waThread1, 128);
static THD_FUNCTION(Thread1, arg) {
 
  (void)arg;
  chRegSetThreadName("Thread1");
  while (true) {
    palTogglePad(GPIOA, GPIOA_LED_GREEN);
    chThdSleepMilliseconds(200);
  }
}
 
int main(void) {
  halInit();
  chSysInit();
 
  chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO + 1, Thread1, NULL);
  while (true) {
    palTogglePad(GPIOA, GPIOA_LED_RED);
    chThdSleepMilliseconds(375);
  }

}


위의 예제에서 128byte의 크기를 갖는 waThread1라는 이름의 working area를 선언하고 Thread1이라는 함수를 선언합니다. 위의 두 라인은 단지 메모리와 함수를 선언한 것이며 main() 함수에서 thread 생성을 시켜야 사용할 수 있습니다. THE_FUNCTION의 arg는 함수 내부 코드로 전달되는 인자입니다.


chRegSetThreadName("blinker");


위 함수는 루프 이전에 단 한번 실행됩니다. 이 함수는 ChibiOS 이하의 os\rt\include\chregistry.h에 선언되어 있습니다.



main()함수 내의 2가지 함수가 실행되는데 이는 시스템 초기화를 실행하는 것으로, hallnit()는 ChibiOS/HAL과 HAL 서브 시스템을 초기화 하는 것이며 chSysInit()는 ChibiOS/RT의 API와 Kernel을 초기화합니다. 이후에는 main() 함수의 스레드와 다른 모든 스레드가 실행될 준비가 되지 않았을 때 실행되는 idle 스레드가 생성됩니다. 또한 이들 초기화 이전에 어떤 API의 실행은 하지 말아야 합니다. ChibiOS/RT 그리고 ChibiOS/HAL에 근거한 모든 프로그램은 위와 동일한 방식으로 시작합니다. 여기서 halInit() 함수는 ChibiOS 이하의 os\hal\include\hal.h에 그리고 chSysInit() 함수는 ChibiOS 이하의 os\rt\include\chsys.h에 선언되어 있습니다.


palTogglePad() 함수는 ChibiOS 이하의 os\hal\include\hal_pal.h에 선언되어 있으며, 첫번째 인자는 포트이고 두번째 인자는 그 포트 내에서의 패드 숫자입니다. 따라서 이 함수는 해당 포트의 해당 패드에 그 논리적인 상태 즉, LED를 토글(toggle)합니다.



chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO + 1, Thread1, NULL);


위의 스레드의 생성 함수는 5개의 인자가 필요하며 첫번째는 working area의 포인트이며 마지막 인자는 Thread1 함수로 전달될 파라미터로 이 경우에는 아무것도 보내지 않습니다. 이 함수는 ChibiOS 이하의 os\rt\include\chthreads.h에 선언되어 있습니다.


이 경우에 3개의 스레드인, Thead1, main, idle가 있으며 즉, Kernel은 3가지 스레드를 관리게 되는데 개념적인 timing 플로우는 다음과 같습니다.



위 그림에서 스레드는 y축 상에 우선순위에 따라 실행되고 x축은 시간이 됩니다. chSysInit()이 실행될 때 main() 함수는 main이라는 스레드가 되고 Thread1의 생성될 때까지 실행됩니다. Thread1이 생성된 후에는 main와 Thread1이 준비된 상태가 됩니다. 


ChibiOS의 우선순위는 정수이고 LOWPRIO와 HIGHPRIO의 범위를 가지며 main 스레드는 NORMALPRIO의 우선 순위를 가지며 전체 범위의 중간 값을 가집니다. Thread1과 main() 함수 내에 chThdSleepMilliseconds() 함수는 시간을 지연시키지만 그 동안 CPU의 소유권을 다음의 우선순위 스레드에 넘기게 됩니다.



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

ChibiOS/RT 설치  (1) 2018.02.25
ChibiOS/RT의 특징  (0) 2018.02.25
Posted by Nature & Life


임베디드(Embedded)나 펌웨어 궁극적으로는 둘다 작은 시스템 내에 하드웨어 제어를 위해 EEPROM 등에 기록되는 일종의 프로그램입니다. 거의 같다라고 봐도 무방합니다. 하지만 근래 들어서 시스템의 복잡화로 인해 기존의 펌웨어를 제작할 때 사용되는 프로그래밍 방식 '슈퍼루프 방식'은 프로그래머의 체계적인 프로그램 설계와 짜임세 있는 구성이 프로그래머를 피곤하게 할 만큼 복잡하게 되었습니다.


이에 대한 대안으로서 나온 것이 RTOS(Real Time OS)라는 것인데 ROM에 기록되는 펌웨어 중에서도 특히 이런 RTOS를 이용한 것을 임베디드(내장형 시스템)라 칭하는 경우가 많습니다. RTOS를 사용하게 되면 ROM에 기록되어야 할 펌웨어의 크기가 커지고, 시스템 오버해드라 하여 불필요한 부하를 가져다 주게 됩니다. 하지만, 펌웨어 개발의 융통성과, 안정성, 정확성을 고려할 때 펌웨어의 크기나 시스템 오버해드는 충분이 무시할 수 있는 요소가 된다는 것입니다.


대표적인 RTOS인 ChibiOS


RTOS를 이용한 임베디드 시스템은 꼭 ARM같이 거대한 프로세서에만 사용되는 것은 아닙니다. 상당히 유명한 uCOS-II경우 구식 8051부터 Intel 32bit까지 다양한 플랫폼을 지원합니다. 8051계열에도 얼마든지 임베디드 시스템을 펌웨어로 올릴 수 있습니다.


펌웨어는 일반적으로 롬(ROM)에 저장된 하드웨어를 제어하는 마이크로 프로그램을 의미합니다. 프로그램이라는 관점에서는 소프트웨어와 동일하지만 하드웨어와 밀접한 관계를 가지고 있다는 점에서 일반 응용 소프트웨어와 구분되어 펌웨어는 소프트웨어와 하드웨어의 특성을 모두 가지고 있다고 할 수 있습니다.


예를 들어 어떤 기능을 발휘하는 하드웨어를 만든다고 할 때, 그것을 제어하는 모든 회로를 하드웨어로만 만들면, 그 구조도 대단히 복잡해지고 심지어는 논리적인 표현을 하기가 어려운 부분도 발생합니다. 이런 경우 상당부분을 소프트웨어로 대체하되 그 소프트웨어가 저장된 기억장치를 하드웨어의 제어회로 중의 중심부분으로 구성하면, 매우 간단하면서도 적은 비용으로 문제를 해결할 수 있게 됩니다. 이렇게 만든 하드웨어적인 소프트웨어를 펌웨어라 합니다.


이렇게 할 경우 하드웨어의 입장에서는 별도의 논리회로를 가진 것이 아니기 때문에 소프트웨어적인 특성을 가지고 있지만, 소프트웨어 입장에서는 마이크로 프로그램이 하드웨어를 제어하기 때문에 하드웨어적인 특성을 가진다고 설명할 수 있습니다.


소프트웨어의 기능을 펌웨어로 변경할 수 있으면 속도가 현저하게 증대되어 고속 처리가 필요한 프로그램은 펌웨어로 만들어 사용하기도 합니다. 또한 하드웨어의 기능을 펌웨어로 변경하면 속도는 느려지지만, 그 기능을 위한 논리회로를 설계하여 사용하는 것보다 저렴하고, 편리하게 구현하여 사용할 수 있는 장점을 가지기도 한다는 것입니다.




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

왜 RTOS가 필요한가?  (0) 2018.01.31
Posted by Nature & Life


STM32F405xx과 STM32F407xx의 스펙 요약입니다.


여기서 STM32F407xx는 STM32F405xx과 스펙이 동일하지만, Ethernet 그리고 카메라 인터페이스 기능이 더 추가된 것이며 'xx'부분은 여기에 소개된 것처럼 순서대로 핀 개수, 플레시 메모리 사이즈, 패키지 타입, 온도 범위 그리고 기타 옵션을 나타낸 것입니다. 더 자세한 정보를 위해서 다음 데이터시트를 참조하시기 바랍니다.


http://www.mouser.com/ds/2/389/stm32f405rg-956214.pdf


Features

• Core: ARM 32-bit Cortex-M4 CPU with FPU, Adaptive real-time accelerator (ART Accelerator) allowing 0-wait state execution from Flash memory, frequency up to 168 MHz, memory protection unit, 210 DMIPS/1.25 DMIPS/MHz (Dhrystone 2.1), and DSP instructions

• Memories

• Up to 1 Mbyte of Flash memory

• Up to 192+4 Kbytes of SRAM including 64-Kbyte of CCM (core coupled memory) data RAM

• Flexible static memory controller supporting Compact Flash, SRAM, PSRAM, NOR and NAND memories

• LCD parallel interface, 8080/6800 modes

• Clock, reset and supply management

– 1.8 V to 3.6 V application supply and I/Os

– POR, PDR, PVD and BOR

– 4-to-26 MHz crystal oscillator

– Internal 16 MHz factory-trimmed RC (1% accuracy)

– 32 kHz oscillator for RTC with calibration

– Internal 32 kHz RC with calibration

• Low-power operation

– Sleep, Stop and Standby modes

– VBAT supply for RTC, 20×32 bit backup registers + optional 4 KB backup SRAM

• 3×12-bit, 2.4 MSPS A/D converters: up to 24 channels and 7.2 MSPS in triple interleaved mode

• 2×12-bit D/A converters

• General-purpose DMA: 16-stream DMA controller with FIFOs and burst support

• Up to 17 timers: up to twelve 16-bit and two 32-bit timers up to 168 MHz, each with up to 4 IC/OC/PWM or pulse counter and quadrature(incremental) encoder input

• Debug mode

– Serial wire debug (SWD) & JTAG interfaces

– Cortex-M4 Embedded Trace Macrocell

• Up to 140 I/O ports with interrupt capability

– Up to 136 fast I/Os up to 84 MHz

– Up to 138 5 V-tolerant I/Os

• Up to 15 communication interfaces

– Up to 3 × I2C interfaces (SMBus/PMBus)

– Up to 4 USARTs/2 UARTs (10.5 Mbit/s, ISO7816 interface, LIN, IrDA, modem control)

– Up to 3 SPIs (42 Mbits/s), 2 with muxed full-duplex I2S to achieve audio class accuracy via internal audio PLL or external clock

– 2 × CAN interfaces (2.0B Active)

– SDIO interface

• Advanced connectivity

– USB 2.0 full-speed device/host/OTG controller with on-chip PHY

– USB 2.0 high-speed/full-speed device/host/OTG controller with dedicated DMA, on-chip full-speed PHY and ULPI

– 10/100 Ethernet MAC with dedicated DMA: supports IEEE 1588v2 hardware, MII/RMII

• 8- to 14-bit parallel camera interface up to 54 Mbytes/s

• True random number generator

• CRC calculation unit

• 96-bit unique ID

• RTC: subsecond accuracy, hardware calendar


다음은 STM32F4 시리즈 Cortex-M4 프로그래밍 매뉴얼입니다.

STM32F4 Series Cortex®-M4 programming manual


※ Cortex-M4 = Cortex-M3 + FPU + DSC + 성능 향상

  • FPU(Floating Point Unit)를 내장하지 않을 경우, 라이브러리를 불러와 소프트웨어적으로 emulation 하게 됩니다. 이 경우에 대략 하드웨어보다 8배의 연산 시간의 소요되며, 이를 내장하지 않은 Cortex-M3에서 처럼 고정 소수점(fixed point)을 대신 사용하는 경우 2배의 연산 시간이 요구되지만 사용이 매우 까다롭다는 것입니다. 사용자가 특별히 부동 소수점 연산기(FPU)를 직접 다룰 필요는 없습니다.

  • DSC(Digital Signal Controller)는 디지털 필터인 FIR, IIR 필터 구현이 용이하고, SIMD 명령어의 구현으로 이는 '하나의 명령어로 여러개의 데이터를 처리'하는 것으로, Open GL과 같은 그래픽 데이터 처리(벡터 연산), 멀티미디어 코덱 등에서 성능이 향상됩니다.



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

STM32 MCU 누클레오 보드  (0) 2018.01.12
Discovery vs. Nucleo board  (1) 2018.01.11
STM32F4 시리즈의 소자 구별 방법  (0) 2018.01.03
AVR vs. STM32 comparison for Drone  (0) 2015.12.04
왜 STM32가 유리한가?  (0) 2015.12.02
Posted by Nature & Life