Skip to content
Snippets Groups Projects
Select Git revision
  • ed3e219861c9790944fbe2b8a9643599c09adf0d
  • master default protected
2 results

serial-dma-tx.rs

Blame
  • serial-dma-tx.rs 1.18 KiB
    //! Serial interface echo server
    //!
    //! In this example every received byte will be sent back to the sender. You can test this example
    //! with serial terminal emulator like `minicom`.
    #![deny(unsafe_code)]
    //#![deny(warnings)]
    #![no_std]
    
    extern crate stm32f4x_hal as f4;
    
    use f4::prelude::*;
    use f4::serial::Serial;
    use f4::stm32f4x;
    
    fn main() {
        let p = stm32f4x::Peripherals::take().unwrap();
    
        let mut flash = p.FLASH.constrain();
        let mut rcc = p.RCC.constrain();
        let mut gpioa = p.GPIOA.split(&mut rcc.ahb1);
        let streams = p.DMA1.split(&mut rcc.ahb1);
        let tx_stream = streams.1.into_channel4(); // S5<C4>
    
        let clocks = rcc.cfgr.freeze(&mut flash.acr);
    
        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(p.USART2, (tx, rx), 115_200.bps(), clocks, &mut rcc.apb1);
        let (mut tx, mut rx) = serial.split();
    
        let (_, c, tx) = tx.write_all(tx_stream, b"The quick brown fox").wait();
    
        // asm::bkpt();
    
        let (_, c, tx) = tx.write_all(c, b" jumps").wait();
    
        // asm::bkpt();
    
        tx.write_all(c, b" over the lazy dog.").wait();
    
        // asm::bkpt();
    }