STM32F4xx HAL 开源项目教程
1. 项目的目录结构及介绍
目录结构
stm32f4xx-hal/
├── Cargo.toml
├── LICENSE-APACHE
├── LICENSE-MIT
├── README.md
├── build.rs
├── src/
│ ├── bin/
│ ├── chip.rs
│ ├── delay.rs
│ ├── flash.rs
│ ├── gpio.rs
│ ├── i2c.rs
│ ├── lib.rs
│ ├── prelude.rs
│ ├── pwm.rs
│ ├── rcc.rs
│ ├── serial.rs
│ ├── spi.rs
│ ├── time.rs
│ ├── timer.rs
│ └── watchdog.rs
└── examples/
├── blinky.rs
├── hello.rs
└── serial.rs
目录介绍
- Cargo.toml: 项目的依赖和元数据配置文件。
- LICENSE-APACHE 和 LICENSE-MIT: 项目的开源许可证文件。
- README.md: 项目的基本介绍和使用说明。
- build.rs: 构建脚本,用于在编译过程中执行一些自定义操作。
- src/: 源代码目录,包含项目的核心实现。
- bin/: 存放可执行文件的源代码。
- chip.rs: 芯片相关的实现。
- delay.rs: 延时功能的实现。
- flash.rs: 闪存操作的实现。
- gpio.rs: 通用输入输出接口的实现。
- i2c.rs: I2C 接口的实现。
- lib.rs: 库的入口文件。
- prelude.rs: 预导入模块,包含常用功能。
- pwm.rs: 脉宽调制功能的实现。
- rcc.rs: 复位和时钟控制功能的实现。
- serial.rs: 串行通信接口的实现。
- spi.rs: SPI 接口的实现。
- time.rs: 时间相关的实现。
- timer.rs: 定时器功能的实现。
- watchdog.rs: 看门狗功能的实现。
- examples/: 示例代码目录,包含一些基本的示例程序。
- blinky.rs: LED 闪烁示例。
- hello.rs: 简单的输出示例。
- serial.rs: 串行通信示例。
2. 项目的启动文件介绍
启动文件
在 src/bin/
目录下,通常会有一些启动文件,用于初始化系统和执行主程序。例如:
// src/bin/main.rs
#![no_main]
#![no_std]
use cortex_m_rt::entry;
use panic_halt as _;
use stm32f4xx_hal::{prelude::*, stm32};
#[entry]
fn main() -> ! {
let dp = stm32::Peripherals::take().unwrap();
let cp = cortex_m::Peripherals::take().unwrap();
let rcc = dp.RCC.constrain();
let clocks = rcc.cfgr.freeze();
let gpioc = dp.GPIOC.split();
let mut led = gpioc.pc13.into_push_pull_output();
let mut delay = cp.SYST.delay(&clocks);
loop {
led.set_high().unwrap();
delay.delay_ms(1000_u16);
led.set_low().unwrap();
delay.delay_ms(1000_u16);
}
}
启动文件介绍
- #![no_main] 和 #![no_std]: 表示不使用标准库和标准入口点。
- use 语句: 导入所需的库和模块。
- #[entry]: 定义程序的入口点。
- main(): 主函数,初始化外设并进入主循环。