본문 바로가기

stm32사용하기 LED & KEY

반응형

강좌 보러 가기

잡동사니 세상 :: stm32 레지스터 직접 접근 (소개) (tistory.com)

 

stm32 레지스터 직접 접근 (소개)

저번에 올린 3개짜리 짧은 포스트는 중단하고, 이번에 산 책 내용을 기반으로 stm32f103zet6를 제어해보려고 합니다. 라이브러리를 사용하는 방식보단, 레지스터에 직접적으로 접근하여 보다 Microcon

pkr7098.tistory.com

 

 

stm32를 드디어 테스트 해봤다.

 

AVR보다 어렵고 방대한 양 때문에

예제를 기반으로 진행하면 빠른 진행이 가능하기에

KEY_LED라는 예제를 수정하여 LED와 KEY를 다뤄봤다.

 

일단 원래 코드

 

직접 수정해본 코드

 

 

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
int main(void){
  uint8_t Key;
  GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG , ENABLE);
  /** *  LED1 -> PF6 , LED2 -> PF7 , LED3 -> PF8 , LED4 -> PF9 */      
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOF, &GPIO_InitStructure);
  /* Key */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 
  GPIO_Init(GPIOC, &GPIO_InitStructure);
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOG, &GPIO_InitStructure);
 /* Infinite loop */
  while (1) {
  if(!(GPIOC->IDR & 0x0001))   Key=1;
  else if(!(GPIOC->IDR & 0x0002))   Key=2;
  else if(!(GPIOC->IDR & 0x0008))   Key=3;
  else if(!(GPIOC->IDR & 0x0004))   Key=4;
  else if(!(GPIOG->IDR & 0x0100))   Key=5;
  else if(!(GPIOG->IDR & 0x0040))   Key=0;
  switch(Key)  {
  case 0:
    GPIO_SetBits(GPIOF , GPIO_Pin_6);
    GPIO_SetBits(GPIOF , GPIO_Pin_7);
    GPIO_SetBits(GPIOF , GPIO_Pin_8);
    GPIO_SetBits(GPIOF , GPIO_Pin_9);
    Delay(0xfffff);
    GPIO_ResetBits(GPIOF , GPIO_Pin_6);
    GPIO_ResetBits(GPIOF , GPIO_Pin_7);
    GPIO_ResetBits(GPIOF , GPIO_Pin_8);
    GPIO_ResetBits(GPIOF , GPIO_Pin_9);
    Delay(0xfffff);
   break;
  case 1:
    GPIO_SetBits(GPIOF , GPIO_Pin_6);
    Delay(0xfffff);
    GPIO_ResetBits(GPIOF , GPIO_Pin_6);
    Delay(0xfffff);
   break;
  case 2:
    GPIO_SetBits(GPIOF , GPIO_Pin_7);
    Delay(0xfffff);
    GPIO_ResetBits(GPIOF , GPIO_Pin_7);
    Delay(0xfffff);
   break;
  case 3:
    GPIO_SetBits(GPIOF , GPIO_Pin_8);
    Delay(0xfffff);
    GPIO_ResetBits(GPIOF , GPIO_Pin_8);
    Delay(0xfffff);
   break;
  case 4:
    GPIO_SetBits(GPIOF , GPIO_Pin_9);
    Delay(0xfffff);
    GPIO_ResetBits(GPIOF , GPIO_Pin_9);
    Delay(0xfffff);
   break;
  case 5:
    GPIO_SetBits(GPIOF , GPIO_Pin_6);
    Delay(0xfffff);
    GPIO_ResetBits(GPIOF , GPIO_Pin_6);
    GPIO_SetBits(GPIOF , GPIO_Pin_7);
    Delay(0xfffff);
    GPIO_ResetBits(GPIOF , GPIO_Pin_7);
    GPIO_SetBits(GPIOF , GPIO_Pin_8);
    Delay(0xfffff);
    GPIO_ResetBits(GPIOF , GPIO_Pin_8);
    GPIO_SetBits(GPIOF , GPIO_Pin_9);
    Delay(0xfffff);
    GPIO_ResetBits(GPIOF , GPIO_Pin_9);
   break;
  }
 }
}
cs

 

 

 

 

 

일단은 아무런 지식 없이 함수만 수정해 봤는데,

다음에는 정식으로 각 함수들의 기능을 살펴보면서 해볼 계획이다.

반응형