STM32-ETH 开源项目教程
stm32-ethEmbedded Ethernet driver in Rust项目地址:https://gitcode.com/gh_mirrors/st/stm32-eth
1. 项目的目录结构及介绍
stm32-eth/
├── Cargo.toml
├── README.md
├── src/
│ ├── main.rs
│ ├── eth.rs
│ ├── dma.rs
│ ├── mac.rs
│ ├── phy.rs
│ └── utils.rs
├── examples/
│ ├── basic_example.rs
│ ├── advanced_example.rs
│ └── test_example.rs
└── docs/
├── README.md
├── INSTALL.md
└── USAGE.md
- Cargo.toml: 项目的配置文件,定义了项目的依赖和元数据。
- README.md: 项目的主文档,包含项目的基本介绍和使用说明。
- src/: 源代码目录,包含项目的主要代码文件。
- main.rs: 主程序文件。
- eth.rs: 以太网外设的实现代码。
- dma.rs: DMA控制器的实现代码。
- mac.rs: MAC控制器的实现代码。
- phy.rs: PHY层的实现代码。
- utils.rs: 工具函数和辅助代码。
- examples/: 示例代码目录,包含多个示例程序。
- basic_example.rs: 基本示例代码。
- advanced_example.rs: 高级示例代码。
- test_example.rs: 测试示例代码。
- docs/: 文档目录,包含项目的详细文档。
- README.md: 文档的主文档。
- INSTALL.md: 安装指南。
- USAGE.md: 使用指南。
2. 项目的启动文件介绍
项目的启动文件位于 src/main.rs
,它是整个项目的入口点。启动文件主要包含以下内容:
- 初始化代码: 初始化硬件外设,如GPIO、RCC、以太网外设等。
- 主循环: 包含主要的业务逻辑,如数据包的发送和接收。
- 中断处理: 定义中断处理函数,处理以太网外设的中断事件。
fn main() {
let p = Peripherals::take().unwrap();
let rcc = p.RCC.constrain();
let clocks = rcc.cfgr.sysclk(32.MHz()).hclk(32.MHz()).freeze();
let gpioa = p.GPIOA.split();
let gpiob = p.GPIOB.split();
let gpioc = p.GPIOC.split();
let gpiog = p.GPIOG.split();
let eth_pins = EthPins {
ref_clk: gpioa.pa1,
crs: gpioa.pa7,
tx_en: gpiog.pg11,
tx_d0: gpiog.pg13,
tx_d1: gpiob.pb13,
rx_d0: gpioc.pc4,
rx_d1: gpioc.pc5,
};
let mut rx_ring: [RxRingEntry; 16] = Default::default();
let mut tx_ring: [TxRingEntry; 8] = Default::default();
let parts = stm32_eth::PartsIn {
mac: p.ETHERNET_MAC,
mmc: p.ETHERNET_MMC,
dma: p.ETHERNET_DMA,
ptp: p.ETHERNET_PTP,
};
let stm32_eth::Parts { dma: mut eth_dma, mac: _, ptp: _ } = stm32_eth::new(
parts,
&mut rx_ring[..],
&mut tx_ring[..],
clocks,
eth_pins,
).unwrap();
eth_dma.enable_interrupt();
loop {
if let Ok(pkt) = eth_dma.recv_next(None) {
// handle received pkt
}
let size = 42;
eth_dma.send(size, None, |buf| {
// write up to `size` bytes into buf before it is being
stm32-ethEmbedded Ethernet driver in Rust项目地址:https://gitcode.com/gh_mirrors/st/stm32-eth
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考