板子上面有两个灯,分别是ds1和ds0,我如果直接使用光盘中提供的代码(寄存器版本),如下:
#include <stm32f10x_lib.h>
#include "sys.h"
#include "delay.h"
#include "led.h"
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
LED_Init(); //初始化与LED连接的硬件接口
while(1)
{
LED0=0;
LED1=1;
delay_ms(300);
LED0=1;
LED1=0;
delay_ms(300);
}
}
两个灯都是交替闪烁,完全没有问题。
但是,如果我换一种操作方式,也就是不使用光盘中提供的sys.h文件中定义宏,程序如下:
#include <stm32f10x_lib.h>
#include "sys.h"
#include "delay.h"
#include "led.h"
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
LED_Init(); //初始化与LED连接的硬件接口
while(1)
{
//LED0=0; //此处被我注释掉
//LED1=1;
GPIOA->BRR|=1<<8; //利用keil软件中自带的stm32f10x_map.h文件中的指针定义,直接操作寄存器
GPIOD->BRR|=1<<2;
delay_ms(100);
// LED0=1; //此处被我注释掉
//LED1=0;
GPIOA->BSRR|=1<<8; //利用keil软件中自带的stm32f10x_map.h文件中的指针定义,直接操作寄存器
GPIOD->BSRR|=1<<8;
delay_ms(100);
}
}
而这个时候ds0依然可以闪烁,但是ds1却始终是亮着,这是怎么回事啊?
是不是问题出在sys.h文件中LED0=1和LED1=1这两个宏的定义啊?
|