POSA_LEAKSMS/firmware/config/stm32f4xx_hal_conf.h
유창욱 90f121e14c chore: import codebase with security hardening
SHT30 온습도 모니터링 시스템 전체 소스(서버 PHP, STM32 펌웨어, SQL, 테스트).
전체 코드리뷰에서 도출된 보안 하드닝 10건 반영:
- 요청 서명 HMAC-SHA256 전환(펌웨어 sig.c/서버 config.php/호스트 패리티 동시)
- 재전송 방어 + 기본 API_KEY fail-closed + 디바이스 문자열 정제(api/sensor_data.php)
- 오프라인 SMS 중복 발송 경합 제거(cron_heartbeat.php, 원자적 선점)
- CSV 수식 주입 방지(monthly_report.php), 감사로그 회전 락(retention_cleanup.php)
- 브루트포스 카운터 원자화(login.php), 예시 TOTP 비밀키 무효화, 마이그레이션 멱등화

_backup/(하드코딩 실 비밀값 포함)·config.local.php·런타임 상태는 .gitignore 제외.
2026-06-20 09:37:40 +09:00

190 lines
7.1 KiB
C

/* =============================================================================
* 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 */