Hi,
I'm trying to set up a serial connection using usart on the stm32f3Discovery, which has an stm32f303vc cpu on it. When sending text to it using Minicom, I get gibberish back. For instance, when typing abcdefghijklmnopqrstuvwxyz
, I get yz{|}~hijklmnoxyz{|}~xyz
. So, for some chatacters the value is correct, for some not. And the results are consistent.
This is my code:
#![no_std]
#![no_main]
use cortex_m_rt::entry;
use stm32f3xx_hal::prelude::*;
use stm32f3xx_hal::stm32;
#[panic_handler]
unsafe fn panic_handler(info: &core::panic::PanicInfo) -> ! {
cortex_m_semihosting::hprintln!("ERROR! {:?}", info).unwrap();
loop {}
}
#[entry]
fn main() -> ! {
let peripherals = stm32f3xx_hal::stm32::Peripherals::take().unwrap();
let mut rcc = peripherals.RCC.constrain();
let mut flash = peripherals.FLASH.constrain();
let clocks = rcc.cfgr.freeze(&mut flash.acr);
let mut gpioa = peripherals.GPIOA.split(&mut rcc.ahb);
let usart1_txd = gpioa.pa9.into_af7(&mut gpioa.moder, &mut gpioa.afrh);
let usart1_rxd = gpioa.pa10.into_af7(&mut gpioa.moder, &mut gpioa.afrh);
let usart1 = stm32f3xx_hal::serial::Serial::usart1(
peripherals.USART1,
(usart1_txd, usart1_rxd),
9600.bps(),
clocks,
&mut rcc.apb2,
);
let (mut usart1_tx, mut usart1_rx) = usart1.split();
loop {
match usart1_rx.read() {
Ok(b) => nb::block!(usart1_tx.write(b)).unwrap(),
Err(nb::Error::Other(_)) => {
let usart1 = unsafe { &*stm32::USART1::ptr() };
usart1.icr.write(|w| unsafe { w.bits(0xFF) });
}
_ => (),
}
}
}
Here's my .minirc.dfl
:
pu baudrate 9600
pu bits 8
pu parity N
pu stopbits 1
pu rtscts No
pu xonxoff No
The command I use to start minicom:
$ minicom -D /dev/ttyUSB0 -b 9600 -o
Anybody know what causes this behaviour?