embassy-rs / embassy

Modern embedded framework, using Rust and async.
https://embassy.dev
Apache License 2.0
5.67k stars 790 forks source link

STM32f7 UART cannot be read over virtual COM port (USART2) #982

Closed andyblarblar closed 2 years ago

andyblarblar commented 2 years ago

Hello, I've been looking at using this libarary for a project but I cannot get UART to work for the life of me. I'm using a nucleo-f767ZI, so I should have a virtual com port on USART2. To test, I modified the stm32f7/usart_dma example to use USART2, rather than 7:

#![no_std]
#![no_main]
#![feature(type_alias_impl_trait)]

use core::fmt::Write;

use defmt::*;
use embassy_executor::Spawner;
use embassy_stm32::dma::NoDma;
use embassy_stm32::usart::{Config, Uart};
use heapless::String;
use {defmt_rtt as _, panic_probe as _};

#[embassy_executor::main]
async fn main(_spawner: Spawner) {
    let p = embassy_stm32::init(Default::default());
    let config = Config::default();
    let mut usart = Uart::new(p.USART2, p.PA3, p.PA2, p.DMA1_CH6, p.DMA1_CH5, config);

    for n in 0u32.. {
        let mut s: String<128> = String::new();
        core::write!(&mut s, "Hello DMA World {}!\r\n", n).unwrap();

        unwrap!(usart.write(s.as_bytes()).await);

        info!("wrote DMA");
    }
}

When connecting to this port on linux /dev/ttyACM0, I get a connection message, but no data when connecting from TIO, miniterm, or rust itself, all at baud 115200.

I'm quite stumpted with this one, so any help would be appricated. Thanks!

Dirbaio commented 2 years ago

according to the manual section 6.9, it's USART3 on PD8/PD9

andyblarblar commented 2 years ago

according to the manual section 6.9, it's USART3 on PD8/PD9

Ah, well that's embarrassing. Thanks for the manual, it works perfectly fine on USART3.