Home > Study > C Language > ARM System Programming > [ex20] 평가문제 1

[ex20] 평가문제 1
Study Language

문제 설명


다음 요구하는 기능을 만족하는 코드를 작성하라

[요구 사항]

  • LCD 보드의 방향키(JOG)의 DOWN Key는 PB5번에 연결되어 있다.
  • 단, 이 KEY는 Pullup 저항을 연결하지 않은 상태라 누르면 GND에 연결되어 0이지만 떼면 Floating 상태가 된다.
  • 이 JOG의 DWON Key를 누르면 LED0이 ON되고 떼면 OFF가 되는 코드를 구현하라
  • (주의) 외부에 Pullup 저항이 없으므로 마이컴 내부의 Pullup 저항을 사용하도록 설정하여야 한다.
  • 내부 Pullup 사용은 교재 221 페이지 표를 참고하라 (Input Pullup, Pulldown 모두 1000으로 설정하되
    ODR 레지스터의 해당 비트를 0으로 하면 Pull-down, 1로하면 Pull-up 사용이 enable 된다.)
  • (주의) B 포트의 클록이 활성화(전원 인가)되어야 하므로 다음 코드를 꼭 시작부분에 추가한다.
RCC_APB2ENR |= (1<<3);

[제출 요령]

  • 코드를 완성하면 반드시 동작 확인을 받은후 강사 지시에 의하여 코드를 업로드해야 함
  • 임의로 코드 제출시 해당 문항 0점 처리되므로 주의 바람
  • 모든 코드는 main.c 하나의 파일에만 작성할 것
  • 다른 파일에 있는 수업때 제공 또는 작성한 코드를 사용한 경우는 복사하여 제출할 필요 없음 (예) LED_Display 함수 등
  • 코드는 작성한 main.c의 전체를 복사하여 제출할 것 (다만 작성 코드와 무관한 기존 코드는 제거할 것)

정답 코드


#include "device_driver.h"

void Main(void)
{
	Macro_Set_Bit(RCC->APB2ENR, 3);
	Macro_Write_Block(GPIOB->CRL, 0xf, 0x8, 20);
	Macro_Set_Bit(GPIOB->ODR, 5);
	Macro_Write_Block(GPIOB->CRH, 0xf, 0x6, 0);
	Macro_Set_Bit(GPIOB->ODR, 8);

	while (1)
	{	
		if (Macro_Check_Bit_Clear(GPIOB->IDR, 5)) Macro_Clear_Bit(GPIOB->ODR, 8);
		else Macro_Set_Bit(GPIOB->ODR, 8);
	}
}

메모


printf 내부의 \n 습관화 필요