因此,当我学习 rust 时,我想在 stm32l0xx-hal 中为 uart 编写一个包装器,我一直收到的错误是 impl 中的 USART 模板与 struct 声明不同
代码:
pub struct Uart<USART, TX, RX> {
_tx: serial::Tx<USART>,
_rx: serial::Rx<USART>,
_tx_pin: TX,
_rx_pin: RX
}
impl<USART: serial::Serial2Ext<TX,RX>, TX, RX> Uart<USART, TX,RX> {
pub fn new
(usart: USART, mut rcc: rcc::Rcc, tx_pin: TX, rx_pin: RX) -> Self {
let serial = usart
.usart(tx_pin, rx_pin, serial::Config::default(), &mut rcc)
.unwrap();
let (tx, rx) = serial.split();
Uart{
_tx : tx, // <- error
_rx : rx, // <- error
_tx_pin : tx_pin,
_rx_pin : rx_pin
}
}
}
错误:
error[E0308]: mismatched types
--> src/uart.rs:28:19
|
17 | impl<USART: serial::Serial2Ext<TX,RX>, TX, RX> Uart<USART, TX,RX> {
| ----- expected this type parameter
...
28 | _tx : tx,
| ^^ expected `Tx<USART>`, found `Tx<USART2>`
|
= note: expected struct `stm32l0xx_hal::serial::Tx<USART>`
found struct `stm32l0xx_hal::serial::Tx<stm32l0xx_hal::serial::USART2>`
stm32l0xx_hal::serial::USART2
- 是我传递给新函数的 usart 类型