아래 그림은 확장보드에 그림의 일부를 잘라낸 그림 네모친 부분이 스위치키이다.
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 |
---|