中断程序的解释.docVIP

  • 25
  • 0
  • 约1.77万字
  • 约 17页
  • 2017-01-11 发布于重庆
  • 举报
中断程序的解释

关于V2.0版本 一 在main函数中的定义 int main(void) { DisableInterrupt; //关闭CPU总中断 RCC_Configuration(); GPIO_Configuration(); EXTI_Configuration(); NVIC_Configuration(); EnableInterrupt; //打开总中断 while(1) { } } 注意以下问题: (1) 头文件部分 写的是#include main.h 在main.h中定义了 #ifndef __MAIN_H #define __MAIN_H #include myfun.h #endif 以上关于_MAIN_H的宏定义,是为了防止多个重名头文件存在。 在”myfun.h”对应myfun.c文件 里面定义了 #include stm32f10x_conf.h #include cortexm3_macro.h #include stm32f10x_lib.h #define LED1_ON GPIO_ResetBits(GPIOD, GPIO_Pin_2) ///控制的是PD2 #define LED1_OFF GPIO_SetBits(GPIOD, GPIO_Pin_2) #define DisableInterrupt __SETPRIMASK() #define EnableInterrupt __RESETPRIMASK() void DelayMs(vu32 nms); void DelayUs(vu32 nus); #endif 其中,LED1_ON和LED1_OFF 对应于一个GPIO的位操作。对应书上P101页的函数定义。 两个延迟函数,放在了myfun.c。很好理解。延迟函数是自己做的。然而在myfun.h中还是做了很多定义。GPIO用到的头文件。 (2) 关于时钟的初始化配置 void RCC_Configuration(void); 内容 void RCC_Configuration(void) { ErrorStatus HSEStartUpStatus; ///HSE起振状态0表示出错,其他的表示成果SUCCESS RCC_DeInit(); RCC_HSEConfig(RCC_HSE_ON); HSEStartUpStatus = RCC_WaitForHSEStartUp(); ///若选择HSE做系统时钟:先调用RCC_HSEConfig()使能HSE,后调用//RCC_WaitForHSEStartUp()函数等待HSE起震,最后调用RCC_GetFlagStatus()函数获取HSE //晶振状态 if(HSEStartUpStatus == SUCCESS) { FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//使能Flash半周期访问 FLASH_SetLatency(FLASH_Latency_2);//设置FLASH存储器延时周期数 RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置AHB时钟 RCC_PCLK2Config(RCC_HCLK_Div1);//设置APB2时钟 RCC_PCLK1Config(RCC_HCLK_Div2);//设置APB1时钟 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //设置锁相环的倍频 RCC_PLLCmd(ENABLE); //使能锁相环 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)//等待PLL就绪 { } RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//设置系统时钟为PLL时钟 while(RCC_GetSYSCLKSource() != 0x08)//确认系统时钟是否为PLL时钟 { } } } 其中,ErrorStatus 在stm32f10x_type.h中定义 typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus; RCC_DeInit(); //在stm32f10x_rcc.c中定义。表示复位RCC时钟到默认的配置。 void RCC

文档评论(0)

1亿VIP精品文档

相关文档