[WAT-STM32-2.8] 13번 예제 버턴으로 LED ON/OFF

[WAT-STM32-2.8] 13번 예제 버턴으로 LED ON/OFF

WAT-STM32-2.8 예제 중 13번째로 버턴1을 누를 때마다 LED ON/OFF 하는 예제입니다.

 

 

주요 코드

KEY 초기화 함수

void Key_init()
{
	RCC->APB2ENR|=RCC_APB2Periph_GPIOA;	/* GPIOA  PORT Enable */
	GPIOA->CRL&=0XFFFFFFF0;  
	GPIOA->CRL|=0X00000008;   //PA INPUT
}

 

main() 함수

// WAT_STM3228_13 example KEY INPUT, LED OUT
// 키 눌림 상태에 따라 LED ON/OFF
//
// 출처: https://docs.whiteat.com/?p=3693
// 

#include "main.h"
#include "rcc.h"
#include <stdio.h>

#define LEDON 	  (GPIOB->BRR = GPIO_Pin_2)
#define LEDOFF 	  (GPIOB->BSRR = GPIO_Pin_2)

#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) 
#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr)) 
#define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum))
#define PAin(n)    BIT_ADDR(GPIOA_IDR_Addr,n) 
#define KEY0  PAin(0) 
/**********************************************************************************/

LED_init()
{
  	RCC->APB2ENR |= RCC_APB2Periph_GPIOB;	/* GPIOB  PORT Enable */

	/*-- GPIO Mode Configuration speed, input/output -----------------------*/
	/*-- GPIOB max speed: 50MHz , General purpose output push-pull  ---*/
	GPIOB->CRL &=  0xFFFFF0FF;
	GPIOB->CRL |=  0x00000300;
}

void Delay(vu32 nCount)	 // delay function
{
  for(; nCount != 0; nCount--);
}

void Key_init()
{
	RCC->APB2ENR|=RCC_APB2Periph_GPIOA;	/* GPIOA  PORT Enable */
	GPIOA->CRL&=0XFFFFFFF0;  
	GPIOA->CRL|=0X00000008;   //PA INPUT
}
		
int main(void)
{
	unsigned int key_up =1;
 	RCC_init();		// RCC 초기화
	LED_init();		// LED 초기화
	Key_init();		// KEY 초기화
  	
	while (1)
  	{		
			if(key_up)
				LEDON;			 // LED ON
			else 
				LEDOFF;			 //LED OFF

			if(KEY0==0)
				key_up = !key_up;			
  	}
}

결과화면

버턴1을 한번 누르면 LED ON, 한번 더 누르면 LED OFF 를 하려고 했으나 잘 안 될 것입니다.
ON,OFF 가 의도치 않은 동작을 하게 됩니다.

 

 

 

다음 장 넘어가지 전에

왜 LED ON/OFF 동작이 이상하게 동작하는지 생각해 보세요.
다음 장에서 이유와 해결 방법을 알려 드리겠습니다.^^

 

WAT-STM32-2.8보드  전체 예제

[WAT-STM32-2.8] STM32F103RB Board + 2.8인치 TFT LCD 터치 세트

제품 구매

WAT-STM32-2.8 [STM32F103RB Board + 2.8인치 TFT LCD 터치 세트] 는 https://kit128.com/goods/view?no=221 에서 구매하실 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다