2.6 KiB
2.6 KiB
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 硬件),物理层正常。