Training application noteDatasheet-to-Site Lab Guide
STM32F103 Datasheet-to-Site Lab Guide
RCC, GPIO, ADC1, TIM2 PWM, EXTI6를 실제 STM32F103 문서에서 읽고 사이트 코드와 UI로 확인하는 수강생용 HTML 가이드
- Document ID
- LAB-DS-SITE001
- Revision
- Rev 1.0
- Student scope
- RCC / GPIO / ADC1 / TIM2 PWM / EXTI6
- Site views
- Register / Pin / Graph / Mission / Docs / Log
이 문서는 데이터시트를 대신하지 않습니다. 수강생이 먼저 실제 DS5319 데이터시트와
RM0008 레퍼런스 매뉴얼에서 무엇을 확인해야 하는지 잡고, 같은 사실을 현재 사이트에서
어떤 코드와 UI로 검증할 수 있는지 이어 주는 실습용 안내서입니다.
UART/USART 데이터시트와 사이트 기능은 유지하지만, 이번 1차 모터 실습 검토 범위에서는 UART 실행 코드와 제출 테스트를 제외합니다.
PA10 / COMM_RX 실행 경로도 현재 모터 실습 핀맵에 넣지 않습니다.
현재 실습 핀맵은 PA1 / CURRENT_SENSE, PA2 / PWM_OUT,
PA3 / DRV_EN, PA4 / DRV_DIR,
PA5 / FAULT_IN, PA6 / HALL_IN 중심입니다.
Contents
- 실제 문서에서 먼저 읽을 것
- 사이트 그림이 모사한 원본 page map
- 사이트에서 바로 확인하는 통합 코드
- 코드가 하는 일과 데이터시트 근거
- RCC 확인: 클럭 enable 비트와 Register View
- GPIO 확인: 설정 레지스터와 Pin / Graph View
- ADC1 확인: PA1 CURRENT_SENSE analog 입력과 raw 값
- TIM2 PWM 확인: 공식 pin truth와 trainer PA2 route
- EXTI6 확인: PA6 HALL_IN interrupt
- 모터 드라이버 사양과 포트별 출력 확인
- 수강생 제출 캡처 체크리스트
1 실제 문서에서 먼저 읽을 것
| 주제 | 공식 문서에서 알 수 있는 것 | 이 사이트의 HTML 문서에서 볼 위치 | 사이트에서 확인할 위치 |
| RCC |
DS5319 Rev 20의 clock tree와 RM0008 Rev 21 Section 7.3.7의 RCC_APB2ENR에서 AFIO/GPIOA/ADC1 enable 비트를 확인한다. TIM2는 RM0008 Rev 21 Section 7.3.8의 RCC_APB1ENR.TIM2EN을 본다. |
STM32 스타일 RCC 클럭 제어 데이터시트의 clock tree, enable register map, peripheral bring-up map. |
Register 탭의 RCC_APB2ENR, 필요하면 RCC_APB1ENR. |
| GPIO |
RM0008 GPIO 장의 port-bit 구조, CRL/CRH의 4-bit nibble, IDR/ODR/BSRR/BRR 데이터 흐름을 확인한다. DS5319 Table 5에서는 PA1/PA2/PA3/PA4/PA5/PA6의 실제 pin 기능을 본다. |
STM32 스타일 GPIOA 데이터시트의 GPIO mode figures, official functions, currently simulated table. |
Register 탭의 GPIOA_CRL/GPIOA_IDR/GPIOA_ODR, Pin 탭의 PA3 / DRV_EN, PA4 / DRV_DIR, PA5 / FAULT_IN, PA6 / HALL_IN. |
| ADC1 |
DS5319 feature list에서 12-bit ADC와 변환 범위를 확인하고, RM0008 Section 11에서 channel, sample/hold, conversion data path, official result register ADC_DR를 확인한다. |
STM32 스타일 ADC1 데이터시트의 source basis, input equivalent circuit, trainer-executable subset. |
Pin 탭의 PA1 / ADC1_IN1 / CURRENT_SENSE; Graph 탭의 PA1 / CURRENT_SENSE voltage trace; raw 값은 Register 탭의 ADC1_DR_CH1. |
| TIM2 PWM |
DS5319 Table 5에서 실제 PA2는 TIM2_CH3이고, TIM2_CH1은 기본 PA0 또는 remap PA15라는 점을 확인한다. RM0008 timer 장에서는 output compare/PWM mode, CCER, CCR 흐름을 본다. |
TIM2 PWM 짧은 레퍼런스 챕터의 official pin truth, trainer route, programming information. |
Register 탭의 RCC_APB1ENR, TIM2_CCER, TIM2_CCR1; Pin 탭과 Graph 탭의 PA2 / PWM_OUT. |
| EXTI6 / Hall |
RM0008 Figure 20/21과 EXTI_IMR/RTSR/FTSR/PR 설명에서 line 6 interrupt path와 pending clear 방식을 확인한다. DS5319 Table 5에서는 PA6 package pin truth를 본다. |
STM32 스타일 EXTI 데이터시트의 official source-selection truth와 trainer-fixed PA6 -> EXTI6 -> HALL_IN route. |
Pin 탭의 PA6 / HALL_IN, Register 탭의 EXTI_IMR/EXTI_RTSR/EXTI_PR, Log 탭의 Hall count trace. |
1.1 사이트 그림이 모사한 원본 page map
아래 page는 로컬 기준으로 검토한 공식 PDF의 표시 page입니다. 목차 page에서 한 번, 실제 그림 page에서 한 번
같은 figure 번호가 검색될 수 있으므로, 표에는 실제 그림이 있는 page를 적었습니다.
| 사이트 HTML 문서 | 사이트 그림/표 | 모사한 공식 원본 | 공식 PDF page |
| RCC | rcc-clock-tree-reference.jpg | DS5319 Rev 20 Figure 2 Clock tree, RM0008 Rev 21 Figure 8 Clock tree | DS5319 p.12, RM0008 p.93 |
| RCC | rcc-hse-clock-sources.jpg | RM0008 Rev 21 Figure 9 HSE/LSE clock sources | RM0008 p.94 |
| RCC | rcc-enable-register-map.jpg | RM0008 Rev 21 Sections 7.3.6-7.3.8, enable register map | RM0008 p.144-149 |
| GPIOA | GPIO port-bit architecture | RM0008 Rev 21 Figure 13 and Figure 14 | RM0008 p.160 |
| GPIOA | Input floating / pull-up / pull-down | RM0008 Rev 21 Figure 15 | RM0008 p.163 |
| GPIOA | Output configuration | RM0008 Rev 21 Figure 16 | RM0008 p.164 |
| GPIOA | Alternate-function configuration | RM0008 Rev 21 Figure 17 | RM0008 p.165 |
| GPIOA | High-impedance analog configuration | RM0008 Rev 21 Figure 18 | RM0008 p.166 |
| ADC1 | adc1-architecture.jpg | RM0008 Rev 21 Figure 22 Single ADC block diagram | RM0008 p.217 |
| ADC1 | adc1-input-equivalent-circuit.jpg | DS5319 Rev 20 Figure 38 Typical connection diagram using the ADC | DS5319 p.77 |
| ADC1 | adc1-regular-conversion-timing.jpg | RM0008 Rev 21 Figure 23 Timing diagram | RM0008 p.220 |
| ADC1 | adc1-analog-watchdog.jpg | RM0008 Rev 21 Figure 24 Analog watchdog guarded area | RM0008 p.220 |
| TIM2 PWM | tim2-pwm-path.jpg | RM0008 Rev 21 Figure 126, Figure 127, Figure 130; plus DS5319 Table 5 pin truth | RM0008 p.383, p.388; DS5319 p.29 |
| EXTI | EXTI source-selection / internal flow figures | RM0008 Rev 21 Figure 20 and Figure 21 | RM0008 p.207, p.210 |
| VMD-MD01-Lite | Driver block/application-circuit figures | VNH5019A-E Figure 1, Figure 4, Figure 5; H-bridge concept cross-check with DRV8873-Q1 | VNH5019A-E p.5, VNH5019A-E p.15, VNH5019A-E p.16; DRV8873-Q1 p.12 |
| IMS Actuator Interface | System interface figures | 공식 vendor figure 직접 모사가 아니라 현재 trainer simulator/UI contract를 STM32 GPIO/ADC/TIM/EXTI 문서와 대조해 재구성한 시스템 그림 | Cross-check sources: DS5319 Table 5 p.28-31, RM0008 GPIO p.160-166, EXTI p.207/210, ADC p.217/220, TIM p.383/388 |
모든 그림은 vendor PDF를 복사한 이미지가 아니라 source structure를 보고 다시 그린 reconstructed figure입니다.
정확한 bit, register, pin truth는 각 HTML 본문과 표를 기준으로 확인합니다.
2 사이트에서 바로 확인하는 통합 코드
아래 코드는 현재 trainer header/MMIO contract에 노출된 심볼만 사용합니다. 코드 편집기에 붙여넣고
Build & Step 또는 Build 후 Step을 누르면 RCC, GPIO, ADC1,
TIM2 PWM, EXTI6 확인을 한 번에 시작할 수 있습니다.
#include "training_api.h"
static uint32_t motor_phase; /* Trainer state for DRV_EN/DIR/PWM sequencing, not an STM32 register. */
static uint32_t hall_events; /* Trainer state mirroring PA6 HALL_IN events. */
void user_init(void) { /* Bring-up for the current lab pin map: PA3 DRV_EN, PA4 DRV_DIR, PA2 PWM_OUT, PA5 FAULT_IN, PA6 HALL_IN, PA1 CURRENT_SENSE. */
RCC->APB2ENR = (1u << 0) | (1u << 2) | (1u << 9); /* AFIOEN + IOPAEN + ADC1EN for GPIOA, EXTI, and current feedback. */
RCC->APB1ENR = (1u << 0); /* TIM2EN for the trainer PWM command. */
GPIOA->CRL = 0x44422204u; /* PA1 analog; PA2/PA3/PA4 outputs; PA5/PA6 digital inputs. */
ADC1->CR = (1u << 1); /* Trainer CH1_EN for PA1 / ADC1_IN1 / CURRENT_SENSE. */
TIM2->CCER = 0x01u; /* Trainer CC1E gate for PA2 / PWM_OUT. */
TIM2->CCR1 = 0u; /* Trainer duty percent starts at 0. */
EXTI->IMR = (1u << 6); /* Enable PA6 / HALL_IN interrupt masking. */
EXTI->RTSR = (1u << 6); /* PA6 Hall route uses rising edges. */
EXTI->FTSR = 0u; /* Falling edge is disabled in this lab. */
EXTI->PR = (1u << 6); /* Clear pending EXTI6 by write-1. */
GPIOA->ODR = 0u; /* Start DRV_EN, DRV_DIR, and PWM command low. */
} /* End user_init; all configured symbols are exposed by the current training_api.h contract. */
void EXTI6_IRQHandler(void) { /* Trainer hook for PA6 HALL_IN; official STM32F103 shares EXTI9_5, but this simulator exposes a dedicated EXTI6 handler. */
if ((EXTI->PR & (1u << 6)) != 0u) { /* Check pending Hall edge on PR6. */
hall_events = HALL->COUNT; /* Read trainer Hall counter tied to PA6. */
trace_u32(hall_events); /* Trainer-only log; not an STM32 peripheral. */
EXTI->PR = (1u << 6); /* Write 1 to clear PR6. */
} /* End pending-check branch for PA6 HALL_IN. */
} /* End EXTI6 handler. */
void user_loop(void) { /* Repeated motor-driver observation loop using only GPIOA, ADC1, TIM2, EXTI, VMD_MD01, and HALL trainer symbols. */
uint32_t current_raw = ADC1->DR_CH1 & 0x0FFFu; /* PA1 / ADC1_IN1 / CURRENT_SENSE raw value. */
uint32_t fault_active = (GPIOA->IDR & (1u << 5)) != 0u; /* PA5 / FAULT_IN active-high digital input. */
uint32_t duty = ((motor_phase & 3u) + 1u) * 20u; /* Trainer duty command for TIM2_CCR1. */
motor_phase++; /* Advances the observable PA2 PWM_OUT and PA4 DRV_DIR pattern. */
if (fault_active != 0u) { /* Motor-driver fault branch; FAULT_IN is PA5 digital input, not ADC; aligns with board-level active-high fault spec. */
GPIOA->BRR = (1u << 3) | (1u << 4); /* Reset PA3 DRV_EN and PA4 DRV_DIR. */
TIM2->CCR1 = 0u; /* Force PA2 PWM_OUT duty to 0 percent during fault. */
} else { /* Normal motor-driver command branch with no PA5 FAULT_IN assertion. */
GPIOA->BSRR = (1u << 3); /* Set PA3 DRV_EN. */
GPIOA->ODR = (GPIOA->ODR & ~(1u << 4)) | ((motor_phase & 1u) << 4); /* Drive PA4 DRV_DIR. */
TIM2->CCR1 = duty; /* Update PA2 PWM_OUT trainer route; DS5319 Table 5 p.29 says PA2 is TIM2_CH3, while trainer uses TIM2_CCR1 as compact duty. */
} /* End fault-safe command selection. */
watch_u32("current_raw", current_raw); /* Watch PA1 analog current feedback. */
watch_u32("fault_hall_bits", GPIOA->IDR & ((1u << 5) | (1u << 6))); /* Watch PA5/PA6 digital feedback. */
} /* End user_loop. */
기대 시작값: RCC_APB2ENR = 0x00000205,
RCC_APB1ENR = 0x00000001,
GPIOA_CRL = 0x44422204,
ADC1_CR = 0x00000002,
TIM2_CCER = 0x00000001,
EXTI_IMR = 0x00000040,
EXTI_RTSR = 0x00000040.
2.1 코드가 하는 일과 데이터시트 근거
| 코드 줄 | 실제로 하는 일 | 데이터시트/RM에서 연결해서 볼 곳 | 사이트에서 보이는 결과 |
| RCC->APB2ENR = ... bit0/2/9 |
AFIO, GPIOA, ADC1의 APB2 clock gate를 연다. 실제 STM32F103도 peripheral register는 clock이 enable되어야 의미 있게 동작한다. |
RM0008 Section 7.3.7 RCC_APB2ENR. 사이트 그림 rcc-enable-register-map.jpg는 RM0008 p.144-149의 enable register 흐름을 모사한다. |
Register 탭에서 RCC_APB2ENR = 0x00000205. 이 값은 AFIOEN|IOPAEN|ADC1EN 조합이다. |
| RCC->APB1ENR = (1u << 0) |
TIM2EN을 set해서 TIM2 PWM register를 사용할 수 있게 한다. |
RM0008 Section 7.3.8 RCC_APB1ENR. TIM2는 APB1 peripheral이므로 APB2가 아니라 APB1 enable을 본다. |
Register 탭에서 RCC_APB1ENR = 0x00000001. |
| GPIOA->CRL |
GPIO pin mode를 4-bit 단위로 설정한다. 이 예제에서는 PA1을 analog 입력, PA2/PA3/PA4를 output, PA5/PA6를 digital input으로 맞춘다. |
RM0008 Figure 13/14 p.160의 GPIO port bit 구조와 Figure 15-18 p.163-p.166의 input/output/alternate/analog mode. 핀 기능은 DS5319 Table 5 p.29-p.30. |
Pin / Voltage Matrix에서 PA1 / CURRENT_SENSE, PA2 / PWM_OUT, PA3 / DRV_EN, PA4 / DRV_DIR, PA5 / FAULT_IN, PA6 / HALL_IN을 본다. |
| ADC1->CR = (1u << 1) |
현재 trainer의 compact ADC control register에서 CH1_EN만 켜서 ADC1->DR_CH1 값이 갱신되게 한다. |
공식 STM32F103은 ADC_CR1/ADC_CR2와 official result register ADC_DR를 사용한다. 구조는 RM0008 Figure 22 p.217, timing은 p.220, analog input 회로는 DS5319 Figure 38 p.77. |
Register 탭에서 ADC1_CR = 0x00000002와 ADC1_DR_CH1 raw 값, Graph 탭에서 PA1 / CURRENT_SENSE voltage trace. |
| TIM2->CCER = 0x01; TIM2->CCR1 = duty |
capture/compare channel output을 enable하고 compare 값을 바꿔 PWM duty를 움직인다. 공식 CCR1은 compare 기준값이고, duty 변화는 timer counter와 비교되며 PWM 출력으로 나타난다. |
RM0008 Figure 126/127 p.383의 capture/compare path와 Figure 130 p.388의 edge-aligned PWM. 단, 공식 pin truth에서 PA2 = TIM2_CH3는 DS5319 Table 5 p.29이고, trainer는 관찰용 PA2 / PWM_OUT trainer route로 단순화한다. |
Register 탭에서 TIM2_CCER, TIM2_CCR1; Pin/Graph에서 PA2 / PWM_OUT. |
| EXTI->IMR/RTSR/PR, EXTI6_IRQHandler |
PA6 / HALL_IN rising edge를 interrupt pending으로 받고, handler에서 count를 log한 뒤 pending flag를 clear한다. |
RM0008 Figure 20 p.207, Figure 21 p.210, EXTI_PR write-1-to-clear 설명. Trainer는 dedicated EXTI6_IRQHandler hook을 노출한다. |
Register 탭의 EXTI_IMR/EXTI_RTSR/EXTI_PR, Pin 탭의 PA6 / HALL_IN, Log 탭의 Hall count. |
| GPIOA->BSRR/BRR/ODR, TIM2->CCR1, watch_u32() |
loop마다 PA3 enable, PA4 direction, PA2 PWM duty를 조절하고, PA1 current raw와 PA5/PA6 digital feedback을 Watch에 남긴다. |
GPIO ODR/BSRR/BRR은 RM0008 GPIO output path, GPIO IDR은 input path, TIM2_CCR1은 PWM compare path, watch_u32()는 trainer-only 이름 붙은 관찰 도구다. |
PA3 / DRV_EN, PA4 / DRV_DIR, PA2 / PWM_OUT, PA5 / FAULT_IN, PA6 / HALL_IN, Watch/Access 값을 같이 캡처한다. |
3 RCC 확인: 클럭 enable 비트와 Register View
| 코드 | 공식 의미 | 사이트 확인 | 주의 |
| RCC->APB2ENR bit0 |
AFIOEN. Alternate function / EXTI routing 쪽 선행 enable. |
Register 탭에서 RCC_APB2ENR = 0x00000205인지 확인한다. |
현재 통합 코드는 EXTI route와 GPIOA/ADC1 확인을 위해 켠다. |
| bit2 | IOPAEN. GPIOA register block enable. | PA1/PA2/PA3/PA4/PA5/PA6 관찰의 GPIO 쪽 전제. |
| bit9 | ADC1EN. ADC1 peripheral enable. | ADC chapter에서는 official ADCCLK 경로도 따로 설명한다. |
공식 STM32F103의 RCC base는 0x40021000이고
RCC_APB2ENR 주소는 0x40021018입니다. 현재 trainer C 포인터
RCC는 학생 실습용 compact view인 0x1800에서 시작합니다.
PWM을 확인할 때는 TIM2가 APB1에 있으므로 RCC_APB1ENR.TIM2EN도 같이 확인합니다.
공식 anchor는 RM0008 Rev 21 Section 7.3.7의 RCC_APB2ENR와
Section 7.3.8의 RCC_APB1ENR입니다.
4 GPIO 확인: 설정 레지스터와 Pin / Graph View
4.1 Register에서 확인
- GPIOA_CRL = 0x44422204: PA1 analog, PA2/PA3/PA4 output, PA5/PA6 input 흐름.
- GPIOA_ODR: loop가 돌 때 PA3 DRV_EN, PA4 DRV_DIR 출력 latch가 바뀐다.
- GPIOA_IDR: PA5 FAULT_IN, PA6 HALL_IN digital input 상태를 읽는다.
- EXTI_PR: PA6 Hall rising edge가 pending으로 들어오고 handler가 write-1로 clear한다.
4.2 UI에서 확인
- Pin 탭: PA3 / DRV_EN, PA4 / DRV_DIR, PA5 / FAULT_IN, PA6 / HALL_IN을 확인한다.
- Graph 탭: PA2 / PWM_OUT, PA1 / CURRENT_SENSE, PA5 / FAULT_IN, PA6 / HALL_IN을 선택한다.
- 보드의 Register Watch와 Pin / Voltage Matrix에서도 같은 register/pin 상태를 확인할 수 있다.
- Docs 탭: STM32 스타일 GPIOA 데이터시트에서 MODE/CNF 표와 pin summary를 확인한다.
공식 pin 기능과 trainer 별칭을 섞지 마세요. 예: 공식 문서에서는 PA2 = TIM2_CH3이고,
현재 실습에서는 같은 pad를 PA2 / PWM_OUT trainer route로 보여줍니다.
5 ADC1 확인: PA1 CURRENT_SENSE analog 입력과 raw 값
| 확인 대상 | 공식 문서에서 읽을 내용 | 코드 | 사이트 UI |
| PA1 / ADC1_IN1 |
실제 ADC는 sample time, conversion sequence, data register 흐름이 있지만 trainer는 교육용 subset만 노출한다. |
GPIOA->CRL에서 PA1 nibble을 0x0으로 두고 ADC1->CR bit1을 켠다. |
Pin 탭의 PA1 / ADC1_IN1 / CURRENT_SENSE, Graph 탭의 PA1 / CURRENT_SENSE voltage trace. Raw 값은 Register 탭의 ADC1_DR_CH1. |
| Raw register |
공식 STM32F103 ADC data path의 최종 결과는 ADC_DR에 놓인다. |
ADC1->DR_CH1, watch_u32("current_raw", ...). |
Register 탭의 ADC1_DR_CH1; Code 창 Watch와 Inspector Access 값. |
공식 STM32F103의 ADC1 register block는 0x40012400에서 시작합니다.
현재 실습 subset은 ADC1_CR과 ADC1_DR_CH1을
PA1 / ADC1_IN1 / CURRENT_SENSE 확인용 주소 0x40000010 계열로 사용합니다.
따라서 공식 ADC_DR와 trainer ADC1_DR_CH1을 같은 것으로 쓰지 말고,
“공식 결과 register”와 “현재 실습용 channel-specific data register”로 구분해서 기록합니다.
6 TIM2 PWM 확인: 공식 pin truth와 trainer PA2 route
| 확인 대상 | 공식 문서에서 읽을 내용 | 현재 trainer에서 확인할 것 |
| Pin truth |
DS5319 Table 5: PA2는 실제 STM32F103에서 TIM2_CH3이다. TIM2_CH1은 기본 PA0, remap 시 PA15 쪽이다. |
사이트는 학습용으로 PA2 / PWM_OUT trainer route를 고정한다. 이것을 official TIM2_CH1이라고 쓰면 안 된다. |
| Clock |
TIM2는 APB1 peripheral이므로 RCC->APB1ENR.TIM2EN이 필요하다. |
Register 탭에서 RCC_APB1ENR = 0x00000001을 확인한다. |
| PWM gate / duty |
공식 timer PWM은 PSC/ARR/CCMR/CCER/CCR/CR1 조합으로 동작한다. |
현재 trainer는 TIM2_CCER.CC1E를 gate로, TIM2_CCR1을 0..100 duty command로 단순화한다. |
| UI |
실제 reference manual은 waveform register sequence를 설명한다. |
Pin 탭의 PA2 / PWM_OUT average voltage와 Graph 탭의 PA2 / PWM_OUT trace를 확인한다. |
PWM은 이 사이트에서 가장 헷갈리기 쉬운 부분입니다. 수강생 문서에는 항상 “공식 STM32F103 pin truth”와
“현재 trainer 관찰 route”를 분리해서 적어야 합니다.
7 EXTI6 확인: PA6 HALL_IN interrupt
- 통합 코드를 Build/Run한다.
- Register 탭에서 EXTI_IMR = 0x00000040, EXTI_RTSR = 0x00000040, EXTI_FTSR = 0x00000000를 확인한다.
- Pin 탭에서 PA6 / HALL_IN이 motor Hall pulse에 따라 HIGH/LOW로 바뀌는지 본다.
- Graph 탭에서 PA6 / HALL_IN 또는 Hall count 관련 trace를 확인한다.
- Register 탭에서 EXTI_PR.PR6 pending이 set되고, 코드의 EXTI->PR = (1u << 6) 실행 후 clear되는지 본다.
- Log 탭에서 interrupt event trace를 확인하고, Code 창 Watch에서 Hall/current 값을 비교한다.
공식 STM32F103에서는 EXTI line 6이 EXTI9_5_IRQHandler shared vector에 속합니다.
현재 trainer는 실습을 단순화해 PA6 -> EXTI6 -> HALL_IN route와
dedicated EXTI6_IRQHandler hook만 노출합니다.
8 모터 드라이버 사양과 포트별 출력 확인
| 사이트 pin | 역할 | 코드/register | 데이터시트 연결 | 사이트 확인 |
| PA3 / DRV_EN |
Motor-driver enable 출력. HIGH일 때 driver input stage를 켠다. |
GPIOA_BSRR bit3, GPIOA_BRR bit3, GPIOA_ODR bit3. |
STM32 GPIO output path는 RM0008 Figure 16 p.164, output register는 p.171-p.173. Driver enable/input block은 VNH5019A-E Figure 1 p.5와 application circuits p.15-p.16의 control-input 개념을 참고한다. |
Pin과 Graph에서 PA3 / DRV_EN HIGH/LOW. |
| PA4 / DRV_DIR |
Motor direction 출력. Trainer에서는 LOW=CW, HIGH=CCW로 해석한다. |
GPIOA_ODR bit4를 직접 갱신한다. |
GPIO output data path는 RM0008 p.164, GPIO_ODR는 p.172. H-bridge phase/direction input 개념은 VNH5019A-E p.15-p.16 application circuits와 비교한다. |
PA4 / DRV_DIR 값과 motor direction 표시가 함께 바뀌는지 본다. |
| PA2 / PWM_OUT |
Motor-driver PWM duty 출력. 평균 전압이 duty에 비례한다. |
TIM2_CCER gate, TIM2_CCR1 duty command. |
공식 PWM compare path는 RM0008 Figure 126/127 p.383, PWM waveform은 Figure 130 p.388. Pin truth는 DS5319 Table 5 p.29: PA2는 공식적으로 TIM2_CH3이며, trainer가 TIM2_CCR1로 단순화한다. |
Pin/Graph에서 PA2 / PWM_OUT, Register에서 TIM2_CCR1. |
| PA5 / FAULT_IN |
Board-conditioned active-high fault 입력. ADC가 아니라 digital input이다. |
GPIOA_IDR bit5를 읽고, fault 시 GPIOA_BRR bit3/bit4와 TIM2_CCR1=0으로 stop한다. |
GPIO input path는 RM0008 Figure 15 p.163, GPIO_IDR는 p.172. Driver diagnostic/fault concept는 VNH5019A-E Figure 1 p.5와 p.15-p.16; 실제 low-true diagnostic은 trainer board에서 active-high FAULT_IN으로 변환해 보여준다. |
Pin/Register에서 digital level로 확인한다. |
| PA6 / HALL_IN |
Hall sensor digital pulse / trainer-fixed EXTI6 rising-edge interrupt 입력. |
EXTI_IMR bit6, EXTI_RTSR bit6, EXTI_PR bit6, HALL_COUNT. |
EXTI controller는 RM0008 Figure 20 p.207, GPIO-to-EXTI mapping은 Figure 21 p.210. PA6 pin truth는 DS5319 Table 5 p.29-p.30. |
PA6 / HALL_IN Graph trace, HALL_COUNT, EXTI_PR pending/clear. |
| PA1 / CURRENT_SENSE |
Current-sense amplifier output을 ADC로 읽는 analog input. |
GPIOA_CRL PA1 nibble = 0x0, ADC1_CR bit1, ADC1_DR_CH1. |
ADC block은 RM0008 Figure 22 p.217, conversion timing은 p.220, typical ADC input connection은 DS5319 Figure 38 p.77. Driver current-sense path는 VNH5019A-E application-current-sense 개념과 trainer의 shunt/amp path를 비교한다. |
Graph의 PA1 / CURRENT_SENSE voltage trace와 Register의 ADC1_DR_CH1 raw 값. |
9 수강생 제출 캡처 체크리스트
| 캡처 | 반드시 보여야 할 것 | 문서에서 근거 찾는 곳 |
| Docs | 이 문서와 RCC/GPIOA/ADC1/TIM2 PWM/EXTI/IMS interface HTML 문서가 열리는 화면. | 각 문서의 source basis 또는 official reference basis 표. |
| Register | RCC_APB2ENR = 0x00000205, RCC_APB1ENR = 0x00000001, GPIOA config, ADC1, TIM2, EXTI registers. | RCC enable map, GPIO register map, ADC trainer subset, TIM2 trainer route, EXTI trainer route. |
| Pin | PA3 / DRV_EN, PA4 / DRV_DIR, PA2 / PWM_OUT, PA5 / FAULT_IN, PA6 / HALL_IN, PA1 / CURRENT_SENSE. | GPIO official-versus-simulated table, ADC channel table, TIM2 PWM route table, EXTI route table. |
| Graph | PA2 / PWM_OUT, PA1 / CURRENT_SENSE, PA5 / FAULT_IN, PA6 / HALL_IN 중 실습 대상 trace. | 이 문서의 GPIO/ADC/PWM/EXTI UI 확인 절. |
| Watch / Access | watch_u32()로 찍힌 CURRENT_SENSE raw 값과 Hall/fault digital feedback 값, 그리고 register read/write. | 통합 코드와 ADC/GPIO/EXTI 확인 절. |
| Log | trace_u32()/trace_str() 이벤트 로그와 register 변경 로그. | 통합 코드와 EXTI6 확인 절. |
| Mission | Mission 통과 여부가 Register/Pin/Graph/Log 캡처와 모순되지 않는지 확인한다. | 사이트의 Mission tab, Board의 Mission 관련 상태 표시. |
LAB-DS-SITE001 Rev 1.0Official source first, trainer subset second