寄存器 现在是时候探索LedAPI的内幕。

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

![no_main]

![no_std]

[allow(unused_imports)]

use aux7::{entry, iprint, iprintln};

[entry]

fn main() -> ! { aux7::init();

  1. unsafe {
  2. // A magic address!
  3. const GPIOE_BSRR: u32 = 0x48001018;
  4. // Turn on the "North" LED (red)
  5. *(GPIOE_BSRR as *mut u32) = 1 << 9;
  6. // Turn on the "East" LED (green)
  7. *(GPIOE_BSRR as *mut u32) = 1 << 11;
  8. // Turn off the "North" LED
  9. *(GPIOE_BSRR as *mut u32) = 1 << (9 + 16);
  10. // Turn off the "East" LED
  11. *(GPIOE_BSRR as *mut u32) = 1 << (11 + 16);
  12. }
  13. loop {}

}

这有什么神奇之处?

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

该特定寄存器控制通用输入/输出(GPIO)引脚(GPIO 是外设),可用于将每个引脚驱动为低电平或高电平。

一边:LED,数字输出和电压电平 驾驶?销?低?高?

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

LED电路

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

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

好。但是怎么能找出这个寄存器的作用呢?到RTRM的时间(阅读参考手册)!