坚持使用STM32L-Discovery的基本编程

时间:2013-06-04 22:27:38

标签: stm32l152 stm32ldiscovery

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

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

提前致谢!

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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;” 将输出设置为推挽而非开漏。您稍后的代码尝试将此线设置为高电平,这将不起作用,因为开漏输出将接地或允许该线浮动。推挽输出允许您将线路设置为高电平或低电平。