1

我有一个 STM32L 发现板,其中包含一个 stm32l152rb 微处理器。我尝试在没有任何库的情况下在汇编中对该板进行编程。到目前为止,我成功地编写了链接器脚本和一个将 .data 部分复制到 RAM 并将 bss 部分清零的基本例程。但除此之外,我有点失落。

作为一个了解如何配置 GPIO 工作原理的小型实验,我想为板子制作一个程序,点亮连接到 GPIO 端口 B 引脚 7 的绿色 LED。阅读数据表,我得出结论,我需要做以下两件事:

  1. 将 GPIO 端口 B,引脚 7 配置为输出引脚
  2. 将所述引脚设置为高

但在这个地方,我比喻只见树木不见森林。我不确定我应该选择多种 IO 模式中的哪一种,所有这些首字母缩略词都让我感到困惑。我真的很感谢有人给我详细的信息、说明和可能的示例组装如何做到这一点。

4

1 回答 1

3

在使用 GPIO 模块之前,您必须执行以下操作:

  1. 重置 GPIO 寄存器:
    • RCC 模块,寄存器AHBRSTR,位GPIOBRST设置为 1 - rst high
    • RCC 模块,寄存器AHBRSTR,位GPIOBRST设置为 0 - rst 低
  2. 启用 GPIO 寄存器时钟:
    • RCC 模块,寄存器AHBENR,位GPIOBEN设置为 1 - 启用时钟

之后,您可以开始使用 GPIO 寄存器

  1. GPIO 模块、寄存器GPIOB_MODER、位域 [15:14] 设置为 01 - 通用输出模式
  2. GPIO 模块,寄存器GPIOB_OTYPER,第 7 位设置为 0 - 输出推挽
  3. GPIO 模块、寄存器GPIOB_OSPEEDR、位域 [15:14] 设置为 00 - 400 kHz 非常低的速度
  4. GPIO 模块、寄存器GPIOB_PUPDR、位域 [15:14] 设置为 00 - 无上拉、下拉

现在您可以使用GPIOB_BSRR(设置/重置)寄存器或 GPIOB_ODR(输出)寄存器:

  • GPIO 模块,寄存器GPIOB_BSRR,第 7 位设置为 1 - 设置 GPIOB 引脚 7(高)
  • GPIO 模块,寄存器GPIOB_BSRR,第 23 位设置为 1 - 重置 GPIOB 引脚 7(低)
于 2013-05-31T17:45:58.683 回答