一、项目背景
学习STM32F407开发板,用寄存器方式点亮LED灯。
照着开发文档敲的的代码,编译成功,下载也显示成功,下载器fireDAP亮灯,
但是开发板上的LED灯不亮。
然后用开发板提供的官方程序,点击下载后,可以点亮LED。
一开始怀疑时自己代码有错误,然后我就直接把自己的代码用记事本先保存起来,然后复制官方的代码过来当前工程,下载程序,依然无法点亮LED。
那就说明跟程序无关,应该时跟Keil工程的配置有关。
于是打开魔术棒检查。

/*
使用寄存器的方法点亮LED灯
*/
#include "stm32f4xx.h"
/**
* 主函数
*/
int main(void)
{
/*开启 GPIOA 时钟,使用外设时都要先开启它的时钟*/
RCC_AHB1ENR |= ((unsigned int)1<<0);
/* LED 端口初始化 */
/*GPIOA MODER15清空*/
GPIOA_MODER &= ~( (unsigned int)0x3<< (2*15));
/*PA15 MODER15 = 01b 输出模式*/
GPIOA_MODER |= ((unsigned int)1<<2*15);
/*GPIOA OTYPER15清空*/
GPIOA_OTYPER &= ~((unsigned int)1<<1*15);
/*PA15 OTYPER15 = 0b 推挽模式*/
GPIOA_OTYPER |=((unsigned int)0<<1*15);
/*GPIOA OSPEEDR15清空*/
GPIOA_OSPEEDR &= ~((unsigned int)0x3<<2*15);
/*PA15 OSPEEDR15 = 0b 速率2MHz*/
GPIOA_OSPEEDR |= ((unsigned int)0<<2*15);
/*GPIOA PUPDR15清空*/
GPIOA_PUPDR &= ~((unsigned int)0x3<<2*15);
/*PA15 PUPDR15 = 01b 上拉模式*/
GPIOA_PUPDR |= ((unsigned int)1<<2*15);
/*PA15 BSRR寄存器的 BR15置1,使引脚输出低电平*/
GPIOA_BSRR |= ((unsigned int)1<<16<<15);
/*PA15 BSRR寄存器的 BS15置1,使引脚输出高电平*/
// GPIOA_BSRR |= ((unsigned int)1<<15);
while(1);
}
// 函数为空,目的是为了骗过编译器不报错
void SystemInit(void)
{
}
/*********************************************END OF FILE**********************/
二、最后解决BUG的的操作如下:
先转到界面Debug->Settings
然后把界面下面的Reset选项选由SYSRESETREQ(default)改成HW RESET

接着转到界面Target界面下,把Use MicroLIB打钩✔

然后再重新编译和下载程序,开发板上的LED灯终于点亮了!!
在Keil5中,开发者遇到相同程序在不同工程下运行结果不同的情况。通过检查发现,问题出在Debug设置和MicroLIB选项上。正确操作为:在Debug设置中将Reset选项改为HW RESET,Target界面下勾选Use MicroLIB。完成这些修改并重新编译下载后,开发板上的LED灯成功被点亮。

1325

被折叠的 条评论
为什么被折叠?



