最新电影在线观看,jrs低调看直播,avav天堂,囯产精品宾馆在线精品酒店,亚洲精品成人区在线观看

SWM341單片機運行 Rust

為什么要在Swm341中運行Rust代碼?

Swm341是一款非常優秀的國產單片機芯片,聚焦于顯示控制,有著非常多的硬件資源可供使用,開發非常方便。另外Rust目前開始變得流行,執行效率也非常高,因此想在Swm341中嘗試使用運行Rust開發。

一切從點燈開始

正如學習語言從打印hello world!開始,單片機的學習當然從點燈開始。在本工程中,將會打印一些日志,并且一秒閃爍一次。代碼非常簡單,在src/main中添加以下的代碼即可。

#![no_std]
#![no_main]

use defmt_rtt as _;
use panic_probe as _;
use swm341_pac as pac;

// 簡單的毫秒延時函數
fn delay_ms(ms: u32) {
    for _ms in 0..ms {
        for _i in 0..20 {
            for _j in 0..10 {}
        }
    }
}

#[cortex_m_rt::entry]
fn main() -> ! {
    defmt::info!("swm341 led blinky example start...");

    let p = pac::Peripherals::take().unwrap();
    let sys_con = p.SYS;
    // 開啟 gpion的時鐘
    sys_con.clken0.write(|w| w.gpion().set_bit());
    let port = p.PORTN;
    // 設置portn.0 為 gpio 映射
    port.func0.write(|w| unsafe { w.pin0().bits(0) });
    // 設置 portn.0 上拉
    port.pullu.write(|w| w.pin0().set_bit());

    let gpio = p.GPION;
    // 設置 gpion.0 為輸出方向
    gpio.dir.write(|w| w.pin0().set_bit());

    let mut count = 0u32;
    loop {
        // 翻轉 gpion.0
        gpio.odr.modify(|r, w| w.pin0().bit(!r.pin0().bit()));
        // 打印計數值
        defmt::info!("{}", count);
        count += 1;
        delay_ms(500);
    }
}

然后直接執行cargo run --example blinky即可編譯和下載并運行,下載非常快,不到1秒。

執行效果如下

可執行文件的大小

由下圖可知,

  • 在Release模式下編譯,固件大小為(6740+56+1032)/1024=7.64KB
  • 在Debug模式下編譯,固件大小為(18228+56+1032)/1024=18.8KB

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 1
收藏 2
關注 19
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧