0

我正在尝试创建一个单独的文件/模块,该文件/模块具有可以处理 stm32f3discovery 的 LED 或陀螺仪的功能。我正在尝试将保存所有寄存器的 stm32f3 API 传递到一个函数中,然后在其中使用。

当我运行此代码时,我收到一条错误消息,提示“类型 '##' 上没有字段 '###'”。我怎样才能做到这一点?

main.rs

#![no_std]
#![no_main]
use stm32f3::stm32f303;

mod my_api;

#[entry]
fn main() -> ! {
    let periph = stm32f303::Peripherals::take().unwrap();

    let gpioe = periph.GPIOE;
    let rcc = periph.RCC;

    my_api::led::setup_led(&gpioe, &rcc);

    loop {
        my_api::led::all_led_on(&gpioe);
    }
}

my_api.rs

pub mod led {
    pub fn setup_led<G, R>(gpio: &G, rcc: &R) {
        *rcc.ahbenr.modify(|_, w| w.iopeen().set_bit()); //enables clock
        *gpio.moder.modify(|_, w| {
            w.moder8().bits(0b01);
            w.moder9().bits(0b01);
            w.moder10().bits(0b01);
            w.moder11().bits(0b01);
            w.moder12().bits(0b01);
            w.moder13().bits(0b01);
            w.moder14().bits(0b01);
            w.moder15().bits(0b01)
        });
    }

    pub fn all_led_on<G>(gpio: &G) {
        *gpio.odr.modify(|_, w| {
            w.odr8().set_bit();
            w.odr9().set_bit();
            w.odr10().set_bit();
            w.odr11().set_bit();
            w.odr12().set_bit();
            w.odr13().set_bit();
            w.odr14().set_bit();
            w.odr15().set_bit()
        });
    }

    pub fn all_led_off<G>(gpio: &G) {
        *gpio.odr.modify(|_, w| {
            w.odr8().clear_bit();
            w.odr9().clear_bit();
            w.odr10().clear_bit();
            w.odr11().clear_bit();
            w.odr12().clear_bit();
            w.odr13().clear_bit();
            w.odr14().clear_bit();
            w.odr15().clear_bit()
        });
    }
}

错误

error[E0609]: no field `odr` on type `&G`
  --> src/my_api.rs:30:15
   |
29 |     pub fn all_led_off <G> (gpio: &G) {
   |                         - type parameter 'G' declared here
30 |         *gpio.odr.modify(|_,w| {
   |               ^^^

对于对任何寄存器的所有调用,它都有这个错误

4

1 回答 1

0

而不是使用泛型来尝试强制我们传入一个你不知道的类型,使用类似的东西:

让 my_name: () = 39.2;

它会给出一个错误,告诉你右边的值是什么,你可以用它来计算你可以传递给函数的数据类型。如图在 rust 中打印可变类型

于 2020-05-12T23:19:51.517 回答