본문 바로가기
디지털 논리회로

STM32CubeIDE , 디지털 논리회로 , 게이트 소스코드로 구현하기 AND / OR / NOT / NAND / NOR / XOR / XNOR GATE

by eteo 2022. 5. 19.

 

PFP 안에는 함수의 원형을 선언해둔다.

/* USER CODE BEGIN PFP */
GPIO_PinState and(GPIO_PinState input1, GPIO_PinState input2);
GPIO_PinState not(GPIO_PinState input);
GPIO_PinState or(GPIO_PinState input1, GPIO_PinState input2);
GPIO_PinState nand(GPIO_PinState input1, GPIO_PinState input2);
GPIO_PinState nor(GPIO_PinState input1, GPIO_PinState input2);
GPIO_PinState xor(GPIO_PinState input1, GPIO_PinState input2);
GPIO_PinState xnor(GPIO_PinState input1, GPIO_PinState input2);
/* USER CODE END PFP */

 

 

main 함수 내에 핀 상태를 읽어서 저장해둘 변수를 선언한다.

int main(void)
{
  /* USER CODE BEGIN 1 */
	  GPIO_PinState input1;
	  GPIO_PinState input2;
  /* USER CODE END 1 */

 

 

while문 내에는 readPin함수로 상태를 확인하고 gate 함수를 호출한다.

  while (1)
  {
	  input1 = HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_11);
	  input2 = HAL_GPIO_ReadPin(GPIOF, GPIO_PIN_14);
	  if(xnor(input1, input2))
		  HAL_GPIO_WritePin(GPIOE, GPIO_PIN_9, 1);
	  else
		  HAL_GPIO_WritePin(GPIOE, GPIO_PIN_9, 0);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

 

 

 

 

아래 각종 게이트 함수를 정의해 두었다.

불을 켜고 끄는 건 계속 반복되는 동작이니 main에서 하고 gate 함수의 반환형은 GPIO_PinState이다. 

/* USER CODE BEGIN 4 */
GPIO_PinState and(GPIO_PinState input1, GPIO_PinState input2){
	return input1 & input2;
}
GPIO_PinState not(GPIO_PinState input){
	return !input;
}
GPIO_PinState or(GPIO_PinState input1, GPIO_PinState input2){
	return input1 | input2;
}
GPIO_PinState nand(GPIO_PinState input1, GPIO_PinState input2){
	return !and(input1, input2);
}
GPIO_PinState nor(GPIO_PinState input1, GPIO_PinState input2){
	return !or(input1,input2);
}
GPIO_PinState xor(GPIO_PinState input1, GPIO_PinState input2){
	return input1 ^ input2;
}
GPIO_PinState xnor(GPIO_PinState input1, GPIO_PinState input2){
	return !xor(input1, input2);
}
/* USER CODE END 4 */

 

 

GPIO_PinState 는 사용자 정의 자료형 타입으로 gpio 헤더파일 내 선언되어 있다.

typedef enum
{
  GPIO_PIN_RESET = 0,
  GPIO_PIN_SET
}GPIO_PinState;