Files
STM32F4-Base/AGENTS.md
2026-07-17 15:16:29 +08:00

2.6 KiB
Raw Blame History

STM32F4-Base

项目概述

STM32F407ZGTx (Cortex-M4 FPU) 基础固件项目,集成 CH395F 以太网控制器 SPI 驱动CH395F 自带 MAC+PHY 及 TCP/IP 协议栈固件)。

关键文件

路径 说明
Src/main.c 程序入口,初始化序列及主循环
Src/ch395f.c / Inc/ch395f.h CH395F 以太网芯片 SPI 驱动(核心自定义代码)
MDK-ARM/STM32F407-Demo.uvprojx Keil MDK 项目文件
STM32F407-Demo.ioc STM32CubeMX 项目源文件

构建

仅支持 Keil MDK-ARM v5 (ARMCC)。打开 MDK-ARM/STM32F407-Demo.uvprojx 编译。

  • 编译器ARMCC V5.06 update 7
  • 优化等级:-O4 (项目级)spi.c/usart.c / HAL 源文件使用 -O0
  • C 标准C99
  • 全局宏定义:USE_HAL_DRIVER, STM32F407xx

硬件配置

  • 主频: HSE 25MHz → PLL 168MHz (4/168/2)
  • 6 个 LED PC4, PC5, PB1, PB2, PF11, PF12低电平点亮
  • CH395F SPI2 (PB12 CS, PB13 SCK, PB14 SDO, PB15 SDI)
  • USART1 PA9 TX, PA10 RX (115200bps)

启动顺序

HAL_Init() → SystemClock_Config() → MX_GPIO_Init() → MX_USART1_UART_Init() → MX_SPI2_Init() → ch395f_reset() → ch395f_init()

代码规范

参考 嵌入式C语言代码规范V1.0.md,关键要点:

  • 缩进4 空格,禁止 Tab
  • 命名:小写字母+下划线;全局变量 g_ 前缀,静态 s_,指针 p_,数组 a_
  • 函数注释块需包含:函数功能、入口参数、返回值、限定条件、函数说明
  • 大括号K&R 风格(左大括号不换行)

注意

  • Inc/Src/ 中 CubeMX 生成的文件gpio, spi, usart, stm32f4xx_it, main 的骨架)带有 USER CODE BEGIN/END 标记,自定义代码应写在这些区域之间以免被 CubeMX 重新生成时覆盖
  • ch395f.c/ch395f.h 为纯手工代码,不受 CubeMX 保护
  • 每次 SPI 事务需调用 ch395f_spi_begin() / ch395f_spi_end() 包裹
  • CH395F 命令执行时序参考 ch395f.h 中命令码注释及 CH395F.md

已知问题

CH395F 与 RTL8305NBI 自动协商不兼容

CH395F 与 RTL8305NBI-CG 直连(经网络变压器)时,自动协商始终失败(返回 PHY_DISCONN),但强制 100M 全双工工作正常。强制 10M 全双工同样失败。

诊断结果:

  • Auto-Neg: 0x01 (DISCONNECTED)
  • Force 100M-FULL: 0x08 (LINK OK)
  • Force 10M-FULL: 0x01 (DISCONNECTED)

解决方案: 初始化协议栈后调用 ch395f_set_phy(CH395F_PHY_100M_FULL) 跳过自动协商。

推测根因: 不同厂家 PHY 直连时的自动协商实现差异CH395F WCH 固件 vs RTL8305NBI Realtek 硬件),物理层正常。