그라운드 임베디드 EN 유튜브 구독

노트 / 컴퓨터구조

버스와 주변장치: AHB, APB, 메모리 맵 I/O

CPU가 GPIO를 움직이는 방법은 메모리에 값을 쓰는 것과 같습니다. 주변장치를 잇는 버스 구조와 클럭 활성화가 필요한 이유.

GROUND EMBEDDED · 정리 노트컴퓨터구조 06버스와 주변장치 1RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;// 이 …

메모리 맵 I/O

ARM에는 I/O 전용 명령어가 없습니다. 주변장치 레지스터가 메모리 주소에 배치되어 있어서, 일반 메모리 쓰기 명령(STR)으로 GPIO 핀을 바꾸고 읽기 명령(LDR)으로 UART 수신 데이터를 가져옵니다.

버스 계층

CPU 코어AHB빠른 버스GPIO, DMA브리지APB타이머, UART, I2C
코어에서 주변장치까지. 빠른 것은 AHB에, 느린 것은 APB에 붙습니다.
버스 속도 연결 대상
AHB 빠름 Flash, SRAM, DMA, GPIO(일부 칩)
APB1 느림 UART2, I2C, 일반 타이머
APB2 중간 UART1, SPI1, ADC, 고급 타이머

APB는 AHB에서 브리지를 거쳐 나뉘고, 각각 다른 클럭 분주를 씁니다. 그래서 같은 타이머라도 APB1에 붙었는지 APB2에 붙었는지에 따라 입력 클럭이 다릅니다.

클럭 활성화

RCC에서 클럭 켜기레지스터 설정주변장치 동작
주변장치는 클럭을 켜야 동작합니다. 켜기 전에 레지스터에 쓰면 아무 일도 일어나지 않습니다.

전력을 아끼기 위해 대부분의 주변장치는 리셋 후 클럭이 꺼져 있습니다. 레지스터를 쓰기 전에 RCC에서 해당 주변장치의 클럭을 켜야 합니다.

RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;   // 이 줄이 없으면 GPIOA 설정이 먹지 않음

"코드는 맞는데 핀이 안 움직인다"는 문제의 상당수가 이 한 줄을 빠뜨린 것입니다.

영상으로 이어 보기회로와 하드웨어 시리즈 8편전자제품 속 회로 소자는 어떻게 동작할까? · 저항 · 커패시터 · 인덕터 완벽 정리FREE PDF무료 전자책 3권 받기이 주제를 한 권으로 이어서 읽고 싶다면. BLDC 모터 제어, 직렬통신, 센서를 책 분량으로 묶었습니다. 이메일만 남기면 바로 받습니다.무료로 받기 →