/* ============================================================================= * stm32f4xx_hal_conf.h - STM32CubeF4 HAL 설정 (STM32F407VGT6) * * ST 표준 템플릿을 본 프로젝트에서 실제로 쓰는 모듈만 남기도록 정리한 것. * 활성 모듈: RCC, GPIO, CORTEX, ETH, I2C, RNG, RTC, IWDG, UART, TIM, PWR, * FLASH, DMA, EXTI. (그 외 SPI/SDIO/CAN/USB/DAC/ADC 등은 비활성) * * 주의: * - HSE_VALUE = 8MHz. TODO(hw): 보드 크리스털 실제 값 확인(STM32F4-DISCO 는 * 8MHz, 커스텀 보드면 25MHz 등일 수 있음). 잘못되면 클럭 전부 어긋남. * - TICK_INT_PRIORITY: HAL 타임베이스(TIM6, bsp 의 HAL_InitTick override)용 * 인터럽트 우선순위. FreeRTOS MAX_SYSCALL(=5) 이하 선점도(숫자 ≥ 5)여야 * *FromISR 충돌이 없다. 여기서는 15(가장 낮음) -> 안전. * - USE_RTOS 매크로는 ST 권고에 따라 0 으로 둔다(HAL 내부 RTOS 잠금 비활성; * 동기화는 애플리케이션이 FreeRTOS 객체로 직접 처리). * ===========================================================================*/ #ifndef STM32F4xx_HAL_CONF_H #define STM32F4xx_HAL_CONF_H #ifdef __cplusplus extern "C" { #endif /* ============================================================================= * 1) 활성화할 HAL 모듈 * ===========================================================================*/ #define HAL_MODULE_ENABLED #define HAL_CORTEX_MODULE_ENABLED #define HAL_RCC_MODULE_ENABLED #define HAL_GPIO_MODULE_ENABLED #define HAL_EXTI_MODULE_ENABLED #define HAL_DMA_MODULE_ENABLED #define HAL_FLASH_MODULE_ENABLED #define HAL_PWR_MODULE_ENABLED #define HAL_ETH_MODULE_ENABLED #define HAL_I2C_MODULE_ENABLED #define HAL_RNG_MODULE_ENABLED #define HAL_RTC_MODULE_ENABLED #define HAL_IWDG_MODULE_ENABLED #define HAL_UART_MODULE_ENABLED #define HAL_TIM_MODULE_ENABLED /* 명시적으로 비활성(템플릿 흔적 제거 — 참고용 주석) * #define HAL_ADC_MODULE_ENABLED * #define HAL_CAN_MODULE_ENABLED * #define HAL_CRC_MODULE_ENABLED * #define HAL_DAC_MODULE_ENABLED * #define HAL_DCMI_MODULE_ENABLED (카메라 기능 DROP) * #define HAL_SD_MODULE_ENABLED * #define HAL_SPI_MODULE_ENABLED * #define HAL_USART_MODULE_ENABLED (UART 모듈로 충분) * #define HAL_PCD_MODULE_ENABLED (USB 미사용) * #define HAL_WWDG_MODULE_ENABLED (IWDG 사용) */ /* ============================================================================= * 2) 발진기(Oscillator) 값 * ===========================================================================*/ #if !defined (HSE_VALUE) #define HSE_VALUE 8000000U /* TODO(hw): 외부 HSE 크리스털 실제 주파수(Hz) */ #endif #if !defined (HSE_STARTUP_TIMEOUT) #define HSE_STARTUP_TIMEOUT 100U /* ms */ #endif #if !defined (HSI_VALUE) #define HSI_VALUE 16000000U /* 내부 RC 16MHz */ #endif #if !defined (LSI_VALUE) #define LSI_VALUE 32000U /* IWDG/RTC 용 내부 저속 RC (~32kHz, 오차 큼) */ #endif #if !defined (LSE_VALUE) #define LSE_VALUE 32768U /* TODO(hw): RTC 외부 32.768kHz 크리스털 유무 */ #endif #if !defined (LSE_STARTUP_TIMEOUT) #define LSE_STARTUP_TIMEOUT 5000U #endif #if !defined (EXTERNAL_CLOCK_VALUE) #define EXTERNAL_CLOCK_VALUE 12288000U /* I2S 등 미사용 — 템플릿 기본 */ #endif /* ============================================================================= * 3) 시스템 설정 * ===========================================================================*/ #define VDD_VALUE 3300U /* mV */ #define TICK_INT_PRIORITY 15U /* HAL 타임베이스(TIM6) IRQ 우선순위 (가장 낮은 선점도 -> RTOS 안전) */ #define USE_RTOS 0U #define PREFETCH_ENABLE 1U #define INSTRUCTION_CACHE_ENABLE 1U #define DATA_CACHE_ENABLE 1U /* assert_param: 운영 빌드에서는 끈다(USE_FULL_ASSERT 정의 시 활성). */ /* #define USE_FULL_ASSERT 1U */ #define USE_HAL_ETH_REGISTER_CALLBACKS 0U #define USE_HAL_I2C_REGISTER_CALLBACKS 0U #define USE_HAL_RNG_REGISTER_CALLBACKS 0U #define USE_HAL_RTC_REGISTER_CALLBACKS 0U #define USE_HAL_TIM_REGISTER_CALLBACKS 0U #define USE_HAL_UART_REGISTER_CALLBACKS 0U /* ============================================================================= * 4) Ethernet (LAN8720 PHY / RMII) 파라미터 * LwIP 와 stm32f4xx_hal_eth.c 가 참조한다. * ===========================================================================*/ /* RMII 모드는 25MHz REF_CLK 가 PHY/MCO 로 공급된다고 가정. */ #define ETH_TX_DESC_CNT 4U /* 송신 DMA 디스크립터 개수 */ #define ETH_RX_DESC_CNT 4U /* 수신 DMA 디스크립터 개수 */ /* LAN8720 PHY 주소. TODO(hw): 보드 스트랩 핀에 따라 0 또는 1. */ #define LAN8742_PHY_ADDRESS 0x00U /* CubeF4 ETH 코드가 참조하는 매크로 */ /* MAC 주소 (locally-administered, 02:xx). TODO(hw): 노드별 고유값으로 교체. */ #define MAC_ADDR0 0x02U #define MAC_ADDR1 0x00U #define MAC_ADDR2 0x00U #define MAC_ADDR3 0x00U #define MAC_ADDR4 0x00U #define MAC_ADDR5 0x01U /* ============================================================================= * 5) SysTick 관련 — FreeRTOS 가 SysTick 을 점유하므로 HAL 은 TIM6 타임베이스. * (bsp.c 가 HAL_InitTick() 을 weak override 한다. 여기서는 별도 정의 없음.) * ===========================================================================*/ /* ============================================================================= * 6) 모듈별 헤더 인클루드 (활성 모듈만) * ===========================================================================*/ #ifdef HAL_RCC_MODULE_ENABLED #include "stm32f4xx_hal_rcc.h" #endif #ifdef HAL_GPIO_MODULE_ENABLED #include "stm32f4xx_hal_gpio.h" #endif #ifdef HAL_EXTI_MODULE_ENABLED #include "stm32f4xx_hal_exti.h" #endif #ifdef HAL_DMA_MODULE_ENABLED #include "stm32f4xx_hal_dma.h" #endif #ifdef HAL_CORTEX_MODULE_ENABLED #include "stm32f4xx_hal_cortex.h" #endif #ifdef HAL_FLASH_MODULE_ENABLED #include "stm32f4xx_hal_flash.h" #endif #ifdef HAL_PWR_MODULE_ENABLED #include "stm32f4xx_hal_pwr.h" #endif #ifdef HAL_ETH_MODULE_ENABLED #include "stm32f4xx_hal_eth.h" #endif #ifdef HAL_I2C_MODULE_ENABLED #include "stm32f4xx_hal_i2c.h" #endif #ifdef HAL_RNG_MODULE_ENABLED #include "stm32f4xx_hal_rng.h" #endif #ifdef HAL_RTC_MODULE_ENABLED #include "stm32f4xx_hal_rtc.h" #endif #ifdef HAL_IWDG_MODULE_ENABLED #include "stm32f4xx_hal_iwdg.h" #endif #ifdef HAL_UART_MODULE_ENABLED #include "stm32f4xx_hal_uart.h" #endif #ifdef HAL_TIM_MODULE_ENABLED #include "stm32f4xx_hal_tim.h" #endif /* ============================================================================= * 7) assert_param * ===========================================================================*/ #ifdef USE_FULL_ASSERT #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) void assert_failed(uint8_t *file, uint32_t line); #else #define assert_param(expr) ((void)0U) #endif #ifdef __cplusplus } #endif #endif /* STM32F4xx_HAL_CONF_H */