211123_class

1 minute read

Micro Controller

MCU : Micro Controller Unit
MCU = CPU + Memory

Compile - 변역
Fusing - Download

RAM(휘발성) - 변수
ROM(비휘발성) - 코드

Interrupt

GPIOG->ODR = GPIOG->ODR ^ (1 « 10);
원하는 부분 반전
ODR 레지스터 : OUT으로 설정된 PIN의 출력여부 결정하는 레지스터 (0~15)
Output data register

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  if(GPIO_Pin == GPIO_PIN_15)
  {
	GPIOG->ODR = GPIOG->ODR ^ (1 << 10);
  } 

}


G포트 10번 반전, 15번 출력핀(SW7)으로 인터럽트 생성

Servo Motor

MG90
PWM Period : 20ms (50Hz) 제품 사양

:Prescale: 720 72
:Period: 2000 20000

Period 가 크면 더 세밀하게 조절 할 수 있다.

Step Motor

period 줄이면 빠르게 돈다.
빠르게 순환해야함(Rising에 따라 회전)

참고

고민할 것

struct vs union
구조체 주소 한번에 잡힘
union 최대 크기만 잡힘

Address offset, segment 이란?

해석되어있는 블로그

  1. 실제 계산 능력보다 더 큰 자리수를 연산하기 위해
  2. 메모리 절대 주소(물리적 주소)를 알 수 있음
    (segment : offset) 메모리 절대 주소 = offset Register + segment*bit


용어

C언어 주소 직접 제어
volatile 아니고 읽기만 하면 사라짐, register 값 고정용
BSRR 상위(16개)1로 -> 0(reset), 하위(16개)1-> 1(set)
BSRR : Bit Set/Reset Register
16u (u : unsigned)

byte

1byte = 8bit
8bit => 0000 0000 (4자리 -> 8421 = 0~15, 0~F)
Hex => 0x00
즉, 1byte 를 16진법 2자리로 표현가능

32비트 보드
32bit = 4byte 한번에 처리
4byte Hex => 0x00000000 => 00 00 00 00 표기
Hex 한개에 4bit 씩이니까 0123…핀으로 사용가능
12번 핀이면 0x0000 1000, 13번 핀이면 0x0000 2000 0123 번 핀 다 사용하면 0x0000 000F

32비트 보드가 한 포트당 16개인 이유
해석되어있는 블로그
핀 한개당 2bit를 사용하여 용도를 정할 수 있음
00 : 입력
01 : 출력
11 : 아날로그
10 : 특정 기능
참조) 카르노 맵


Go to top

Leave a comment