[펌웨어] Clock & UART

정재훈·2022년 4월 28일
0

FirmWare

목록 보기
2/7

Clock

Digital 신호

1과 0 로 표현하는 신호
특정 전압을 걸면 “1” 로 인식 (=High)
0V(Ground) 이라면 “0” 으로 인식 (=Low)
과거 5V 를 많이 사용했으며 , 현재는 3.3V 가 주로 쓰임

Rising Edge & Falling Edge

  • Level : 1,2,6
  1. High Level : 1,6
  2. Low Level : 2
  • Edge : 3,4,5,7
  1. Rising Edge : 3,5 - CPU가 동작되는 순간
  2. Falling Edge : 4,7

클럭

서로신호를 맞추어 동작되기 위해 사용
박자를 맞추어 , 여러 장치들이 동시에 동작되기 위함 동기화를 위함

클럭 발생기

Clock Generator
주기적인 클럭 발생장치를 Oscillator ( 발진기 ) 라고 한다. 클럭을 기준으로 동작하기 때문에 꼭 필요하다.
MCU 내부에도 Oscillator 가 있으며 필요시 외부에 추가로 Oscillator 달아주곤 한다.

내장 Oscillator만 사용하지 않는 이유

  1. 온도 등 노이즈 영향으로 클럭이 정확하지 않을 수 있다. 클럭이 정확하지 않으면 , Timer 가 정확하지 않음
  2. 특정 부품에 필요한 클럭을 공급해줄 수 있다. 외부 Ocillator 를 사용하여 , MCU 내부 Ocillator 보다 빠른 속도의 클럭을 발진할 수 있음

클럭 분주기

프리스케일러 회로를 사용하여 원하는 클럭에 낮추어 맞춘다.

UART

두장치간 통신을 위해 UART / I2C / SPI통신 중 선택해서 사용 가능하다.

F103RB보드와 PC 간 문자를 주고 받는 통신
1. 보드에서 printf 사용시 : PC 에서 글자 출력
2. 보드에서 scanf 사용시 : PC 에서 문자 입력

초기셋팅
Connectivity > USART2 > Mode를 Asynchronus로 바꿔주기!

int _read(int file, char *ptr, int len)  // printf 실행시 호출
{
	HAL_UART_Receive(&huart2, (uint8_t*)ptr, 1, 0xFFFF);
	HAL_UART_Transmit(&huart2, (uint8_t*)ptr,1,100);
	return 1;
}
int _write(int file, char *ptr, int len)  // scanf 실행시 호출
{
	HAL_UART_Transmit(&huart2, (uint8_t*)ptr, len, 100);
	return len;
}

함수 재정의는 main 함수 위쪽에, 실행 코드는 main 함수 내부 while문에 작성
============================ ========================================

uint8_t buf[10] = "HI";
while(1)
{
	 HAL_UART_Transmit(&huart2, buf, 10, 100);  // UART에 Text 출력방법 1
	 HAL_Delay(100);

	 printf("jaehoon\r\n");  // UART에 Text 출력방법 2 - 상단에 정의해준 _write함수가 실행된다.
	 HAL_Delay(1000);
}
profile
여러 방향으로 접근하는 개발자

0개의 댓글