STM32F3xx HAL 开源项目教程
1. 项目的目录结构及介绍
STM32F3xx HAL 项目的目录结构如下:
stm32f3xx-hal/
├── Cargo.toml
├── LICENSE-APACHE
├── LICENSE-MIT
├── README.md
├── build.rs
├── src/
│ ├── lib.rs
│ ├── adc.rs
│ ├── afio.rs
│ ├── backup_domain.rs
│ ├── can.rs
│ ├── crc.rs
│ ├── delay.rs
│ ├── dma.rs
│ ├── flash.rs
│ ├── gpio.rs
│ ├── i2c.rs
│ ├── i2s.rs
│ ├── interrupt.rs
│ ├── prelude.rs
│ ├── pwm.rs
│ ├── qei.rs
│ ├── rcc.rs
│ ├── serial.rs
│ ├── spi.rs
│ ├── time.rs
│ ├── timer.rs
│ ├── watchdog.rs
│ └── watchdog.rs
└── examples/
├── blinky.rs
├── hello.rs
└── serial.rs
目录结构介绍
Cargo.toml
: 项目的依赖和元数据配置文件。LICENSE-APACHE
和LICENSE-MIT
: 项目的许可证文件。README.md
: 项目的基本介绍和使用说明。build.rs
: 构建脚本,用于在编译时执行一些自定义操作。src/
: 源代码目录,包含库的主要实现文件。lib.rs
: 库的入口文件。- 其他
.rs
文件:各个模块的具体实现,如adc.rs
对应模数转换器模块,gpio.rs
对应通用输入输出模块等。
examples/
: 示例代码目录,包含一些简单的示例程序,如blinky.rs
闪灯示例,hello.rs
打印 "Hello, world!" 示例等。
2. 项目的启动文件介绍
在 STM32F3xx HAL 项目中,启动文件通常位于 src/
目录下的 lib.rs
文件中。这个文件是库的入口点,定义了库的模块结构和一些基本配置。
// src/lib.rs
#![no_std]
pub extern crate cortex_m;
pub extern crate cortex_m_rt;
pub extern crate stm32f3xx_hal as hal;
pub mod adc;
pub mod afio;
pub mod backup_domain;
pub mod can;
pub mod crc;
pub mod delay;
pub mod dma;
pub mod flash;
pub mod gpio;
pub mod i2c;
pub mod i2s;
pub mod interrupt;
pub mod prelude;
pub mod pwm;
pub mod qei;
pub mod rcc;
pub mod serial;
pub mod spi;
pub mod time;
pub mod timer;
pub mod watchdog;
pub use cortex_m::asm;
pub use cortex_m::interrupt;
pub use cortex_m::peripheral;
pub use cortex_m::prelude::_embedded_hal_blocking_delay_DelayMs;
pub use cortex_m::prelude::_embedded_hal_blocking_delay_DelayUs;
pub use cortex_m::prelude::_embedded_hal_serial_Read;
pub use cortex_m::prelude::_embedded_hal_serial_Write;
pub use cortex_m::prelude::_embedded_hal_spi_FullDuplex;
pub use cortex_m::prelude::_embedded_hal_timer_CountDown;
pub use cortex_m::prelude::_embedded_hal_timer_Periodic;
pub use cortex_m::prelude::_embedded_hal_watchdog_Watchdog;
pub use cortex_m::prelude::_embedded_hal_watchdog_WatchdogEnable;
pub use cortex_m::prelude::_embedded_hal_watchdog_WatchdogReset;
pub use cortex_m::prelude::_embedded_hal_watchdog_WatchdogTimeout;
pub use cortex_m::prelude::_embedded_hal_watchdog_WatchdogTimer;
pub use cortex_m::prelude::_embedded_hal