STM32에 대해 계속 공부하고 있지만, 익숙해지는 것이 제일 우선이라고 생각한다.
이전에 기초를 공부했지만 이번엔 또 다른 책인 STM32Fx Cortex ARM 프로그래밍 기초편에 대해 빠르게 공부하면서 익숙해져가겠다.
몇주에 걸쳐 포스팅이 끝날지 모르지만 그날 이해한 부분까지 계속 포스팅을 올려보려한다.
일단 스위치 on off로 LED 제어를 하고, 다음은 스위치가 100ms이상 눌렸을 때 켜지고, 켜진 상태에서도 스위치가 100ms이사 눌렸을 때만 꺼지도록 해보겠다. (채터링 방지)
UML Tool ( 관련 모양에 대한 설명은 https://1000yun.tistory.com/16 참조 바람 )
다음은 간단하게 회로도를 그려봤다.
이렇게 LED를 제어해볼 예정이다. ( PB3 )
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_GPIO_WritePin(LED_R_GPIO_Port, LED_R_Pin, HIGH);
HAL_Delay(500);
/* USER CODE END WHILE */
}
다음은 소프트웨어적으로 채터링을 방지해보겠다.
unsigned char ReadSW, SW_High_Counter, LED_State;
while (1)
{
ReadSW = HAL_GPIO_ReadPin(B_GPIO_Port, B_Pin);
switch(LED_State){
case LED_STATE0:
if(ReadSW){
++SW_High_Counter;
if(SW_High_Counter > 10){
SW_High_Counter = 0x00;
LED_State = LED_STATE1;
HAL_GPIO_WritePin(LED_R_GPIO_Port, LED_R_Pin, HIGH);
break;
}
}else{
SW_High_Counter = 0;
}
break;
case LED_STATE1:
if(ReadSW) break;
else{
LED_State = LED_STATE2;
SW_High_Counter = 0x00;
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(LED_R_GPIO_Port, LED_R_Pin, LOW);
break;
}
}else{
SW_High_Counter = 0;
}
break;
case LED_STATE3:
if(ReadSW) break;
else{
LED_State = LED_STATE0;
SW_High_Counter = 0x00;
break;
}
break;
default:
LED_State = LED_STATE0; // 비정상 상태 초기화
break;
}
HAL_Delay(10);
이렇게 여러 툴을 쓰면서 동작시켜보았다.
'STM32' 카테고리의 다른 글
STM32로 DFR0027를 다루어 보기 (0) | 2024.12.22 |
---|---|
STM32 익히기 2) (0) | 2024.12.05 |
RTC사용해보기 (0) | 2024.11.26 |
I2C로 LCD 제어해보기 (0) | 2024.11.25 |
STM32F407VE - 기초 7) Timer (0) | 2024.11.25 |