keil5相同程序不同工程运行结果不一样/Keil下载开发板提供的程序可以把LED灯点亮,为什么自己写的程序没能点亮LED灯

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

一、项目背景

学习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灯终于点亮了!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值