MCU
|
STM32F746G DISCOVERY(ST)
|
IDE
|
Atollic(TrueSTUDIO), STM32CubeMX
|
목표
|
HAL driver를 사용하여 TIMER로 LED를 1Hz(1초에 한번 켜졌다 꺼졌다)로 ON-OFF 한다.
|
TIMER6은 외부 출력이 없는 내부 타이머. 사용에 앞서 TIM6의 기본 clock이 얼마인지 확인해야 한다. TIMER6은 APB1에 연결 되어 있음을 확인 할 수 있다.
Bus
|
Boundary address
|
Peripheral
|
APB1
|
0x4000 8000 - 0x4000 FFFF
|
Reserved
|
0x4000 7C00 - 0x4000 7FFF
|
UART8
|
|
0x4000 7800 - 0x4000 7BFF
|
UART7
|
|
0x4000 7400 - 0x4000 77FF
|
DAC
|
|
0x4000 7000 - 0x4000 73FF
|
PWR
|
|
0x4000 6C00 - 0x4000 6FFF
|
HDMI-CEC
|
|
0x4000 6800 - 0x4000 6BFF
|
CAN2
|
|
0x4000 6400 - 0x4000 67FF
|
CAN1
|
|
0x4000 6000 - 0x4000 63FF
|
I2C4
|
|
0x4000 5C00 - 0x4000 5FFF
|
I2C3
|
|
0x4000 5800 - 0x4000 5BFF
|
I2C2
|
|
0x4000 5400 - 0x4000 57FF
|
I2C1
|
|
0x4000 5000 - 0x4000 53FF
|
UART5
|
|
0x4000 4C00 - 0x4000 4FFF
|
UART4
|
|
0x4000 4800 - 0x4000 4BFF
|
USART3
|
|
0x4000 4400 - 0x4000 47FF
|
USART2
|
|
0x4000 4000 - 0x4000 43FF
|
SPDIFRX
|
|
0x4000 3C00 - 0x4000 3FFF
|
SPI3 / I2S3
|
|
0x4000 3800 - 0x4000 3BFF
|
SPI2 / I2S2
|
|
0x4000 3400 - 0x4000 37FF
|
Reserved
|
|
0x4000 3000 - 0x4000 33FF
|
IWDG
|
|
0x4000 2C00 - 0x4000 2FFF
|
WWDG
|
|
0x4000 2800 - 0x4000 2BFF
|
RTC & BKP Registers
|
|
0x4000 2400 - 0x4000 27FF
|
LPTIM1
|
|
0x4000 2000 - 0x4000 23FF
|
TIM14
|
|
0x4000 1C00 - 0x4000 1FFF
|
TIM13
|
|
0x4000 1800 - 0x4000 1BFF
|
TIM12
|
|
0x4000 1400 - 0x4000 17FF
|
TIM7
|
|
0x4000 1000 - 0x4000 13FF
|
TIM6
|
|
0x4000 0C00 - 0x4000 0FFF
|
TIM5
|
|
0x4000 0800 - 0x4000 0BFF
|
TIM4
|
|
0x4000 0400 - 0x4000 07FF
|
TIM3
|
|
0x4000 0000 - 0x4000 03FF
|
TIM2
|
APB1 Timer clock = 100MHz

1. STM32CubeMX : TIMER 설정
- 'Pinout & Configuration' Tab으로 이동
1) TIM6 선택
2) Activated에 체크
3) Prescaler : 10000-1
- 100MHz / 5,000 = 20,000 = 20KHz
4) Counter Period : 10000-1
- 1/20,000 * 10,000 = 0.5s 마다 인터럽트 발생

5) TIM6 global interrupt : Enbled

- GENERATE CODE 클릭
- ATOLLIC : main.c
- HAL_TIM_Base_Start_IT (&htim6); 인터럽트 시작을 위해 추가
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_RTC_Init();
MX_GFXSIMULATOR_Init();
MX_USART1_UART_Init();
MX_TIM6_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT (&htim6);
/* USER CODE END 2 */
- ATOLLIC : stm32f1xx_it.c 수정
- void TIM6_IRQHandler(void) 수정
- CubeMX 설정에서 0.5초마다 인터럽트가 걸리게 설정하였고 인터럽트 핸들러에서 매 인터럽트 마다 포트를 토글 하므로 1초마다(1Hz) LED가 깜박임.
void TIM6_DAC_IRQHandler(void)
{
/* USER CODE BEGIN TIM6_DAC_IRQn 0 */
/* USER CODE END TIM6_DAC_IRQn 0 */
HAL_TIM_IRQHandler(&htim6);
/* USER CODE BEGIN TIM6_DAC_IRQn 1 */
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
/* USER CODE END TIM6_DAC_IRQn 1 */
}
직접 인터럽트 핸들러를 수정하는 방법도 있고 callback 함수를 추가하는 방법도 있으나, 여기서는 TIM6가 내부 인터럽트만 존재하므로(한가지) 인터럽트 핸들러를 수정하였음.

STM32F746 TIMER 테스트(LED 점멸)
'ST > STM32F746DIS' 카테고리의 다른 글
STM32F746G DISCOVERY - SDRAM (0) | 2025.04.19 |
---|---|
STM32F746G DISCOVERY - TIM(IC, OC, PWM) (0) | 2025.04.19 |
STM32F746G DISCOVERY - UART(DMA) (0) | 2025.04.19 |
STM32F746G DISCOVERY - UART(Polling, Interrupt) (0) | 2025.04.19 |
STM32F746G DISCOVERY - printf()를 이용하여 UART로 문자열 출력 (0) | 2025.04.19 |