Created
January 5, 2022 00:33
-
-
Save 9names/1883fceeac27b69e9db134053d5b02c6 to your computer and use it in GitHub Desktop.
rp2040 uart0 + uart 1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//! # UART Example | |
//! | |
//! This application demonstrates how to use the UART Driver to talk to a serial | |
//! connection. | |
//! | |
//! It may need to be adapted to your particular board layout and/or pin | |
//! assignment. | |
//! | |
//! See the `Cargo.toml` file for Copyright and licence details. | |
#![no_std] | |
#![no_main] | |
// The macro for our start-up function | |
use cortex_m_rt::entry; | |
// Ensure we halt the program on panic (if we don't mention this crate it won't | |
// be linked) | |
use panic_halt as _; | |
// Alias for our HAL crate | |
use rp2040_hal as hal; | |
// A shorter alias for the Peripheral Access Crate, which provides low-level | |
// register access | |
use hal::pac; | |
// Some traits we need | |
use core::fmt::Write; | |
use embedded_time::fixed_point::FixedPoint; | |
use rp2040_hal::clocks::Clock; | |
/// The linker will place this boot block at the start of our program image. We | |
/// need this to help the ROM bootloader get our code up and running. | |
#[link_section = ".boot2"] | |
#[used] | |
pub static BOOT2: [u8; 256] = rp2040_boot2::BOOT_LOADER_W25Q080; | |
/// External high-speed crystal on the Raspberry Pi Pico board is 12 MHz. Adjust | |
/// if your board has a different frequency | |
const XTAL_FREQ_HZ: u32 = 12_000_000u32; | |
/// Entry point to our bare-metal application. | |
/// | |
/// The `#[entry]` macro ensures the Cortex-M start-up code calls this function | |
/// as soon as all global variables are initialised. | |
/// | |
/// The function configures the RP2040 peripherals, then writes to the UART in | |
/// an infinite loop. | |
#[entry] | |
fn main() -> ! { | |
// Grab our singleton objects | |
let mut pac = pac::Peripherals::take().unwrap(); | |
let core = pac::CorePeripherals::take().unwrap(); | |
// Set up the watchdog driver - needed by the clock setup code | |
let mut watchdog = hal::Watchdog::new(pac.WATCHDOG); | |
// Configure the clocks | |
let clocks = hal::clocks::init_clocks_and_plls( | |
XTAL_FREQ_HZ, | |
pac.XOSC, | |
pac.CLOCKS, | |
pac.PLL_SYS, | |
pac.PLL_USB, | |
&mut pac.RESETS, | |
&mut watchdog, | |
) | |
.ok() | |
.unwrap(); | |
let mut delay = cortex_m::delay::Delay::new(core.SYST, clocks.system_clock.freq().integer()); | |
// The single-cycle I/O block controls our GPIO pins | |
let sio = hal::Sio::new(pac.SIO); | |
// Set the pins to their default state | |
let pins = hal::gpio::Pins::new( | |
pac.IO_BANK0, | |
pac.PADS_BANK0, | |
sio.gpio_bank0, | |
&mut pac.RESETS, | |
); | |
let uart_pins = ( | |
// UART TX (characters sent from RP2040) on pin 1 (GPIO0) | |
pins.gpio0.into_mode::<hal::gpio::FunctionUart>(), | |
// UART RX (characters received by RP2040) on pin 2 (GPIO1) | |
pins.gpio1.into_mode::<hal::gpio::FunctionUart>(), | |
); | |
let mut uart = hal::uart::UartPeripheral::new(pac.UART0, uart_pins, &mut pac.RESETS) | |
.enable( | |
hal::uart::common_configs::_9600_8_N_1, | |
clocks.peripheral_clock.freq().into(), | |
) | |
.unwrap(); | |
uart.write_full_blocking(b"UART example\r\n"); | |
let uart1_pins = ( | |
// UART TX (characters sent from RP2040) on pin 6 (GPIO4) | |
pins.gpio4.into_mode::<hal::gpio::FunctionUart>(), | |
// UART RX (characters received by RP2040) on pin 7 (GPIO5) | |
pins.gpio5.into_mode::<hal::gpio::FunctionUart>(), | |
); | |
let mut uart1 = hal::uart::UartPeripheral::new(pac.UART1, uart1_pins, &mut pac.RESETS) | |
.enable( | |
hal::uart::common_configs::_9600_8_N_1, | |
clocks.peripheral_clock.freq().into(), | |
) | |
.unwrap(); | |
uart1.write_full_blocking(b"Hello from UART1\r\n"); | |
let mut value = 0u32; | |
loop { | |
writeln!(uart, "value: {:02}\r", value).unwrap(); | |
writeln!(uart1, "value: {:02}\r", !value).unwrap(); | |
delay.delay_ms(1000); | |
value += 1 | |
} | |
} | |
// End of file |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment