Я закончил с этой строкой:
let cfg = serial::Config::default().baudrate(115_200.bps());
И использовал ее в моем привет мире:
#[entry]
fn main() -> ! {
let dp = stm32::Peripherals::take().expect("cannot take peripherals");
let mut rcc = dp.RCC.constrain();
let gpioa = dp.GPIOA.split(&mut rcc);
let cfg = serial::Config::default().baudrate(115_200.bps());
let mut usart2 = dp
.USART2
.usart(gpioa.pa2, gpioa.pa3, cfg, &mut rcc)
.unwrap();
let mut delay = dp.TIM15.delay(&mut rcc);
loop {
writeln!(usart2, "Hello, World!").unwrap();
delay.delay(50.ms());
}
}
Это может привести к проблемам, если вы хотите определить конфигурацию один раз и использовать это для нескольких UARTS. Например:
#[entry]
fn main() -> ! {
let dp = stm32::Peripherals::take().expect("cannot take peripherals");
let mut rcc = dp.RCC.constrain();
let cfg = serial::Config::default().baudrate(115_200.bps());
let gpioa = dp.GPIOA.split(&mut rcc);
let mut usart2 = dp
.USART2
.usart(gpioa.pa2, gpioa.pa3, cfg, &mut rcc)
.unwrap();
let gpiob = dp.GPIOB.split(&mut rcc);
let mut usart3 = dp
.USART3
.usart(gpiob.pb10, gpiob.pb11, cfg, &mut rcc)
.unwrap();
let mut delay = dp.TIM15.delay(&mut rcc);
loop {
writeln!(usart2, "Hello, World!").unwrap();
writeln!(usart3, "Hello, again!").unwrap();
delay.delay(50.ms());
}
}