新手上路
- 积分
- 28
- 金钱
- 28
- 注册时间
- 2020-6-15
- 在线时间
- 5 小时
|
1金钱
Apollo的开发板
使用Rust开发
部分代码如下
#[entry]
fn start() -> ! {
rtt_init_print!();
rprintln!("reset");
let device = stm32::Peripherals::take().unwrap();
let _core = stm32::CorePeripherals::take().unwrap();
let rcc = device.RCC.constrain();
let clocks = rcc.cfgr.use_hse(25.mhz()).sysclk(64.mhz()).freeze();
let ga = device.GPIOA.split();
let mut serial1 = serial::Serial::usart1(
device.USART1,
(ga.pa9.into_alternate_af7(), ga.pa10.into_alternate_af7()),
serial::config::Config::default().baudrate(115_200.bps()),
clocks,
)
.unwrap();
serial1.listen(serial::Event::Rxne);
stm32::NVIC::unpend(Interrupt::USART1);
unsafe {
stm32::NVIC::unmask(Interrupt::USART1);
}
rprintln!("{}", stm32::NVIC::is_enabled(Interrupt::USART1));
free(|cs| {
SERIAL1.borrow(cs).replace(Some(serial1));
SERIAL1_BUF.borrow(cs).replace(Some(BytesBuffer::new()));
});
rprintln!("serial1 ok");
loop {}
}
#[interrupt]
fn USART1() {
free(|cs| {
if let (Some(ref mut serial1), Some(ref mut serial1_buf)) = (
SERIAL1.borrow(cs).borrow_mut().deref_mut(),
SERIAL1_BUF.borrow(cs).borrow_mut().deref_mut(),
) {
if serial1.is_rxne() {
let b = serial1.read().unwrap();
serial1_buf.push(b).unwrap();
}
match serial1_buf.check_end() {
Some((content, length)) => {
for i in 0..length {
block!(serial1.write(content[i])).unwrap();
}
serial1_buf.clear();
}
None => {}
}
}
});
}
每次断开再连接串口调试助手, 都会导致程序一次复位
Terminal
12:26:43.398 serial1 ok
12:26:44.426 reset
12:26:44.426 true
12:26:44.426 serial1 ok
12:26:45.479 reset
12:26:45.479 true
12:26:45.479 serial1 ok
12:26:47.301 reset
12:26:47.301 true
12:26:47.301 serial1 ok

请大家帮我看一看是什么原因
|
|