# Src/ — CubeMX 生成的源文件 > ⚠️ **本目录文件由 STM32CubeMX 生成**(`.ioc` 重生成会覆盖),**不是自研代码**。 > 但允许在 `USER CODE BEGIN/END` 标记区之间写自定义代码。 ## 文件一览 | 文件 | 生成 | 作用 | |---|---|---| | `main.c` | CubeMX | 程序入口:`HAL_Init` → `SystemClock_Config` → 外设初始化 → `app_main_init` → `osKernelStart` | | `freertos.c` | CubeMX | **FreeRTOS 任务创建**(`MX_FREERTOS_Init`)+ 任务栈/优先级定义 | | `gpio.c` / `dma.c` / `spi.c` / `i2c.c` / `usart.c` | CubeMX | 各外设 `MX_xxx_Init` | | `stm32f4xx_hal_msp.c` | CubeMX | HAL 外设底层初始化(时钟使能、NVIC、引脚复用) | | `stm32f4xx_hal_timebase_tim.c` | 自研覆盖 | **HAL 时基改用 TIM7**(非 SysTick),tick = 1ms | | `stm32f4xx_it.c` | CubeMX | 中断服务函数(ISR) | | `system_stm32f4xx.c` | CMSIS | 系统时钟初始化(`SystemInit`) | ## ⚠️ 修改约定(铁律) - **自定义代码只写 `USER CODE BEGIN xxx` / `USER CODE END xxx` 标记区之间**—— 标记区外的内容在 CubeMX 重新生成时会被**无条件覆盖丢失** - 本目录被 pre-commit 的 C 代码规范检查**排除**(因是生成代码,风格不受控) - `Drivers/BSP/` 才是纯手工代码区;应用逻辑放 `App/` ## 关键点 - **HAL 时基 = TIM7**,不是 SysTick;FreeRTOS 用 SysTick 之外的方式,tick = 1ms - NVIC 4 位优先级分组;**外设中断优先级 ≥ 5**(0~4 预留给 FreeRTOS) - 时钟:HSE 8MHz → PLL M=4/N=168/P=2 → 168MHz ## 相关文档 - 架构全景:`docs/架构设计/项目架构总览.md` - 启动顺序:`docs/架构设计/项目启动顺序管理.md` - 任务表(唯一事实源 = `freertos.c`):根 `README.md`