4个版本

使用旧的Rust 2015

0.0.4 2024年4月18日
0.0.3 2024年3月22日
0.0.2 2024年3月20日
0.0.1 2024年3月17日

#192 in 操作系统

MIT/Apache

41KB
881

stm32cubeprog-rs

crates.io documentation

该包提供了STM32CubeProgrammer API的Rust绑定,便于与意法半导体硬件编程工具交互。

兼容性

该包设计为与Linux和Windows操作系统兼容。

需求

您的系统上必须安装STM32CubeProgrammer版本2.14.0或更高版本。

示例用法

以下示例演示了如何在Linux上发现连接的STLinks,检索信息,读写内存以及编程连接的设备。

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Generate path to STM32CubeProgrammer folder
    let home_dir = std::env::var_os("HOME")
        .map(std::path::PathBuf::from)
        .expect("Failed to get home directory, $HOME variable missing");
    let binding = home_dir.join("Applications/STMicroelectronics/STM32Cube/STM32CubeProgrammer");
    let stm32prog_path = binding
        .to_str()
        .expect("Failed to join STM32CubeProgrammer path");
    
    // Load STM32CubeProgmmer API library
    let stm32prog = stm32cubeprog_rs::STM32CubeProg::new(stm32prog_path)?;

    // Find connected STLinks
    let mut stlinks = stm32prog.discover()?;
    for stlink in stlinks.iter_mut() {
        println!("{stlink}");
        
        // Configure the reset mode and the connection mode
        stlink.reset_mode(stm32cubeprog_rs::DebugResetMode::HardwareReset);
        stlink.connection_mode(stm32cubeprog_rs::DebugConnectMode::UnderReset);

        // Connect the STlink
        stm32prog.connect(stlink)?;
        
        // Fetch device information
        let device_info = stm32prog.device_info()?;
        println!("{device_info}");
        
        // Read and write register R0
        stm32prog.write_core_register(stm32cubeprog_rs::Register::R0, 0xAABBCCDD)?;
        let data = stm32prog.read_core_register(stm32cubeprog_rs::Register::R0)?;
        println!("R0:  0x{data:X}");
        
        // Read and write memory
        let data = stm32prog.read_memory8(0x1FFF7590, 16)?;
        println!("0x1FFF7590: {data:x?}");

        stm32prog.write_memory8(0x20000100, data)?;

        let data = stm32prog.read_memory32(0x1FFF7590, 4)?;
        println!("0x1FFF7590: {data:x?}");

        stm32prog.write_memory32(0x20000200, data)?;
        
        // Mass erase the device
        stm32prog.mass_erase()?;

        // Flash the device
        stm32prog.download("demo.hex", None, None, None)?;
        
        // Reset and disconnect the STLink
        stm32prog.reset(stlink)?;
        stm32prog.disconnect();
    }

    Ok(())
}

依赖项

~0.6–5.5MB