문제 설명
CMSIS 기반 레지스터 접근 방식을 사용하여 GPIOA 핀을 직접 제어하는 LED 점멸 프로그램을 작성하라.
- RCC 레지스터를 이용해 포트 A 클럭을 활성화
- GPIOA의 CRL, ODR 레지스터를 직접 설정하여 LED ON/OFF 구현
- LED 상태를 일정 시간 간격으로 토글하여 깜빡이도록 함
정답 코드
#include "device_driver.h"
void Main(void)
{
volatile int i;
Uart_Init(115200);
Uart_Printf("CMSIS Based Register Define\n");
// 이 부분은 수정하지 말 것
RCC->APB2ENR |= (1<<2);
// LED Pin을 출력으로 설정
GPIOA->CRL = 0x600;
for(;;)
{
// LED 모두 ON
GPIOA->ODR = 0x0;
for(i=0; i<0x40000; i++);
// LED 모두 OFF
GPIOA->ODR = 0x4;
for(i=0; i<0x40000; i++);
}
}
메모
printf 내부의 \n 습관화 필요