지원 및 커뮤니티

교육 및 행사 문의
교육 및 행사 관련하여 이메일 또는 전화로 문의 주시면, 답변 드리겠습니다.
email: stm32training@e4ds.com / 전화: 02-866-9912

 

기술지원
Online Support 한글 지원 - st.com의 online support system으로 한글 작성시 ST Korea의 FAE가 시스템을 통해 답변드립니다.
ST Community ST 어플리케이션 엔지니어팀이 검토한 유용한 아이디어와 정보로 가특찬 ST 포럼페이지 입니다.
좌측 "ST Community" URL버튼을 클릭해주세요.

FAQ

행사관련 FAQ

A. 접수는 온라인으로만 가능하며 현장접수를 통해서는 참가 할 수 없습니다.

A. 등록 확인 및 수정은 신청조회 페이지에서 가능합니다.

A. 위 Q&A에 질문을 올리면, 이메일을 통해 연락 드리겠습니다.

ST 제품관련 FAQ

  1. 사용자가 구현하고자 하는 애플리케이션에 적합한 MCU를 선택합니다. ST MCU Finder 앱(안드로이드/IOS 다운로드)을 통해서 적합한 MCU를 검색합니다.
  2. Discovery, Evaluation, Nucleo 등 하드웨어 구성을 위한 레퍼런스 보드를 선택합니다.
    - Discovery 보드: 사용자 애플리케이션에 필요한 테스트에 최적화된 보드 
    - Evaluation 보드: 각각의 MCU가 지원하는 모든 peripheral 테스트가 가능한 보드
    - Nucleo 보드: Arduino connectivity 와 ST morpho header가 탑재되어 기능 확장이 손쉬운 보드
  3. STM32CubeMX를 통해서 MCU의 초기화 C코드를 생성합니다.
  4. 컴파일러로는 무료 GCC 기반의 AC6과 유료로 서비스 되는 IAR, Keil 등이 있습니다. 참고로, Keil은Cortex-M0 / Cortex-M0+ 기반의 STM32L0, STM32F0에 대해서 무료 라이센스를 제공하고 있습니다.
  5. 마지막으로 MCU를 read / write / erase 할 수 있는 ST-Utility tool 과 H/W debugger인 ST-Link를 활용합니다.

A. STM32CubeMX는 초기화 C코드를 생성할 수 있는 툴입니다. 사용자 애플리케이션에 따라 pin 할당, clock 설정, peripheral 설정 등을 그래픽 기반의 인터페이스에서 구성할 수 있으며, 구성된 MCU 설정을 기반으로 초기화 코드를 생성할 수 있습니다. 보다 자세한 사항은 www.st.com/stm32cubemx 에서 확인 하실 수 있습니다.

A. ADC 채널들을 conversion하기 위한 절차(sequence)의 차이가 있습니다. Regular mode는 ADC의 채널들을 일정한 순서에 따라 conversion하고 Injected mode는 software나 외부 event에 의해 trigger되어 conversion하게 됩니다. injected conversion은 regular conversion보다 우선 순위가 높습니다. ADC 관련 보다 자세한 사항은 ST 홈페이지의 Application Note (AN3116) 문서에서 확인 할 수 있습니다.

A. 기본 설정을 조정함으로써 손쉽게 해결할 수 있습니다. STM32CubeMX 을 사용하여 코드를 생성할 때 코드 생성 창의 기본 설정은 Stack size가 0x200, heap size는 0x400으로 되어 있습니다. STM32CubeMX의 Middleware stack을 사용하여 애플리케이션을 구현 할때는 코드 생성 창에서 이 stack 과 heap size를 증가시켜 코드를 생성해야 정상 동작이 가능합니다.

A. SPI는 내부에 자체 CRC 생성 / 검사 기능이 있습니다. CRC 계산식은 전송 데이터 길이에 맞게 CRC-8 또는 CRC-16 을 사용할 수 있습니다. CRC-8 / CRC-16 의 polynomial 값이 고정인 제품도 있지만 비교적 최신 시리즈 (STM32F4 시리즈 등)는 사용자가 임의의 polynomial 계산식으로 설정할 수 있습니다. 이를 통해 SPI CRC polynomial register (SPI_CRCPR) 를 설정합니다. STM32CubeMX 의 Pinout 탭에서 왼쪽 창에 있는 SPI 를 선택하고 모드를 설정합니다. 이어서 Configuration 창의 Parameter Settings 탭에서 Data size 를 설정하고 Advanced Parameters 필드에 있는 CRC Calculaition 을 Enable 합니다. 그러면 CRC Polynomial 항목이 새로 나타나고 기본값은 X1 + X3 으로 표시되며 원하는 계산식으로 변경할 수 있습니다. 예를 들어 CRC-8 (X8 + X2 + X + 1) 로 변경하려는 경우, X2 + X1 + X0 으로 수정해 줍니다. 이제 코드를 생성하면 "hspiy.Init.CRCPolynomial = xxx;"(y는 SPI 번호, xxx는 생성식의 십진 표시) 라는 코드가 생성되는것을 볼 수 있습니다.

A. STM32 시리즈는 온도 센서를 내장하고 있습니다. MCU 실리콘 온도를 전압으로 변환해서 내부 ADC로 측정하는 방식으로, 마이컴 내부의 온도를 측정하는 용도입니다. MCU의 내부 온도와 주변 온도는 여러가지 요인으로 인해 1대1로 대응되지 않기 때문에 주변 온도의 측정용으로 적합하지 않습니다. 따라서 MCU 주변 온도 측정 용도로 사용을 권장하지 않습니다. 대신 MCU 의 동작 온도를 확인하는 용도로 사용할 수 있습니다. 온도 센서의 Linearity은 좋은 편이지만 각각의 제품 마다 offset 편차가 크게 다를수 있습니다. 공장 출하시 기본 온도에서 측정한 값이 레지스터에 저장되어 있으며, 그 값을 기준으로 사용자가 실측치에서 offset 을 보정 할수 있습니다. 예를 들어, STM32F091의 경우 제품 출하시에 30 ℃ 와 110 ℃ 일 때의 ADC 측정값을 TS_CAL1 과 TS_CAL2 레지스터에 저장합니다. 사용자는 이 값을 참조하여 실제 ADC 측정치와 온도의 상관 관계를 계산 할 수 있습니다. 구체적인 보정 방법은 애플리케이션 노트 AN3964 를 참조할수 있습니다.

A. SWPMI는 MCU에 스마트 카드를 연결하는데 사용하는 인터페이스입니다. ETSI TS 102 613 표준에서 정의하는 마스터 모드 single-wire 프로토콜을 준수하여 full-duplex single-wire 통신 인터페이스를 가능하게 합니다. 스마트 카드 C6 단자에서 가능한 single-wire full-duplex 통신속도는 100 Kbit/s 에서 2 Mbit/s 까지입니다. SWPMI 를 사용하면 2 Mbit/s 까지 full-duplex 통신 가능한 single-wire 를 간단하게 스마트 카드에 연결할 수 있습니다. STM32는 Class B (VDD = 3 V) 와 Class C (VDD = 1.8 V) 의 두 동작 전압을 모두 지원합니다. 사용자는 둘중 하나를 선택해야 합니다. STM32 내부에는 SWPMI 전용 1.8V 레귤레이터를 포함하고 있기 때문에, Class B (VDD = 3 V) 를 선택해도 SWP 핀의 전압은 항상 1.8V 로 유지됩니다. 기능 사양에 대한 자세한 내용은 레퍼런스 매뉴얼과 데이터 시트를 참조할 수 있습니다.

A. ADC 는 핀으로 노출된 외부 입력 채널 뿐만 아니라 내부의 입력 채널도 있습니다. 내부 입력 채널 중 하나인 Vrefint 전압은, ADC 측정 검사 또는 조정에 사용하기 위해 내장되어 있으며, 대략 1.2V로 정확한 값은 데이터 시트에서 참조하실 수 있습니다. Vrefint을 사용하여 VDDA (Vref+) 의 전압을 상대적으로 계산 할 수 있습니다. Vrefint 의 1.2V 는 bandgap 으로 생성되었기 때문에 VDDA (Vref+) 전압에 영향을 받지 않고 항상 1.2V 를 유지합니다. 만약 VDDA (Vref+) 의 전압이 감소했을때, 이 1.2V (Vrefint) 를 측정해 보면 보통때보다 큰 변환 값이 나오게 됩니다. 그 변환 값과 1.2V 의 비율을 계산해서 VDDA (Vref+) 의 전압을 계산할 수 있습니다.

A. STM32L052 등의 제품은 USB 용으로 self calibration 기능이 있는 48MHz 클럭 (HSI48) 을 내장하고 있습니다. HSI48 클럭은 내부의 Clock Recovery System (CRS) 기능을 통해서 self calibration 된 고정밀도 클럭을 내부 USB peripheral 에 제공 합니다. 물론 CRS 로 self calibration 을 하기 위해서는 USB host 가 보내는 SOF 신호 또는 LSE 외부 클럭과 같은 기준신호가 연결되어 있어야 합니다. 한편, HSI48 클럭은 MCO 출력핀을 통해서48MHz(또는 분주된 클럭)을 출력할 수 있습니다. 이 클럭을 외부 배선으로 STM32 의 OSC_IN 핀으로 다시 입력하여 시스템 클럭으로 사용할 수 있습니다. 하지만 HSI48 과 HSE_BYPASS / PLL 설정을 동시에 수행하게 되면 오류가 발생하기 때문에, 먼저 HSI48 을 시작하고 MCO 단자에 출력 한 후 HSE_BYPASS / PLL 을 설정하여 시스템 클럭을 HSI48(HSE_BYPASS 선택)로 변경해야합니다. 또한, 이때의 HSE_BYPASS 입력 주파수는 허용하는 주파수 범위 (데이터 시트 참조)를 만족해야 합니다. 추가로, HSI48 클럭이 멈추는 경우에 대한 대책으로 CSS (Clock Security System)를 사용하여 클럭을 모니터링하는 것을 권장합니다.

A. CMSIS에는 DSP 라는 Layer 가 있고 소스 코드는 ARM 에서 제공하고 있습니다. 예를 들어 IAR의 EWARM의 경우,  C : \ Program Files (x86) \ IAR Systems \ Embedded Workbench ... \ arm \ CMSIS \ 폴더 안에 문서, 소스 코드 라이브러리, 헤더 파일이 들어 있습니다. 이 라이브러리를 사용하려면 개발 환경에서 설정이 필요합니다. 

먼저 옵션 설정 카테고리 [C/C++ Compiler] -> [Preprocessor] -> [Definded symbols] 에서 "ARM_MATH_CM4"을 정의합니다. 다음 옵션 설정 카테코리 [Linker] -> [Library] 에서 CMSIS-DSP의 lib를 추가합니다. 기본적인 사용법은 해당문서를 참고하시기 바랍니다. 

*해당 라이브러리는 컴파일러 업체가 제공하는 라이브러리로, 자세한 사항은 컴파일러 공급 업체에 문의하시기 바랍니다.

*웹상에서도 기타 관련정보를 찾으실 수 있습니다. 

https://arm-software.github.io/CMSIS_5/DSP/html/index.html

 

A. MCU는 소비 전력 따라 발열이 발생합니다. 특정 소비 전력에서 MCU의 주변 온도(Ta)에서 접합 온도(junction-to-ambient) 얼마가 될지의 계산식은 각 제품의 데이터 시트 "Thermal characteristics" 장에 기재되어 있습니다. 발열에 관한 열 저항 값은 패키지 마다 다르며 구체적인 값은 "Package thermal characteristics" 항목에 기재되어 있습니다. 주변온도의 최대 값(Ta_Max)과 정션온도의 최대 값(Tj_Max)의 스펙은 데이터 시트의 "General operating conditions" 항목에 기재되어 있습니다.

A. LSE (32.768kHz) 용 수정 발진자는 등가 직렬 저항 (ESR : Equivalent Series Resistance)이 작은 제품을 추천합니다. ESR이 크면 손실이 커지고 발진 특성이 안정되지 않아 발진 불량으로 이어질 수 있습니다.( ESR 값은 각 발진자의 제품 데이터 시트에 기재되어 있으며, 기준은 50kΩ 이지만 반드시 50kΩ 일 필요는 없습니다.)

각 발진자 제조업체별로 STM32 MCU와 미리 매칭테스트를 한 제품이 있으므로, Application note AN2867의 "Recommended crystal resonators for LSE oscillatorembedded in STM32 microcontrollers"를 참고할 수 있습니다. 

발진 특성은 회로 기판 PCB의 기생 용량과 저항에 의존하기 때문에, PCB에 MCU와 수정 발진자를 실장한 상태에서 발진자 제조업체에 매칭 평가를 의뢰 할 것을 권장합니다.

A. STM32 시리즈를 제품에 사용하는 고객이 고유의 WindowsPC 애플리케이션 소프트웨어를 개발하는 경우 ST가 제공하는 USB 드라이버를 그대로 사용할 수는 없지만, Reseller submission 의 적용에 의해 대응 가능합니다. 또한 고객이 고유의 USB VendorID를 사용하는 경우, ST는 VID/PID의 sublicense 서비스를 제공하고 있습니다. 고객이 USB.org에 등록되어 있는 경우, 고객을 위한 PID 를 발행하고 이후 Reseller submission을 적용하여 고객의 VID와 PID에 대한 드라이버를 제공합니다. 다만 ST의 VID에 대한 PID를 제공하는 서비스이므로, ST가 제공하는 USB 라이브러리는 ST의 VID를 사용하고 있습니다.  ST의 USB 라이브러리를 사용하고, 사용자의 응용 프로그램에 대한 PID를 취득하고 싶은 경우에 이용할 수 있는 무료 서비스 입니다. 

A. STM32L4 / F7 등의 시리즈에서는, 새롭게 탑재된 ⊿Σ변조기용 디지털 필터 인터페이스 (DFSDM)와 외부 ⊿Σ 변조기를 결합하여 최대 24 비트 ⊿ΣADC를 제공합니다. 최대 1024의 오버 샘플링 비율을 가진 고속 Sinc 필터와 적분기를 내장하고 있으므로, 이들을 사용하면 더욱 정확도를 높일 수 있습니다. 고해상도의 ADC는 미세 노이즈도 정확도에 영향을 미칩니다. 노이즈의 영향을 받기 쉬운 ⊿Σ 변조기를 MCU에서 분리하고 노이즈에 강한 디지털 부분만 MCU에 탑재하여 CPU의 노이즈의 영향을 없앤, 고해상도/고정밀도의 ADC를 손쉽게 구현 할수 있습니다. 다양한 공급 업체 (ST, TI, Analog Devices 등)의 ⊿Σ 변조기를 사용 할 수 있으므로, STM32F37x 시리즈에 탑재되는 16 비트 ⊿ΣADC 보다 고해상도/고정밀도 ADC가 필요한 경우에 매우 유용합니다. 

 

A. 가장 빠른 1MHz(1us)로 ADC를 변환하려면, ADC 클럭을 14MHz로 설정해야 합니다. ADC 동작 클럭을 분주하는 회로가 /2,/4,/6,/8로 분주 하기 때문에 시스템 동작 주파수가 72MHz일 경우에는 ADC 클럭을 14MHz로 설정할 수 없습니다. ADC를 가장 빠르게 동작 시키려면, 시스템 동작 주파수를 56MHz로 설정하고 4 분주하여 ADC에 14MHz를 공급하여야 합니다. STM32F2 이후 출시 된 제품은 ADC 클럭 소스, 클럭 주파수, 주파수 분주회로 등이 개선 되었기 때문에 이러한 부분에 주의할 필요가 없습니다.

A. 데이터 시트등의 문서에서 "RWW possible"이라고 표기된 STM32 MCU에서는 플래시에서 명령을 실행하는 동안 Flash에 데이터를 쓰는 것이 가능합니다. 그러나 일부 제품에서는 하드웨어적으로 메모리 Matrix와 내부 버스가 공유되어 있기 때문에, 명령 실행과 데이터 쓰기가 동시에 진행되지 않을 수 있습니다. 이런 경우에는 RAM에서 명령을 실행하여 플래시에 데이터를 쓸 수 있습니다. STM32 시리즈는 RAM에서 명령을 실행할 수 있습니다. RAM과 Flash는 다른 하드웨어이기 때문에, RAM 명령을 실행하는 동안 플래시에 데이터를 쓸 수 있습니다.

 

A. 사용되지 않는 GPIO에 대해서는, 단자 전위가 노이즈 등으로 인해 변동되지 않도록 전위를 고정시켜야 합니다.

여러가지 방법이 있습니다.

(1) 입력을 High 임피던스로 하고, 약 10KΩ~100KΩ의 풀업 또는 풀다운 저항으로 전위를 고정시킵니다.

(2) 풀업/풀다운 레지스터가 내장된 GPIO들은 그것을 사용하여 풀업 또는 풀다운 합니다.

(3) 단자를 출력으로 설정하여 전위를 High 나 Low로 고정한다.

     *이 경우, 전원과 직접 연결되는 경우 큰 전류가 흘러 MCU를 손상시킬 수 있으므로 저항을 사용하는 것을 추천합니다. 추가적으로 GPIO 입력 버퍼를 OFF 하면, 외부단자의 전위변동에 의한 MCU 내부 노이즈유입을 방지 할 수 있습니다.

(4) 아날로그 단자와 겸용인  GPIO단자는, 아날로그 모드로 전환한다.

    *GPIO 입력 버퍼는 OFF가 되어 입력 신호가 차단됩니다.

A. I/O compensation cell 기능을 사용하여 GPIO의 상승, 하강 시간을 조절할 수 있습니다. GPIO의 고속 동작이 필요하다면 High speed로 설정하고, GPIO의 갑작스런 신호 변화로 인한 고조파 노이즈를 억제하고 싶다면 Low speed로 설정합니다. 

*사용자가 소프트웨어로 선택할 수 있습니다.(기본값은 비활성화 상태입니다.)

*저 전력 모드에서는 적용되지 않습니다. 

*이 기능을 사용할 수 있는 전원전압의 범위가 제한적이므로, 제품의 데이터시트를 바랍니다.

*이 기능을 사용하면 전류 소모값이 증가 됩니다.

I2C를 사용하기 전에, I2C핀의 GPIO를 먼저 설정해야 합니다. GPIO 파라미터 설정 순서는, 

AFR 레지스터->MODER 레지스터->SPEEDR 레지스터->OTYPER 레지스터->PUPDR 레지스터 순서이며

GPIO를 설정한 다음에 I2C 클럭을 설정하여야 합니다.

위의 순서를 따르지 않으면, I2C 통신을 하기전 BUSY 플래그가 Set 될 수 있습니다.

A. STM32L 디바이스는 LCD전원에 Step-up converter로 구성된 boost 회로를 내장하고 있기 때문에, 사용자가 별도의 외부 전원을 공급 할 필요가 없지만 필요시 외부 전원을 공급하여 사용할 수 있습니다.  또한 전압 분배용 내부 저항을 탑재하고 있기 때문에, LCD전원인 VLCD에 분배된 전압을 공급 할 수 있습니다.

내부 저항은 저항값이 큰 High value resisters(RH) 와 저항값이 작은 Low value resisters(RL)로 구성되어 있어서 LCD 패널의 크기(부하 전류)에 맞는 저항값을 선택할 수 있습니다. 

STM32L0xx 시리즈에서는 각 저항의 양단이 Pin으로 유저에게 개방되어 있기 때문에 해당 Pin에 외부저항을 연결하여 LCD 패널의 구동 능력을 증가 시킬 수 있습니다.

A. RTC의 Calibration 방법은 제품마다 다릅니다. STM32F4 디바이스의 경우 Coarse방식과 Smooth방식의 두가지 디지털 Calibration방식을 지원합니다.

Coarse Calibration은 RTC Calibration register(RTC_CALIBR) 값을 이용합니다. 

Smooth Calibration은 RTC주파수 -487.1ppm 에서 +488.5ppm 범위에서 약 0.954ppm의 정밀도로 디지털 교정이 가능합니다.

Coarse/Smooth 두가지 교정 방법중 한가지만 선택하여 적용해야 합니다. RTC 교정에 대한 자세한 내용은 어플리케이션 노트 ( AN3371 "Using the hardware real-time clock(RTC) in STM32 F0,F2,F3,F4 and L1 series of MCUs, AN4795 "Using the hardware real-time clock(RTC) and the tamper management unit(TAMP) with STM32 microcontrollers"")를 참조하십시오.

A. STM32L0xx, L4xx, F0xx, F3xx, F7xx 시리즈 등의 USART는 자동으로 전송 속도를 측정할수 있는 Automatic baud rate detection기능이 탑재되어 있습니다. 정해진 패턴의 데이터를 수신하면 해당 데이터를 검토하여 자동으로 전송 속도를 감지하고 UART의 전송 속도를 자동으로 설정합니다. 탐지가되는 데이터의 패턴은 1. 첫번째 비트가 '1'인 데이터, 2. 최초의 비트 패턴이 '10xx', 3."0x7F", 4."0x55" 의 4가지 모드에서 한가지를 선택 할 수 있습니다.

자세한 내용은 어플리케이션 노트 ( AN4908 " STM32 USART automatic baud rate detection" )를 참조 하십시오.

A. STM32F4 디바이스는 수신 클럭 편차의 허용 범위를 늘리기 위해 1bit 샘플 방식을 포함하고 있습니다. 

해당기능을 사용하면 클럭 오차의 허용 범위를 4.375%까지 증가 시킬 수 있습니다. 구체적인 방법은 USART_CR1 레지스터의 OVER8 비트를 0으로 설정하고, USART_BRR 레지스터의 DIV_Fraction값과 USART_CR1 레지스터의 M 비트의 값을 각각 0으로 설정하고 USART_CR3 레지스터의 ONEBIT 값을 1로 설정합니다. 자세한 내용은 STM32 디바이스의 레퍼런스 메뉴얼중 USART receiver tolerance to clock deviation을 참조 하십시오.

 

A. HSI48 CRS(Clock Recovery System) 회로를 통해 USB 주변 장치에 고정밀 Clock을 제공 할 수 있습니다. CRS는 USBSOF신호, LSE(32kHz 크리스탈 오실레이터) 또는 외부 신호를 사용하여, 동작중인 HSI48의 주파수를 자동으로 빠르게 교정 할 수 있습니다. 해당 기능을 통해서 별도의 외부 오실레이터 없이도 USB 기능을 사용하실 수 있습니다.

자세한 내용은 어플리케이션 노트 AN4879 "USB hardware and PCB guidelines using STM32 MCUs"를 참조하시면 Crystal-less USB 지원이 가능한 STM32 디바이스를 확인 하실 수 있습니다.

A. WFI는 Wait For Interrupt (인터럽트 대기)의 약자이며, WFE는 Wait For Event (이벤트 대기)의 약자입니다. WFI의 경우 MCU가 저전력 모드에서 복귀 할 때 벡터 인터럽트 컨트롤러 (NVIC)에 의해 인터럽트를 인식하여 인터럽트 처리가 시작됩니다. WFE의 경우 저전력 모드에서에서 복귀 할 때 인터럽트 처리를하지 않고 저전력 모드에서 복귀만 하게됩니다. 따라서 저전력 모드에서 복귀 할 때 WFI를 사용할지 혹은 WFE을 사용할지 저전력 모드로 들어가기 전에 사용자가 컨트롤해야합니다.

A. 워치 독 타이머(IWDG)는 보안 우선으로 설계되어 있기 때문에 동작을 중지하는 설정비트가 없습니다. 따라서 일단 시작하면 사용자가 소프트웨어로 정지 할 수 없으며 LSI클럭으로 계속 동합니다. 또한 Standby 모드에서도 계속 동작하므로 CPU가 동작하지 않아도 IWDG의 설정 시간을 초과하면 MCU Watchdog Reset이 걸립니다. 이 때문에 IWDG 시간이 초과하기 전에 정기적으로 CPU가 깨어나 IWDG을 Refresh하여야 합니다. 한편, WWDG는 클럭 소스가 시스템 클럭(PCLK1)이므로, Stop 모드등에서는 정지됩니다. CPU의 동작에 맞추어 워치 독 타이머를 사용하려면 WWDG을 사용하십시오. WWDG은 저전력 모드시에 Refresh를 신경 쓰지 않고 사용할 수 있습니다.

A. STM32 시리즈는 기본적으로 두 종류의 워치 독 타이머가 탑재되어 있습니다. 독립형 워치 독 타이머(IWDG)와 윈도우 워치 독 타이머(WWDG)입니다. IWDG는 저속 내장 발진 회로 LSI를 클럭 소스로, WWDG는 시스템 클럭 (PCLK1)를 클럭 소스로합니다. IWDG는 Flash 옵션 바이트(하드웨어) 설정으로 전원 투입과 동시에 시작하거나 유저가 소프트웨어로도 시작 할 수 있습니다. 반면, WWDG는 소프트웨어로만 시작 할 수 있습니다.

A. STM32F7에 탑재 된 Cortex-M7에는 L1 D-캐시가 탑재되어 있습니다. 또한 한편으로 독립적인 DMA도 탑재하고 있습니다. D-캐시에 Hit 한 데이터는 D-캐시에 저장되어 있지만, 메모리(RAM)상의 같은 주소를 DMA가 수정하는 경우 D-캐시와 실제 메모리의 값이 달라져 버립니다. 결과적으로 동일성을 유지할 수 없게됩니다. D-캐시 및 메모리의 데이터 동일성은 하드웨어 자동적으로 관리하지 않으므로 사용자가 관리해야합니다. D-캐시에서 접근하려는 메모리는 DMA를 사용하지 않거나, 만약 DMA 사용한다면 DMA 전송 완료후 D-캐시를 삭제하여 데이터의 동일성을 맞춰주어야 합니다. 참고로, I-캐시는 기본적으로 다시 쓰여 지지않으므로 동일성을 관리 할 필요가 없습니다.

A. 예를 들어, TIM1_CCMR1 레지스터의 OC1M(Output Compare 1 mode bits)를 100 또는 101로 설정하면 CCER1 레지스터와 타이머 카운터의 비교값과 상관없이, 각 출력 신호를 강제로 High 또는 Low 레벨로 조정 할 수 있습니다. 출력 신호를 강제로 High레벨로 변경하려면, 해당하는 TIMx_CCMRx 레지스터의 OCxM 비트를 101로 설정하고 Low레벨인 경우 100으로 설정합니다.

A. STM32F에 탑재되어 있는 타이머에는 인코더 기능이 탑재되어 있습니다.특히 STM32F413 등에 탑재되어 있는 LPTIMER는 저전력 타이머일 뿐만 아니라 인코더 기능을 가진 것도 있습니다. 

-T1의 레벨이 High/Low 일 때 T2의 엣지로 Count-up/Count-down

-T1의 엣지로 Count-down, T2의 엣지로 Count-up 

하는 등의 기능도 가지고 있으며 4체배의 2상 카운터도 구현이 가능합니다. 카운터의 업다운은 입력신호(T1, T2)를 타이머클럭으로 샘플링한 후 엣지검출을 수행합니다.

A. 타이머의 PWM 출력 주기는 ARR(Auto Reload Register)로 정해지고, Duty비는 Capture/Compare Register(CCRx:x는 ch번호)로 정해집니다. CCRx는 일단 설정하고 PWM 출력이 시작된 후라도 소프트웨어로 변경 가능하며, 변경한 값은 즉시 유효하게 됩니다. 변경한 값은 새로운 CCRx 값과 카운터 값이 일치할 때 PWM 값이 토글(H⇔L)됩니다. 따라서 PWM 출력 중에도 CCRx를 수정하면 Duty비를 소프트웨어로 자유롭게 변경할 수 있습니다.

A. 타이머의 ARR(Auto Reload Register)는 Preload Register와 Shadow Register의 2단으로 구성되어 있습니다. Preload Register의 내용은, 업데이트 이벤트가 발생할 때 Shadow Register에 전송됩니다. 업데이트 이벤트는 카운터가 오버/언더 플로우에 도달했을 때 발생합니다. 타이머 초기설정 직후에는 갱신 이벤트가 발생하지 않으므로 Shadow Register 값은 미확정입니다. 따라서 첫 번째 오버/언더플로우는 이 값이 적용되지 않습니다. Shadow Register 값을 확정하기 위해서는 소프트웨어로 UG(Update Generation) 비트를 설정합니다. UG 비트를 설정하면, 소프트웨어에서 갱신 이벤트를 즉시 발생시킬 수 있기 때문에, Preload Register의 내용이 Shadow Register로드 레지스터에 전달됩니다.

A. VBAT 단자에 백업 전원이 연결되어 있으면, 전원 VDD/VDDA의 POR(Power On Rest)이나, 시스템 리셋을 하더라도, VBAT 백업 도메인이 리셋되지 않습니다. VBAT 백업 도메인을 리셋 하고 싶은 경우는, 소프트웨어로 RCC_BDR 레지스터내의 BDRST 비트를 설정하거나, VBAT 단자의 전원을 끄고 다시 시작하여야 합니다. 참고로, 백업SRAM(BKPSRAM)은 BDRST 비트에 의한 리셋에는 영향을 받지 않습니다. 이를 이용하여, 백업SRAM에 정해진 특정 값을 써두고 그 값을 체크하여, 어느 쪽에 의한 리셋인지 판별할 수도 있습니다.

A. Fault는 다양합니다. 메모리 관리 Fault, 버스 관리 Fault, 용법 Fault, 하드 Fault, 디버깅 Fault등이 있습니다. 각 Fault는 레지스터를 가지고 있고, 원인에 대한 관련 플래그가 있습니다. Fault가 발생하면 우선 이러한 플래그를 체크하십시오. 그리고 설명서에 따라 Fault의 원인을 확인하십시오. 그래도 원인을 모를 경우, Fault가 발생하기 전에 CPU가 무엇을하고 있었는지를 확인합니다. Fault 핸들러 (서비스 루틴)에서 브레이크를 걸어 그 때의 스택의 내용을 확인합니다. 스택에는 LR값이 들어 있을 것입니다. LR값은 서브 루틴 호출의 반환 값(복귀주소)를 나타냅니다. LR값의 직전 주소에서 서브 루틴 호출되어 Fault가 발생하였을 것이므로, 디스어셈블러창에서 LR 주소로 이동하여 내용을 확인하십시오. 과거에 있었던 주요 Fault의 원인으로는, 부정한 명령의 실행(Flash의 WS설정착오), 부정 값을 사용하여 계산(존재하지 않는 메모리나 레지스터 영역을 액세스), 서브루틴내에서 스택을 침범(프로그램 작성 실수), 부당한 서브루틴 실행(프로그램 작성 실수)등이 있었습니다. 실제 ​​프로그램상에서의 원인은 단순하지 않을 수 있으므로, 가능성 있는 여러 요인들에 대해 면밀하게 검토해야 합니다.

A. HSERDY 비트는 시스템 리셋의 영향을 받지 않습니다. HSERDY 비트를 초기화 하려면 시스템 리셋 생성(HSEON 비트 클리어) 후 HSE 오실레이터 클럭을 6사이클 이상 입력해야 합니다.

A. BOOT 핀 및 Option Byte에서 메인 플래시 메모리를 부트 영역으로 설정해도, AN2606 STM32 microcontroller system memory boot mode에 기재되어 있는 Bootloader activation patterns에 해당하는 경우(ex. Flash가 공백인 경우 등) 내장 된 시스템 메모리가 부트 영역으로 선택됩니다. 그 결과, 시스템 메모리상의 부트로더가 실행됨에 따라 특정 핀들은 통신 인터페이스 기능으로서 설정됩니다.

A. 각 주변 장치는 페리페럴 리셋 레지스터(RCC_APBxRSTR)를 설정함으로써 주변장치별로 쉽게 초기화할 수 있습니다. 초기화 루틴으로 사용하는 것이 일반적이지만, 각 주변장치에서 에러가 발생하여 상태를 초기화 하고 재기동하는 경우에도 편리합니다. 예를 들어 SPI통신에서 오버런 에러가 발생해서 처음부터 통신을 재개해야 한다던가 SDIO 스테이트 머신이 에러를 일으켜 idle로 돌아가 버린다면 초기화가 필요하기 때문에 이 레지스터를 설정하게 되면 주변장치들의 레지스터가 쉽게 초기값으로 되돌아 갑니다.

A. STM32의 리셋 핀(NRST)은 내부 리셋의 출력 신호도 겸하고 있어 NMOS 오픈드레인 구조로 되어 있습니다 (각 제품의 매뉴얼 참조). 따라서 외부에 리셋 IC를 연결하여 CMOS Push-Pull로 드라이브하면, NRST 핀이 리셋 IC의 PMOS(High)로 드라이브 되어, MCU 내부 리셋시에 NRST 핀이 Low가 되지 못해 리셋이 되지 않습니다. 외부 리셋 IC를 사용하는 경우에는 NMOS 오픈 드레인 출력으로 NRST를 드라이브해야 합니다.

A. 외부 인터럽트의 「레벨 인터럽트」는 STM32 시리즈의 하드웨어에서 지원하고 있지 않습니다. 그러나, 「엣지 인터럽트」와 「핀 레벨 체크」를 통해 「레벨 인터럽트」와 유사한 기능을 구현할 수 있습니다. 예를 들어 Low 레벨 인터럽트를 실현하고 싶은 경우, 우선 하강(falling) 엣지에서 인터럽트를 검출하여 인터럽트 서비스 루틴으로 진입합니다. 이 서비스 루틴의 마지막(메인 루틴으로 돌아가기 직전)에 핀의 레벨을 확인합니다. 만일 Low 레벨이 유지되고 있으면 인터럽트 pending 비트를 설정합니다. 만일 레벨이 High이면 pending 비트를 설정하지 않고 메인 루틴으로 돌아갑니다. Pending 비트가 설정되어 있다는 것은 인터럽트가 발생한 상태이므로 다시 인터럽트 서비스 루틴을 실행합니다. 이 방법을 사용하면 외부 인터럽트 핀이 Low를 계속 유지하는 한 인터럽트 서비스 루틴이 반복되어 「레벨 인터럽트」와 같은 동작이 됩니다.  이와 반대로, High 레벨 인터럽트의 경우는 "상승(rising) 에지 인터럽트"와 "High 레벨 체크"로 구현할 수 있습니다. 다만 레벨을 체크한 직후 메인 루틴으로 되돌아가기 전에 단자의 레벨이 변화한 경우는 코드 실행의 시간차로 인해 약간 타이밍이 어긋나므로 주의해야 합니다.

A. STM32는  Discovery와 Nucleo 두가지 종류의 스타터 키트가 준비되어 있습니다. Discovery와 Nucleo는 MCU전류 측정용 핀이 있어서, 이 핀에 전류계를 연결하면 쉽게 전류 값을 측정 할 수 있습니다. STM32Cube MCU firmware package를 설치하시면, MCU의 동작 모드별로 전류측정을 할 수 있는 예제도 제공되어 빠르게 원하는 모드에서 동작시킬 수 있습니다.

A. 사용자 매뉴얼과 데이터 시트, 애플리케이션 노트에 전원 디커플링 커패시터의 종류, 설치 위치, 정전 용량에 대해 설명되어 있습니다. 이러한 지침에 따라 선정하십시오. 기본적으로, 콘덴서의 종류로는 소형에서 주파수 특성이 우수하며 임피던스 낮은 세라믹 콘덴서와 탄탈 전해 콘덴서가 적합합니다. 배치 위치는 최대한 마이컴의 전원 단자에 가까운 위치를 선택하십시오.

 

A. 어느 정도라면 사용자가 주파수 보정을 할 수 있습니다. 구체적으로는 다음과 같이 수정합니다. 각 장치는 TA = 25 ℃시 ± 1 %의 정확도를 유지하기 위해 공장 출하시 교정되어 있습니다. 재설정 된 후 공장에서 교정 값은 클럭 컨트롤 레지스터 RCC_CR의 HSICAL [7 : 0] 비트에 저장됩니다. 사용자 보정은 RCC_CR 레지스터의 HSITRIM [4 : 0] 비트를 설정함으로써 이루어집니다. 이러한 비트에서 전압 및 온도가 변화했을 때의 HSI RC 발진 주파수 변화를 보정하도록 프로그램을 만들 수 있습니다. 자세한 내용은 애플리케이션 노트 AN2868를 참조하십시오.

A. PLL에 확산 스펙트럼 클럭 생성 기능 (SSCG)가 내장되어있는 제품이 있습니다. 이 기능을 사용하면 장치에서 발생하는 전자파 간섭 노이즈 성분의 저감이 가능합니다. 특성에 대한 자세한 내용은 데이터 시트의 "PLL spread spectrum clock generation (SSCG) characteristics"섹션을 참조하십시오. 이 기능은 리셋 직후 작동하지 않습니다. 소프트웨어를 통해 활성화해야합니다. 만약 전원 투입 직후 전자기 간섭 노이즈 성분의 저감이 필요한 경우 최대한 빨리 소프트웨어에서 활성화해야합니다.

A. 데이터 시트에 나와있는 HSI의 주파수 오차는 장치의 출하시에 보정 된 값입니다. 사용시 실장시의 리플로우 등으로 열 스트레스와 기계적 스트레스가 가해진 경우 HSI의 주파수는 변화합니다. 예를 들어, STM32F334 데이터 시트의 'HSI oscillator characteristics" 항목의 주의 사항에 "4.Factory calibrated, parts not soldered"라고 기재되어 있으며, 리플로우 후의 주파수의 예는 "HSI oscillator accuracy characterization results for soldered parts"의 그림에 나와 있습니다. 또한 주파수는 실장 후에도 온도 및 전원 전압에 따라 변화하므로, 정밀한 HSI의 주파수가 필요한 환경에서는 수시 보정을 수행하십시오.

STM32 오픈 개발 환경 관련 FAQ

1. ST 마이크로컨트롤러의 명성과 노하우를 경험해 볼 수 있습니다.

2. 개발을 손쉽게 할 수 있도록 고안했으며, 기초에서 어드밴스 단계까지 HW/SW 기능 블럭의 맞춤화도 쉽습니다. 

3. 드라이버에서 어플리케이션까지 개발자의 아이디어를 가장 빠르고 매끄럽게 구현할 수 있는 최상의 개발환경 입니다. 

A. 여러 X-NUCLEO 기능을 통합하기 전, 아래 주소에서 유사한 기능 패키지가 있는지 확인하시기 바랍니다. 

www.st.com/stm32ode-fp

STM32 오픈 개발 환경은 모듈화되어 있어 조합과 맞춤화가 쉽습니다.