Rust 如何读取STM32 Nucleo-L433-RC上的uart数据
Rust 如何读取STM32 Nucleo-L433-RC上的uart数据,rust,embedded,uart,Rust,Embedded,Uart,我正在尝试从NUCLEO-L433RC-P上的uart读取数据,并将其回显。我以为调用tx.read()就足够了,但它不是这样工作的。在uart上写操作很好。在初始化外围设备时,我是否遗漏了一些内容,或者只是读取了错误的函数 #![deny(unsafe_code)] #![no_main] #![no_std] extern crate cortex_m; #[macro_use(exception)] extern crate cortex_m_rt as rt; extern crate
我正在尝试从NUCLEO-L433RC-P上的uart读取数据,并将其回显。我以为调用tx.read()就足够了,但它不是这样工作的。在uart上写操作很好。在初始化外围设备时,我是否遗漏了一些内容,或者只是读取了错误的函数
#![deny(unsafe_code)]
#![no_main]
#![no_std]
extern crate cortex_m;
#[macro_use(exception)]
extern crate cortex_m_rt as rt;
extern crate panic_semihosting;
extern crate stm32l4xx_hal as hal;
#[macro_use(block)]
extern crate nb;
use hal::prelude::*;
use hal::serial::{Config, Serial};
use rt::entry;
use rt::ExceptionFrame;
#[entry]
fn main() -> ! {
let hal_peripherals = hal::stm32::Peripherals::take().unwrap();
let mut flash = hal_peripherals.FLASH.constrain();
let mut rcc = hal_peripherals.RCC.constrain();
let clocks = rcc
.cfgr
.sysclk(80.mhz())
.pclk1(80.mhz())
.pclk2(80.mhz())
.freeze(&mut flash.acr);
let mut gpiob = hal_peripherals.GPIOB.split(&mut rcc.ahb2);
let mut gpioa = hal_peripherals.GPIOA.split(&mut rcc.ahb2);
let mut led = gpiob
.pb13
.into_push_pull_output(&mut gpiob.moder, &mut gpiob.otyper);
let tx = gpioa.pa2.into_af7(&mut gpioa.moder, &mut gpioa.afrl);
let rx = gpioa.pa3.into_af7(&mut gpioa.moder, &mut gpioa.afrl);
let serial = Serial::usart2(
hal_peripherals.USART2,
(tx, rx),
Config::default().baudrate(115_200.bps()),
clocks,
&mut rcc.apb1r1,
);
let (mut tx, mut rx) = serial.split();
for i in "Hello World!!!\r\n".as_bytes().iter() {
block!(tx.write(*i)).ok();
}
loop {
let res = rx.read();
if res.is_ok() {
led.set_high().unwrap();
let char = res.unwrap();
block!(tx.write(char)).ok();
} else {
led.set_low().unwrap();
}
}
}
#[exception]
fn HardFault(ef: &ExceptionFrame) -> ! {
panic!("{:#?}", ef);
}
在从usart2更改为usart1并使用其他引脚后,它可以工作