【问题标题】:Stuck with basic programming of STM32L-Discovery坚持使用 STM32L-Discovery 的基本编程
【发布时间】:2013-05-31 11:35:00
【问题描述】:

我有一个 STM32L-Discovery Board,上面有一个 STM32L152R8 微处理器。我一直在努力让基本的事情发挥作用。

我查看了 ST 给出的示例(电流消耗触摸传感器和温度传感器),我认为它们对用户不友好,有太多的库、子进程和中断,这使得代码真的很难理解。

我尝试打开蓝色 LED (GPIO PB6),但无法做到。

我的代码编译正确,但对电路板没有任何作用。这是“main.c”的代码。

RCC->AHBRSTR = 0x00000002;
RCC->AHBRSTR = 0x00000000;
RCC->AHBENR = 0x00000002;
GPIOB->MODER  = 0x00001000;
GPIOB->OTYPER   = 0x00000040;
GPIOB->OSPEEDR = 0x00001000;
GPIOB->PUPDR = 0x00000000;
GPIOB->ODR   = 0x00000040;
while(1) {}

我错过了什么吗?我能在某处找到真正基本的例子吗?

提前致谢!

【问题讨论】:

    标签: stm32l152 stm32ldiscovery


    【解决方案1】:

    ST 在其网站上提供的标准外设库是一个很好的起点。它有关于编程 GPIO 的示例。请注意,他们的代码非常糟糕,但至少它可以工作并且可以开始。

    您使用的是什么编译器/调试器?如果您使用的是 IAR,那么您可以在单步执行代码时查看 GPIO 寄存器。请将 GPIO 寄存器的值发布到您的问题中,也许我们可以提供帮助。

    【讨论】:

    • 我还建议尝试 ChibiOS——一个免费的开源实时操作系统。它几乎为该板提供了开箱即用的支持,这也是了解 RTOS 的一种非常好的方式。在 Linux 上使用gdbgdbservergcc,所有这些都可以正常工作。如果您有 Windows 和 Keil(试用版或许可,后者太贵了),只需单击一下即可设置板并为其编写代码。
    【解决方案2】:
    1. RCC->AHBENR = 0x00000002;

    更改为“RCC->AHBENR |= 0x00000002;” 这将确保您启用 GPIOB 而不会禁用其他所有功能。现有代码将禁用重要的东西,如闪存控制器和所有其他 GPIO。

    1. GPIOB->MODER = 0x00001000; // 这会将引脚 6 设置为输出,将所有其他引脚设置为输入。这是你的意图吗?

    更改为“GPIOB->MODER = (GPIOB->MODER & 0xFFFFDFFF) | 0x00001000;” 这会将引脚 6 设置为输出,而不会更改任何其他引脚的配置。

    1. GPIOB->OTYPER = 0x00000040; // 这会将输出类型设置为开漏,这意味着你只能将线拉下来。

    更改为“GPIOB->OTYPER |= 0x00000040;” 将输出设置为推挽而不是开漏。您稍后的代码尝试将此线路设置为高电平,这将不起作用,因为开漏输出将拉至地或允许线路浮动。推挽输出将允许您将线路设置为高或低。

    【讨论】:

      猜你喜欢
      • 2015-12-05
      • 1970-01-01
      • 2018-05-11
      • 1970-01-01
      • 2019-11-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-21
      • 2012-10-31
      相关资源
      最近更新 更多