일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 전기차충전기
- 에버온
- dynamodb
- raspberry
- homeassistant
- STM32
- lambda
- Android
- 급속충전기
- 안드로이드
- 보안
- IOT Core
- OCPP
- 충전기
- 펌웨어
- 라즈베리파이
- 전기차
- 파이썬
- 홈어시스턴트
- everon
- 전기차충전
- 디자인패턴
- 완속충전기
- flask
- 플라스크
- 서버리스
- YMODEM
- thread
- AWS
- esp8266
- Today
- Total
Louie NRT Story
[STM32] WWDG와 IWDG 동작 본문
작성일: 21년 4월 29일
Index
1. WDG(Watch Dog)
2. IWDG(Independent Watch Dog)
3. WWDG(Window Watch Dog)
1. WDG(Watch Dog)
- 와치독 타이머는 프로그램이 일정 시간 초과하여 동작하거나 멈춰있을때 MCU 스스로가 리셋하는 기능임.
- 특정 함수의 "While" 문에 빠지거나 Timout이 발생하지 않아서 무한정 기다리는 경우 Watch Dog를 통하여 리셋함
2. IWDG(Independent Watch Dog)
- IWDG 는 LSI 로부터 clock 을 제공받는 12-bit down counter 타이머로서 HSI/HSE clock 에 문제가 발생하여도 독립적으로 동작할 수 있음.
1) Clock 확인
- LSI가 40KHz 라는 것을 확인 할 수 있음
2) IWDG 설정
- "Count Clock Presaler= 4", "DownCount Reload Value= 4095"
3) 설정한 Clocking 계산하기
- 설정 내용을 계산해보면 409ms 안에 Refresh를 하지 않으면 Reset 됨
4) 실험 결과
- 424ms 에서는 Reset 동작하지 않음
- 425ms 에서는 Reset 동작함
- 계산결과는 409ms인데 약간의 오차가 존재하는것으로 보임
3. WWDG(Window Watch Dog)
- WWDG 는 7-bit down counter 타이머이며 APB clock 을 사용함
- IWDG 와 달리 기본적으로 Window 라고 호칭하는 시간 내에서만 refresh 가 가능하며 그 외의 구역에서 타이머를 refresh 하려는 경우 Reset 이 발생함.
- WWDG 는 7-bit down counter 타이머이기 때문에 0x7F(127) 부터 0x40(64)까지 설정 가능
- WWDG 의 7번째 비트가 1에서 0으로 변경되는 시점인 카운터가 0x3F가 되는 시점에 Reset 이 발생한다.
1) Clock 확인
- Datasheet를 보면 WWDG가 APB1에서 동작함을 확인할 수 있음.
- APB1에 해당하는 36MHz를 확인함.
2) WWDG 설정
- "Count Clock Presaler= 8", "Window Value= 127", "Free-running DownCount Value= 127"
3) 설정한 Clocking 계산하기
- 설정 내용을 계산해보면 최소 0ms ~ 57ms 외에 Refresh를 하면 Reset이 된다는 의미임
4) 실험 결과
- 56ms에서는 Reset 동작하지 않음
- 57ms 에서는 Reset 동작함
- 1ms의 오차는 있지만 비슷하게 동작함.
CALL BACK 함수
/* Check Reset Occurred */
if(RESET != __HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST))
{
/* Reset : IWDG */
printf("Reset : IWDG \r\n");
__HAL_RCC_CLEAR_RESET_FLAGS();
}
else if(RESET != __HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST))
{
/* Reset : WWDG */
printf("Reset : WWDG \r\n");
__HAL_RCC_CLEAR_RESET_FLAGS();
}
else
{
printf("Reset : Normal \r\n");
}
Referece:
blog.naver.com/eziya76/221518876037
kmg1767.tistory.com/24?category=760588
'전기차충전기' 카테고리의 다른 글
[논문참고] 10kW 멀티충전기 사용자 효율성 분석 (0) | 2021.05.04 |
---|---|
[논문지필] 10kW 멀티충전기 사용자 효율성 분석 (0) | 2021.05.02 |
[STM32] stm32f1 IAP(In Application Programming) - 03 (0) | 2021.04.22 |
[everon] 7kW 완속충전기 SW개발 문서 - Todo (0) | 2021.04.22 |
[STM32] stm32f1 IAP(In Application Programming) - 02 (0) | 2021.04.22 |