stm32嵌入式系统led闪烁程序疑问

#include"stm32f10x_lib.h"//对stm32地址映射GPIO_InitTypeDefGPIO_InitStructure;//定义结构体ErrorS... #include "stm32f10x_lib.h"//对stm32地址映射

GPIO_InitTypeDef GPIO_InitStructure;//定义结构体

ErrorStatus HSEStartUpStatus;
/

void RCC_Configuration(void);

void NVIC_Configuration(void);

void Delay(vu32 nCount);

int main(void)

{

#ifdef DEBUG
//如果定义了debug
 debug();
//就执行
#endif
//否则跳出
 RCC_Configuration(); //stm32配置系统时钟配置函数

 NVIC_Configuration(); //中断NVIC配置函数

 //使能APB2总线外设时钟
,就是打开APB2总线上相应的GPIO时钟
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB| RCC_APB2Periph_AFIO, ENABLE);

 GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); //这个不清楚
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; // 选择所有脚

 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //配置成推挽式输出

 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出模式下 I/O输出速度50M HZ

 GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA口,在这里调用了结构体的所有成员

 GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PB口

 while (1)

 {

  GPIO_Write(GPIOB, 0xffff); //写一个字数据到PB口

Delay(0x8FFFFF); // 延时

GPIO_Write(GPIOB, 0x0000); //写一个字数据到PB口

Delay(0x8FFFFF); // 延时

 }

}

void RCC_Configuration(void)

{

//复位RCC外部设备寄存器到默认值

 RCC_DeInit();

 //打开外部高速晶振,这些在手册都有

 RCC_HSEConfig(RCC_HSE_ON);

  //等待外部高速时钟准备好

 HSEStartUpStatus = RCC_WaitForHSEStartUp();

 if(HSEStartUpStatus == SUCCESS)  //外部高速时钟已经准别好

 {

  //开启FLASH的预取功能
,为啥要启动这个,我也不清楚
  FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

  //FLASH延迟2个周期

  FLASH_SetLatency(FLASH_Latency_2);

 //配置AHB(HCLK)时钟=SYSCLK

  RCC_HCLKConfig(RCC_SYSCLK_Div1);

  //配置APB2(PCLK2)钟=AHB时钟

  RCC_PCLK2Config(RCC_HCLK_Div1);

  //配置APB1(PCLK1)钟=AHB 1/2时钟

  RCC_PCLK1Config(RCC_HCLK_Div2);

   //配置PLL时钟 == 外部高速晶体时钟*9 PLLCLK = 8MHz *9 = 72 MHz

  RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

  //使能PLL时钟

  RCC_PLLCmd(ENABLE);

  //等待PLL时钟就绪

  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)

  {

  }

 //配置系统时钟 = PLL时钟

  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

  //检查PLL时钟是否作为系统时钟

  while(RCC_GetSYSCLKSource() != 0x08)

  {

  }

 }

}

void NVIC_Configuration(void)

{

#ifdef VECT_TAB_RAM

 //为啥要这样写,其实我也不清楚,只能等高手解答
 NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);

#else 

 NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

#endif

}

void Delay(vu32 nCount)

{

 for(; nCount != 0; nCount--);

}

#ifdef DEBUG

//为啥这里又来了一个函数?
void assert_failed(u8* file, u32 line)

{

 while (1)

 {

 }

}

#endif
展开
择善而从心安
2013-02-15 · 信息交流旨在互通有无
择善而从心安
采纳数:125 获赞数:233

向TA提问 私信TA
展开全部
void NVIC_Configuration(void)

{

#ifdef VECT_TAB_RAM

 //为啥要这样写,其实我也不清楚,只能等高手解答
 NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);

#else 

 NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

#endif

}

----是表示中断矢量表放在RAM还是FLASH 区。
//为啥这里又来了一个函数?
void assert_failed(u8* file, u32 line)

{

 while (1)

 {

 }

----这是个断言函数,用来检查函数变量合法性的。对程序本身无实质影响。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式