STM32G4를 사용하시는 분들중에 CubeMX에서 System Clock을 Max 170MHz 로 설정이 안되는 황당한 경험을 한 경우가 있을 것 같습니다. 무방비 상태에서 HCLK를 170MHz 설정하면 아래와 같은 메시지를 보게 됩니다. 문제는 아무런 안내없이 저런 경고를 띄운 후에 150MHz로 강제 설정이 되어 버립니다. 원인은 reference manual에서 확인 할 수 있으며 CubeMX의 default 세팅 값인 아래 VOS(Voltage Scale)에서는 최대 150MHz로 밖에 설정이 안되는 것이 원입니다. 따라서 CubeMX의 RCC설정에서 Power Regulator Voltage Scale 1 boost로 설정하고 다시 170MHz로 설정하면 정상적으로 설정이 되는 것을 확인..
이번 포스팅에서는 STM32 내부 플래 메모리에 대한 이야기를 해보려고 합니다. VDD에 전원이 들어오거나 RESET를 통해 시스템이 동작을 시작할 때 코드를 인출하는 곳이 내부 플래시 메모리입니다. MCU의 내부 플래시 메모리는 제품마다 전체, 섹터, 페이지 등의 크기가 다 다르기 때문에 어플리케이션에 적합한 제품을 골라야 비용을 절약 할 수 있습니다. Flash Memory 속도 Datasheet 등에는 표시되어 있지 않지만 의외로 Core Clock에 비해 플래시 속도가 몇 배 느립니다. 어플리케이션의 성능이 Core 속도 만큼 나오지 않는 이유는 바로 이 때문입니다. 이를 극복하기 위해 ART Accelerator라는 STM32 자체 기술이 탑재되어 있긴 한데 Branch나 interrup..
Type-C with Power Delivery using a general-purpose peripheral Hardware overview 그림 30. Hardware view for Type-C Power Delivery with a general-purpose peripheral 범용 주변 장치를 사용하는 TCPM/TCPC 인터페이스는 USB 전원 공급을 처리하는 편리한 방법입니다. 통신 버스를 사용하는 STM32 MCU 및 STM32 MPU는 모든 TCPM/TCPC 컴패니언 칩을 처리할 수 있습니다. 일반적으로 I2C, SPI 또는 GPIO는 통신 메시지 및 예외를 처리하는 데 사용됩니다. 역자주) TCPM/TCPC 장치는 USB PD 기능이 없는 MCU에서 USB PD를 구현하는데 사용될 수 ..
STM32에서는 아래와 같은 VDD-VDDA 의 구성을 가지고 있습니다. STM32G 시리즈 Power scheme VDD와 VDDA는 완전하게 독립적으로 분리할 수 있습니다. 하지만 회로적으로 Digital 전원과 Analog 전원을 따로 분리하지 않는 경우가 더 많습니다. VDD는 디지털 회로에 들어가는 전원으로 디지털의 특성상 작은 ripple은 허용이 되는 편입니다. 하지만 ADC의 기준이 되는 VREF+는 작은 ripple이라도 ADC에 큰 오차를 만들 수 있습니다. 따라서 회로적으로 VREF+가 흔들리지 않도록 권장하는 Decoupling Capacitor 및 노이즈 원인으로 부터 떨어 뜨려야 합니다. 흔히 VDD - VDDA - VREF+ 를 같이 연결하여 사용하는데 디지털 전원인 VDD..
우리가 아주 끔찍하게 싫어하는 Hardfault를 임의로 만들어 보겠습니다. 아래 코드를 넣으면 PC가 수행할 수 없는 주소로 변경되면서 Hardfault로 Jump 하게됩니다. typedef void (*Function_Pointer)(void); /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ /* USER CODE END 0 */ /** * @brief The application entry point. * @retval int */ int main(void) { /* USER CODE BEGIN 1 */ /* USER..
오늘은 STM32CubeAI를 이용한 아주 간단한 XOR 게이트 머신러닝을 알아보도록 하겠습니다. 요즘 워낙 A.I 어플리케이션이 많이 활용되어 어디에서든 쉽게 AI 모델을 찾아 활용할 수 있습니다. 이번 포스트에서는 이런 모델중에서도 가장 쉬운 XOR 게이트 모델을 통해 STM32CubeAI의 활용중에 아주 기초적인 사용법을 익히도록 하겠습니다. 1. 모델생성 및 .h파일 만들기 우선 model을 아래와 같이 만듭니다. 아래 모델은 Google에서 찾았으나 어느 사이트였는지 기억이 나지않아 링크를 걸지 못했습니다. (보통 왠만한 모델들은 검색을 통해 쉽게 찾을 수 있습니다.) 아래 모델은 각각 XOR의 Input값과 Output 값을 sigmoid 활성화 함수, mse 손실함수와 함께 4000번 학습시..
오실로스코프를 사용하여 사양에 대한 벅 컨버터의 성능을 확인할 수 있습니다. 그림 20. PWM 파형 D0 및 D1 트레이스는 벅 컨버터가 일정한 100mA 부하로 작동할 때 하이 사이드(1차) 및 로우 사이드(2차) 스위치에 대한 PWM 출력을 보여줍니다. PWM 주기는 200kHz 스위칭 주파수에 해당하는 5µs입니다. 출력 전압은 채널 1 트레이스에서 볼 수 있듯이 목표와 일치하는 3.3V입니다. 그림 20 그림 21 CPU 부하에서 D0 트레이스는 CPU가 유휴 상태인 동안, 즉 while(1) 루프를 실행하는 동안 토글되는 디지털 IO 핀(GPO2)입니다. CPU가 FMAC 인터럽트 핸들러를 실행할 때 GPO는 토글을 멈춥니다. CPU가 PWM 주기 시작 후 460ns에 FMAC 인터..
Configuring the FMAC FMAC 레지스터에 액세스하기 전에 FMAC 클록을 활성화해야 합니다. __HAL_RCC_FMAC_CLK_ENABLE(); A 및 B 계수를 위해 시스템 메모리 영역을 할당해야 합니다. /* Array of filter coefficients A (feedback taps) in Q1.15 format */ static int16_t aFilterCoeffA[COEFF_VECTOR_A_SIZE] = {A1,A2,A3}; /* Array of filter coefficients B (feed-forward taps) in Q1.15 format */ static int16_t aFilterCoeffB[COEFF_VECTOR_B_SIZE] = {-B0,-B1,-B2,-B..