Assembly 如何在STM32L152上配置GPIO引脚?

Assembly 如何在STM32L152上配置GPIO引脚?,assembly,cortex-m3,stm32,stm32l152,stm32ldiscovery,Assembly,Cortex M3,Stm32,Stm32l152,Stm32ldiscovery,我得到了一个包含stm32l152rb微处理器的STM32L发现板。我试图在没有任何库的情况下在汇编中对该板编程。到目前为止,我成功地编写了链接器脚本和一个基本例程,该例程将.data部分复制到RAM中,并将bss部分归零。但除此之外,我有点迷路了 作为了解配置GPIo工作原理的一个小实验,我想为连接到GPIo端口B引脚7的绿色LED发光板制作一个程序。通过阅读,我得出结论,我需要做以下两件事: 将GPIO端口B针脚7配置为输出针脚 将所述引脚设置为高 但是在这个地方,我没有看到森林,而是树木。

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

作为了解配置GPIo工作原理的一个小实验,我想为连接到GPIo端口B引脚7的绿色LED发光板制作一个程序。通过阅读,我得出结论,我需要做以下两件事:

  • 将GPIO端口B针脚7配置为输出针脚
  • 将所述引脚设置为高

  • 但是在这个地方,我没有看到森林,而是树木。我不确定我应该选择哪种IO模式,所有这些首字母缩略词都让我感到困惑。如果有人能给我提供详细的信息、说明以及可能的组装示例,我将不胜感激。

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

  • 重置GPIO寄存器:
    • RCC模块,寄存器
      AHBRSTR
      ,位
      GPIOBRST
      设置为1-rst高
    • RCC模块,寄存器
      AHBRSTR
      ,位
      GPIOBRST
      设置为0-rst低
  • 启用GPIO寄存器时钟:
    • RCC模块,寄存器
      AHBENR
      ,位
      GPIOBEN
      设置为1-启用时钟
  • 之后,您可以开始使用GPIO寄存器

  • GPIO模块,寄存器
    GPIOB_MODER
    ,位字段[15:14]设置为01- 通用输出模式
  • GPIO模块,寄存器
    GPIOB\U OTYPER
    ,第7位设置为0-输出推挽
  • GPIO模块,寄存器
    GPIOB_OSPEEDR
    ,位字段[15:14]设置为00-400 kHz极低速
  • GPIO模块,寄存器
    GPIOB_PUPDR
    ,位字段[15:14]设置为00-无上拉、下拉
  • 现在您可以使用
    GPIOB\u BSRR
    (设置/重置)寄存器或GPIOB\u ODR(输出)寄存器:

    • GPIO模块,寄存器
      GPIOB\U BSRR
      ,位7设置为1-设置GPIOB引脚7 (高)
    • GPIO模块,寄存器
      GPIOB\U BSRR
      ,位23设置为1-复位 GPIOB针脚7(低)

    哇。那很好。非常感谢。而且比我最初想象的要困难得多。为什么需要重置GPIO?我这样做只是为了在第一次触摸GPIO硬件时将GPIO寄存器置于默认状态。在其他情况下不需要这样做。