3

我有一个 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) {}

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

提前致谢!

4

2 回答 2

0

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

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

于 2013-08-27T18:27:57.453 回答
0
  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;” 将输出设置为推挽而不是开漏。您稍后的代码尝试将此线路设置为高电平,这将不起作用,因为开漏输出将拉至地或允许线路浮动。推挽输出将允许您将线路设置为高或低。

于 2021-07-27T05:59:20.660 回答