2014년 11월 11일 화요일

MangoM32 LED 제어

[출처]http://kjung.tistory.com/entry/719-ARM-LED-%EC%A0%9C%EC%96%B4

기본적으로  STM32T103 RBT6 칩이 달린 MANGO - M32 보드를 이용하여프로그램을 짠다.

일단 기본적으로 보드를 연결하기위해서는 

보드(당연히..) USB(전원용) 3pin포트(데이터를 다운로드하기위한..)
프로그램은 
보드에 프로그램을 쓰기위한
와 코드를짜기위한 EWARM-KS-WEB-5505.exe 프로그램 (www.iar.com여기서 받을수있다.)

이 필요하다.

위 두가지 프로그램이 준비되면 프로그램을 짜고 구동할수있다.

소스는 기본적으로 아트메가와 비슷하다.

 LED 제어
int main(void)
{
    // RCC APBPheri - GPIOB Enable
    (*(volatile unsigned *)0x40021018|= 0x8;
    
    (*(volatile unsigned *)0x40010C00|= 0x3<<20;
    (*(volatile unsigned *)0x40010C04|= 0x33;
    
}





일단 LED를 제어하려면, PORTB에 연결된 5,8,9번 핀을 제어해야한다는것을 위 회로도를 보면 알수있다.

우선  ARM은 아트메가와는 달리 항상 포트를사용할땐 클럭주어 포트를 열어줘야한다.


위 그림을 보면 IOPBEN, 즉 POTB를 ENABLE 한다는 것이다.
이것을 1로 주게하려면, 4번째 자리. 즉,
    (*(volatile unsigned *)0x40021018) |= 0x8;
이렇게 주게되는것이다.
이렇게하여 포트를 열어준 뒤,
또 이번에는 PIN제어를 하겠다고 선언해 주어야한다. 즉,

위그림의 5번,8번,9번 이다.

즉 CRL의 20번쨰, CRH의 1~4번쨰 이다.

    (*(volatile unsigned *)0x40010C00|= 0x3<<20;
    (*(volatile unsigned *)0x40010C04|= 0x33;

왜 0x3일까..? 16진수는 2진수 4자리다. 즉, 0x3은 2진수로 0011 이다.
그렇다면 b0011은 왜넣는것일까?
그에 해답은 아래그림과 같다.


0011은 CNF 를 00, MODE 를 11로 한다는것이다.
이렇게하여 각핀마다 출력설정을 해주게되면 LED가 작동하게된다.
그렇다면 끄고 키는건 어떻게 해야할까?
PORTB를 살펴보자.

위 그림을 보게되면 BSRR과 BRR이 있다.
그런데 잘보면 BSRR에 BR도 있고 BSR도 있으며,
BRR에도 BR이 있다.

이것은 왜 그런것이냐면, 예전에는 BSRR 하나로 BR과 BSR을 동시에 작동시켯으며, 지금은 두개로 나눠저서 그렇다.

이말은 무슨말이냐고 하면, 아트메가와는 달리 0이면 켜지고 1이면 꺼지는 것이 아니라,

BSS의 PIN 1 에 1을 넣으면 1번 핀이 작동하고, BSRR의 PIN 1에 1을 넣으면 1번핀이 꺼지게된다.

즉, 내부적으로 BSS가 0을, BSRR이 1을 넣어준다고 생각하면 된다.

이렇게 값을 넣어 작동을 시키면 R G Y 색들을 순서대로 점등시키기 등을 할수 있을 것이다.

저작자 표시

'--------------------- > ARM' 카테고리의 다른 글

7/21 ARM FND 제어  (0)2010/07/21
7/19 ARM LED 제어  (0)2010/07/19
Posted by 김진웅
0 | 0
  12  

댓글 없음:

댓글 쓰기