PinMap

제어판 장치관리자에서 COM Port 확인
: 여기서는 COM12

Tera Term 포트 설정
: Baudrate 115200
: Data 8 bit
: Stop bits : 1 bit





USART3
: F429Zi로 프로젝트 생성시 기본 할당

Generate Code
main.h에서 변수 정의
#define LED_STATE0 0 // 초기 상태에서 100ms동안 High가 유지되면 LED On으로 하는 상태
#define LED_STATE1 1 // Switch High에서 Low로 떨어지는지 점검하는 상태
#define LED_STATE2 2 // LED On상태에서 Switch 100ms 이상 High 유지되면 LED Off하는 상태
#define LED_STATE3 3 // Switch High에서 Low로 떨어지는지 점검하는 상태

#include "stdio.h"

unsigned char ReadSW, SW_High_Counter, LED_State;
int _write(int file, unsigned char* p, int len)
{
HAL_StatusTypeDef status = HAL_UART_Transmit(&huart3, p, len, 100);
return (status == HAL_OK ? len : 0);
}

printf("Hello World\r\n");

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
ReadSW = HAL_GPIO_ReadPin(USER_Btn_GPIO_Port, USER_Btn_Pin);
switch(LED_State)
{
case LED_STATE0:
if(ReadSW)
{
// 버튼을 길게 누르면 카운터 올라감
// 10ms 미만으로 누를 경우 LED 안켜짐
++SW_High_Counter;
if(SW_High_Counter > 10)
{
// 10ms 이상 누를 경우 LED 켜짐
// 동시에 카운터는 다시 0으로 초기화
// 그 동시에 State는 LED_STATE1으로 넘어감
SW_High_Counter = 0x00;
LED_State = LED_STATE1;
HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_SET);
printf("LED_STATE0->LED_STATE1 LED On\r\n");
break;
}
}
else
{
// 버튼을 아예 안누를 경우 카운터는 계속 0
SW_High_Counter = 0;
}
break;
case LED_STATE1:
// LED_STATE0에서 버튼을 10ms이상 누르는 동시에 이미 여기의 if문으로 들어옴
// 아무 동작 수행 안함
if(ReadSW) break;
else // 버튼을 떼는 순간
{
// 버튼을 떼는 순간 다음 상태로 넘어감
// 카운터는 다시 0으로 초기화
LED_State = LED_STATE2;
SW_High_Counter = 0x00;
printf("LED_STATE2->LED_STATE3 Switch Level High to Low \r\n");
break;
}
break;
case LED_STATE2:
// 위 과정과 동일
if(ReadSW)
{
++SW_High_Counter;
if(SW_High_Counter > 10)
{
SW_High_Counter = 0x00;
LED_State = LED_STATE3;
HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);
printf("LED_STATE2->LED_STATE3 LED Off\r\n");
break;
}
}
else
{
SW_High_Counter = 0;
}
break;
case LED_STATE3:
if(ReadSW) break;
else
{
LED_State = LED_STATE0;
SW_High_Counter = 0x00;
printf("LED_STATE3->LED_STATE0 Switch Level High to Low\r\n");
break;
}
break;
default:
break;
}
HAL_Delay(10);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
void HAL_Delay(uint32_t Delay)
{
uint32_t tickstart = HAL_GetTick();
while((HAL_GetTick() - tickstart) < Delay)
{
}
}
