블로그 이미지
송시혁

calendar

1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

Notice

Tag

Recent Post

Recent Comment

Recent Trackback

Archive

'stm32f417IG'에 해당되는 글 2

  1. 2014.02.21 스위치 폴링 방식으로 제어 LED켜기1
  2. 2014.02.04 stm32417IG LED 켜기
2014. 2. 21. 15:22 stm32f417IG


아래 그림은 확장보드에 그림의 일부를 잘라낸 그림 네모친 부분이 스위치키이다.

wakeup, tamper, user key라고 되어있는데 이건 그냥 이름일 뿐... 그다지 기능이 있는거 아님


임베디드 wakeup은 따로 있으니 헷갈리지 말자!!! 아무튼 이 3개의 key가 있는데 이중에서 필자는

wakeup키를 이용해서 led켜고자 한다. key하나만 성공하면 나머지는 핀설정과, 포트 설정만 하면 되기

때문에 따로 설명하지는 않겠다. 나중에 외부 인터럽트를 걸어서 key를 제어는 따로 포스팅 하겠다.





아래그림에서 wakeup pa0,  즉 포트 A의 0번 핀이 된다. 그래서 나중에 i/o부분을 portA와 0번을 설정한다


아래 그림은 wakeup 키에 대한 세부 회로도. 나중에 설정시 pull-down으로 설정한다. 필자는 pull-up으로 

설정하다가 안되서 굉장히 삽질하였다. ㅜㅜ




각 key에 대한 define되어 있다. 이것을 끌어다 쓰면 끝이다. 



아래 그림부터 main 함수 항상 클럭을 공급해야 한다. GPIO와 관련되 포트들은 AHB1이므로 AHB1

클럭을 공급한다. 이 함수의 설명 또한 따로 포스팅한다. 지금은 클럭을 공급한다라고 알아두자.



위의 그림도 led on/off 와 마찬가지로 구조체 설정을 한다. 주의 사항은 위에서도 잠시 언급했듯이 스위치 부분은 

입력모드로 반드시 pull-down이나 아니면 pull up/down을 쓰지 않도록 설정해야 스위치가 입력으로 먹힌다. 




이부분은 while(1) 루프에서 잘라낸것이다. 즉 계속해서 돌고 있으며,

스위치를 누를 때마다 LED를 켜고 끌 수 있다. 그리고 if 조건문을 보자. 



아래 그림은 if조건문 안에서 호출한 함수 내용이다. 해당 입출력 포트에 idr(input data register)와 핀을 마스킹하여 0이면 0을 리턴하고 0이 아니면 1을 리턴한다. 


Bit_SET은 1, Bit_RESET은 0으로 define 되어있다. 그냥 1과 0일 뿐이다.  그래서 다시 main함수 바로 위 그림에서 1반환값이 1이면 on, 0이면 off를 하게 된다. 


아래 검은색 네모는 일단 pass한다. 해당 함수의 인자를 체크해서 해당 인자가 있으면, 함수 아래 내용을 실행하고 없으면 실행하지 않는 매크로(? 정확하지 않음) 함수라고 추측하고 있다. 자세히는 모르므로 일단 pass

다른 스위치도 이와 같이 해당 핀과 포트만 설정한다면 똑같이 동작한다. 그러나 이러한 방식은 polling방식이다.

process는 while문이나 for루프를 돌고 있을 때, 다른 작업을 할 수 없다. 하지만, 거의 모든 제품은 어떤 key를 눌렀을 

때,  다른 동작을 수행한다. 그래서 인터럽트가 필요한 것이다. 인터럽트 또한 따로 포스팅한다. 지금은 기초를 익히자

'stm32f417IG' 카테고리의 다른 글

stm32417IG LED 켜기  (0) 2014.02.04
posted by 송시혁
2014. 2. 4. 12:18 stm32f417IG


필자는 데이터시트를 찾아내지 못해 st에서 제공하는 라이브러리 파일을 이용하여 분석해 나간다.



회로도 일부 잘라낸것

위의 잘 보면 LED1이랑 PG6과 연결이 되어있다. PG는 PORTG를 뜻한다. 따라서 LED1, 2, 3, 4를 단순히 ON시킨다고

가정할 경우 위의 그림처럼, PORTG6, 8, PORTI9, PORTC를 사용하여햐 한다. 핀 또한 6,8,9,7을 사용하여야 된다는 것을 알 수 있다.


LED INIT 분석 


GPIO_PuPd_UP은 pull up으로 설정하는 것. 위 그림의 주석은 오타이다. 

GPIO를 설정하고 포트를 설정한다. 


RCC_AHB~~~어쩌고 하는 함수는 해당 포트에 클럭을 enable하는 함수이다. 저것을 호출하지 않으면

동작하지 않는다. 이 함수의 내용은 필자도 아직 자세히 모르니 클럭을 공급한다라고 정도만 알아두자.


GPIO_Init함수가 호출되어 잇다. 위에 설정한 구조체멤버들을 각 해당 레지스터 비트에 설정하는 함수가 되겟다. 

자세한 분석은 역시 pass한다. stm32f417에 관한 데이터시트가 아직 찾지 못했으므로 나중에 따로 정리한다.

일단은 이 함수가 초기화 설정을 한다라고 만 알아두자.



 위의 GPIO_PORT[4]의 4개의 인덱스를 갖는 배열이며, 각 원소의 핀과 포트의 대한 정의가 아래에 나와있다. 

아래에 네모친 부분은 PIN6의 포트G가 된다. 즉 PG6이며,  LED1이 되는 것이다. 위의 회로도와 일치한다.


저 위의 함수만 호출하면 LED의관한 초기화는 끝난것이다. 


아래는 LED를 on/off/toggle시키는 함수이다. 


led를 on/off는 BSRR(bit set reset regiser)가 관장한다. BSRR은 상위비트와 하위비트로 나누어져 있다.

이것은 필자의 추측인데 상위 비트를 1로 설정시  reset, 하위비트가 1로 설정시 set이 되게 하는것 같다

데이터시트가 없으므로 확신은 할 수 없으나, 암튼 아래 함수를 이용하면 on/off/toggle이 가능한 것은 확실하다.



아래는 토글 함수이다. LED를 깜박이는 함수이다. ODR은 output data register를 ^ exclusive or시킨다.

xor은 같은 것은 0 다른것이 1이기 때문에 비트를 반전 시킨다고 보면 된다. 그래서 해당 핀과 xor시키면

비트가 1이면 0, 0이면 1로 반전시키게 된다. 


아래는 헤더 파일에 있는 GPIO의 레지스터들이다. 




'stm32f417IG' 카테고리의 다른 글

스위치 폴링 방식으로 제어 LED켜기  (1) 2014.02.21
posted by 송시혁
prev 1 next