이전에 분명 정리한 거 같은데 기록이 없어서 정리용도로 빠르게 테스트해봄
HAL_GetTick 함수를 따라가 보면 uwTick을 리턴하는 것으로 되어있다.
이 uwTick이 SysTick 타이머 클락 소스로 1밀리초마다 카운트되고 HAL_Delay 함수도 이 uwTick을 사용하고 있다.
Drivers - STM32F4xx_HAL_Driver - Src - stm32f4xx_hal_cortex.c 파일에 가면
아래와 같이 있다.
그중에 HAL_SYSTICK_IRQHandler() 함수를 가져와 stm32f4xx_it.c 에 있는 SysTick_Handler() 함수 안에 넣는다.
그리고 아까 IRQHandler() 함수 바로 아래 있던 HAL_SYSTICK_Callback 함수를 가져와 전역구간에서 재정의 해서 쓴다.
아래는 테스트용 소스코드
/* USER CODE BEGIN PV */
uint32_t count;
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
#ifdef __GNUC__
/* With GCC, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */
HAL_UART_Transmit(&huart3, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void HAL_SYSTICK_Callback(void)
{
if(uwTick%1000==0){
printf("count : %d\n\r", count);
count++;
}
}
/* USER CODE END 0 */
count 변수를 만들어두고(전역변수는 초기값 미지정시 0) uwTick%1000==0 1이 될때 즉 1초마다 시리얼 터미널에 출력한다.
다만 sysTick 타이머에 영향을 미칠 수 있어서 웬만하면 다른 타이머를 쓰는게 좋은 것 같다.
실행결과
'임베디드 개발 > STM32 (ARM Cortex-M)' 카테고리의 다른 글
STM32 ] DAC 제어 (오실로스코프로 파형 확인) (2) | 2022.07.18 |
---|---|
STM32 ] ADC + MFC + MySQL, 시리얼 통신 및 DB연동, 검색기능, 실시간 그래프 구현 (쓰레드 사용) (1) | 2022.07.17 |
STM32 ] 소프트웨어적으로 Chattering 채터링현상 Debounce 디바운스하기 (0) | 2022.07.13 |
앱 인벤터 ] GPS 모듈, 지자기센서 디버깅용 간단 어플 만들기 - 프로젝트 준비과정 (3) (0) | 2022.07.06 |
STM32 ] NEO-6M 모듈 사용 , GPS 데이터 파싱하는 법 - 프로젝트 준비과정 (1) (0) | 2022.07.03 |