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 제외.
190 lines
7.1 KiB
C
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 */
|