【问题标题】:How to configure the GPIO pins on an STM32L152?如何在 STM32L152 上配置 GPIO 引脚?
【发布时间】:2013-05-26 15:51:10
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: assembly cortex-m3 stm32 stm32l152 stm32ldiscovery


    【解决方案1】:

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

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

    之后就可以开始使用GPIO寄存器了

    1. GPIO 模块,寄存器GPIOB_MODER,位域 [15:14] 设置为 01 - 通用输出模式
    2. GPIO 模块,寄存器GPIOB_OTYPER,bit 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(低)

    【讨论】:

    • 哇。那很好。谢谢!
    • 而且比我最初想象的要困难得多。
    • 为什么需要重置 GPIO?
    • 我这样做只是为了让 GPIO 寄存器进入默认状态,当我第一次触摸 GPIO hw 时。其他情况不需要这样做。
    猜你喜欢
    • 2021-07-19
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 2014-11-15
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多