UML 다이어그램의 종류
동작 다이어그램 | 구조 다이어그램 | 인터랙션 다이어그램 |
유스케이스 | 클래스 다이어그램 | 시퀀스 다이어그램 |
액티비티 다이어그램 | 객체 다이어그램 | 커뮤니케이션 다이어그램 |
상태 다이어그램 | 컴포넌트 다이어그램 | 인터랙션 오버뷰션 다이어그램 |
배치 다이어그램 | 타이밍 다이어그램 | |
패키지 다이어그램 | ||
컴포넌트구조 다이어그램 |
참고 : STM32Fx Cortex ARM 프로그래밍
그중에서도 다음은 Activity 다이어그램의 심볼이다. 일반적으로 우리가 알고 있는 플로우차트와 유사하다.
예시.
버튼을 2초 이상 누른 상태로 손을 떼지 않으면 LED가 500ms 간격으로 토글되고 손울 떼는 순간 IDLE로 돌아간다.
while (1)
{
LEDBTN();
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE BEGIN 0 */
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);
}
void LEDBTN()
{
static uint8_t state = 0;
static uint32_t timeBefore = 0;
static uint32_t btnPressedTime = 0;
uint8_t btn = HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13);
switch(state)
{
case 0: // 처음 안눌린 상태
if(btn)
{
btnPressedTime = HAL_GetTick();
state = 1;
printf("STATE 0->1\r\n");
}
break;
case 1: // 버튼이 눌린 상태
if(btn)
{
if(HAL_GetTick() - btnPressedTime >= 2000)
{
timeBefore = HAL_GetTick();
state = 2;
printf("STATE 1->2\r\n");
}
}
else
{
state = 0;
printf("STATE 1->0\r\n");
}
break;
case 2: // 버튼이 2초 이상 눌린상태
if(btn)
{
// 눌린지 2.5초 이후 토글시작
if(HAL_GetTick() - timeBefore >= 500)
{
timeBefore = HAL_GetTick();
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
}
}
else
{
state = 0;
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, 0);
printf("STATE 2->0\r\n");
}
break;
}
}
/* USER CODE END 0 */
'임베디드 개발 > STM32 (ARM Cortex-M)' 카테고리의 다른 글
STM32 ] CAN 통신 설정 (bxCAN peripheral) (0) | 2023.01.27 |
---|---|
STM32 ] 인터럽트 처리 과정 (0) | 2022.12.22 |
STM32 ] 28BYJ-48 스텝모터 제어하기 (0) | 2022.12.04 |
STM32 ] HAL_GetTick() 오버플로우에 대한 의문 (1) | 2022.12.02 |
STM32 ] lwIP 통계와 디버그 기능 활성화하기 (LWIP_STATS, LWIP_DEBUG) (1) | 2022.11.11 |