마이크로 프로세서 LED 실습

Download Report

Transcript 마이크로 프로세서 LED 실습

마이크로프로세서
보드 제작 및 LED 실습
IRL 김도형
마이크로 프로세서
1. Cortex-M3 보드 만들기
2. 간략한 회로도
3. GPIO LED 실습
Intelligent Robots Laboratory
15. 9. 17
마이크로 프로세서
Intelligent Robots Laboratory
핀의 위치는 왼쪽부터 오른쪽 그림과 같다.
Cortex-M3의 운영 전압은 3.3v이다. 3.3v이상의 전압을 주지 않도록 주의.
15. 9. 17
마이크로 프로세서
Intelligent Robots Laboratory
보드 납땜시 핀 헤더 소켓을 활용하여 보드를 탈부착 가능하도록 제작합니다.
레귤레이터를 사용하여 M3 보드에 3.3v를 사용할수 있도록 합니다.
5v는 다른 기능에 사용할 예정.
15. 9. 17
마이크로 프로세서
Intelligent Robots Laboratory
LED와 저항을 가까이 붙이면 납땜을 수월하게 할 수 있습니다.
납땜시 전선을 +는 적색, -는 검은색, 기타 신호 및 입출력 연결은 다른 색상을 사용하세요.
LED의 핀의 부호를 확인하고 납땜하세요. 일반적으로 다리가 긴쪽이 +
15. 9. 17
Intelligent Robots Laboratory
마이크로 프로세서
빨간 네모의 위치가 PA4,5,6위치이다.
저 부분에 LED를 연결해주면 된다.
위에서 이미 핀 배치도를 첨부했지만
좌우 위치때문에 헷갈리는 학생을 위해
사진을 첨부한다.
15. 9. 17
마이크로 프로세서
Intelligent Robots Laboratory
15. 9. 17
이번주에 제작할 회로는
왼쪽 그림과 같으며
저항은 무엇을 사용해도
무방하나 330옴을 사용하길
추천함.
PB5,8,9핀에 보드에 자체
제작된 LED3개와 우리가
붙인 LED 3개를 가지고
실습할 예정.
마이크로 프로세서
Intelligent Robots Laboratory
15. 9. 17
왼쪽 아래 그림은 7805 레귤레이터
회로도 입니다.
10v정도 Vin으로 입력하는 것을 추천합니다.
왼쪽 첫번째 그림은 각핀에 대한 정보인데
7805라는 부품명이 써있는 곳을 정면으로
바라보았을때 왼쪽부터 1번 핀입니다.
위에 있는 그림은 정면부를 나타내며
사용자에 기호에 따라 방열판을 장착하는
경우도 있지만 달지 않아도 무방합니다.
구동시 열때문에 뜨거우니 사용간 조심합니다.
Intelligent Robots Laboratory
마이크로 프로세서
15. 9. 17
왼쪽 그림은 lm1117-3.3 레귤레이터 회로도 입니다.
위 그림에서 핀 위치에 대한 정보가 상세히
나와 있습니다.
각 핀별로 캐패시터를 장착하여 사용하면 됩니다.
Vout핀의 3.3v를 M3 보드의 VDD에 연결해서
전원을 인가해주면 됩니다.
http://www.alldatasheet.co.kr/
위 주소에서 부품을 검색하여 데이터시트를 참고.
마이크로 프로세서
Intelligent Robots Laboratory
GND(접지)도 위에 표시는 안했지만 필히 납땜으로 연결해야 합니다.
보드를 연결하여 동작을 확인하기 전에 반드시 3.3v가 나오는지 확인하세요.
15. 9. 17
1.1 GPIO 실습
Intelligent Robots Laboratory
■ LED 토글 실습
 본 예제는 GPIO 핀에 연결된 LED를 1초마다 ON/OFF 시키는 프로그램을 실습
해본다.
 출력 포트: PORTB pin9
 RCC APB 주변장치 허용 레지스터2(RCC_APB2ENR)
• Clock 설정: IOPBEN 비트 enable (I/O port B clock enable)
• 주소: 0x4002 1000(RCC 시작 주소) + 0x18(Offset) = 0x4002 1018
: IOPBEN enable(3번째 비트): (*(volatile unsigned *) 0x40021018) |= 0x8;
 포트 B 설정 레지스터(GPIOB_CRH)
• 출력 모드 설정: CNF9[1:0] = 00, MODE9[1:0] = 01
• 주소: 0x4001 0C00(GPIO Port B 시작주소) + 0x04(Offset) = 0x4001 0C04
 포트 B 세트/리셋 레지스터(GPIOB_BSRR)
• 출력 설정: BS9를 ‘1’로 SET -> Port B 9번 핀으로 ‘1’ (high) 출력
• 주소: 0x4001 0C00(GPIO Port B 시작주소) + 0x10(Offset) = 0x4001 0C10
 포트 B 리셋 레지스터(GPIOB_BRR)
• 출력 설정: BR9를 ‘1’로 SET -> Port B 9번 핀으로 ‘0’ (low) 출력
• 주소: 0x4001 0C00(GPIO Port B 시작주소) + 0x14(Offset) = 0x4001 0C14
15. 9. 17
1.1 GPIO 실습
Intelligent Robots Laboratory
15. 9. 17
마이크로 프로세서
//LED Shift Example
static void delay_int_count(volatile unsigned int nTime)
{
for(; nTime > 0; nTime--);
}
void delay_1_second(void)
{
delay_int_count(806596);
}
int main(void)
{
(*(volatile unsigned *)0x40021018) |= 0x8;
// PIN #5
(*(volatile unsigned *)0x40010C00) &= 0xFF0FFFFF;
(*(volatile unsigned *)0x40010C00) |= 0x100000;
// PIN #9 & #8
(*(volatile unsigned *)0x40010C04) &= 0xFFFFFF00;
(*(volatile unsigned *)0x40010C04) |= 0x10;
(*(volatile unsigned *)0x40010C04) |= 0x1;
Intelligent Robots Laboratory
while(1)
{
(*(volatile unsigned
delay_1_second();
(*(volatile unsigned
delay_1_second();
(*(volatile unsigned
delay_1_second();
(*(volatile unsigned
delay_1_second();
(*(volatile unsigned
delay_1_second();
(*(volatile unsigned
delay_1_second();
}
} // end main
*)0x40010C14) |= 0x20;
*)0x40010C10) |= 0x20;
*)0x40010C14) |= 0x200;
*)0x40010C10) |= 0x200;
*)0x40010C14) |= 0x100;
*)0x40010C10) |= 0x100;
15. 9. 17
1.1 GPIO 실습
Intelligent Robots Laboratory
■ LED 토글 실습
(*(volatile unsigned *) 0x40021018) |= 0x8; // RCC_APB2ENR에서 PORTB enable
(*(volatile unsigned *) 0x40010C04) |= 0x10; // PORTB의 9번핀의 CRH의 output mode 설정
 Volatile ?
 휘발성, 컴파일러에게 절대로 효율적이라고 판단하지 말고 적혀있는 그대로 컴파일 하
라고 알려주는 keyword
15. 9. 17
1.1 GPIO 실습
Intelligent Robots Laboratory
■ LED 토글 실습
(*(volatile unsigned *) 0x40021018) |= 0x8; // RCC_APB2ENR에서 PORTB enable
(*(volatile unsigned *) 0x40010C04) |= 0x10; // PORTB의 9번핀의 CRH의 output mode 설정
15. 9. 17
1.1 GPIO 실습
Intelligent Robots Laboratory
15. 9. 17
1.1 GPIO 실습
■ LED 토글 실습
// PIN #5
(*(volatile unsigned *)0x40010C00) &= 0xFF0FFFFF;
(*(volatile unsigned *)0x40010C00) |= 0x100000;
Intelligent Robots Laboratory
15. 9. 17
1.1 GPIO 실습
■ LED 토글 실습
(*(volatile unsigned *)0x40010C14) |= 0x20;
delay_1_second();
(*(volatile unsigned *)0x40010C10) |= 0x20;
delay_1_second();
Intelligent Robots Laboratory
15. 9. 17
마이크로 프로세서
심화 문제 1) LED 6개를 가지고…
심화 문제 2) LED 6개를 가지고…
수업때 공개예정
Intelligent Robots Laboratory
15. 9. 17
Intelligent Robots Laboratory
마이크로 프로세서
수고하셨습니다.
15. 9. 17