我有一个stm32l -发现板,它有一个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) {}
我错过了什么吗?我能找到一些基本的例子吗?
提前感谢!
ST在其网站上提供的标准外设库是一个很好的起点。它有编程GPIO的例子。请注意,他们的代码绝对是可怕的,但至少它可以工作,并且是开始的东西。
你使用什么编译器/调试器?如果您正在使用IAR,那么您可以在逐步执行代码时查看GPIO寄存器。请将GPIO寄存器的值贴在您的问题上,也许我们可以提供帮助。
- RCC->AHBENR = 0x00000002;
改为"RCC->AHBENR |= 0x00000002;"这将确保您启用GPIOB而不禁用其他一切。现有的代码将禁用重要的东西,如闪存控制器和所有其他gpio。
- GPIOB-> mode = 0x00001000;//这将设置引脚6为输出,所有其他引脚为输入。这是你的意图吗?
- GPIOB->OTYPER = 0x00000040;//这将设置输出类型为open drain,这意味着你只能向下拉线。
改为"GPIOB-> mode = (GPIOB-> mode &0xFFFFDFFF) | 0x00001000;"这将设置引脚6作为输出,而不改变任何其他引脚的配置。
改为"GPIOB->OTYPER |= 0x00000040;"设置输出为推挽而不是开漏。您稍后的代码试图将这条线设置为高,这将不起作用,因为打开漏极输出将拉到地面或允许线路浮动。一个推拉输出将允许您设置线高或低。