寄存器

是时候探索Led API在幕后的作用了。

简而言之,它只是写入一些特殊的内存区域。进入07-registers目录,让我们 逐个语句运行starter代码语句。

#![no_main]
#![no_std]

#[allow(unused_imports)]
use aux7::{entry, iprint, iprintln};

#[entry]
fn main() -> ! {
    aux7::init();

    unsafe {
        // A magic address!
        const GPIOE_BSRR: u32 = 0x48001018;

        // Turn on the "North" LED (red)
        *(GPIOE_BSRR as *mut u32) = 1 << 9;

        // Turn on the "East" LED (green)
        *(GPIOE_BSRR as *mut u32) = 1 << 11;

        // Turn off the "North" LED
        *(GPIOE_BSRR as *mut u32) = 1 << (9 + 16);

        // Turn off the "East" LED
        *(GPIOE_BSRR as *mut u32) = 1 << (11 + 16);
    }

    loop {}
}

这是什么魔法?

地址0x48001018指向寄存器。寄存器是控制外围设备的特殊存储器区域。 外围设备是一块电子设备,位 于微控制器封装内的处理器旁边,为处理器提供额外的功能。毕竟,处理器本身只能做数学和逻辑。

该特定寄存器控制通用输入/输出(GPIO) 引脚 (GPIO外围设备),并可用于驱动这些引脚中的每一个

旁白: LEDs, 数字输出和电压电平

驱动? 引脚? 低的? 高的?

引脚是电触点。我们的微控制器有几个,其中一些连接到LED。LED(发光二极管)仅当电压以特定极性施加到其上时才会发光。

幸运的是,微控制器的引脚连接到具有正确极性的LED。我们所要做的就是通过引脚输出一些非零电压以打开LED。 连接到LED的引脚被配置为数字输出,只能输出两个不同的电压电平:"低", 0 伏, 或 "高", 3 伏。 "高" (电压) 将点亮LED,而 "低" (电压) 将熄灭LED。

这些"低"和"高"状态直接映射到数字逻辑的概念。"低"为0false和"高"为1true。 这就是为什么这种引脚配置被称为数字输出。


好的。但是怎样才能知道这个寄存器的作用呢?RTRM时间到了(阅读参考手册)!