您的位置 首页 电子

STM32学习手记③-EXTI中止

用系统滴答定时器的精确定时函数,新手尽量少用,容易出错,还是用简单的延时操作好了。抢占式优先级别与响应式优先级概念不懂,因为没

用体系滴答守时器的准确守时函数,新手尽量少用,简略犯错,仍是用简略的延时操作好了。

抢占式优先等级与呼应式优先级概念不明白,由于没看什么材料书就直接上程序了,今后有时刻要看看相关方面的书。

STM的外部中止与51的不同,他的外部中止不是固定的IO口,例如,STM32有80个IO口,他每个IO口都能够映像到16个个外部中止,即PA3能够映像成外部中止1,也能够映像成外部中止2。

中止敞开进程:
1、在RCC里即将运用的IO口时钟翻开(为什么一定要设置RCC_APB2Periph_AFIO,不明白,待今后了解)
2、在GPIO里将该IO口映像到相应的外部中止
3、在NVIC里将该中止通道翻开

中止运用留意事项:
1、先运用if句子判别是产生哪个中止
2、履行中止程序
3、铲除中止标志位,中止产生后有必要铲除中止位,不然会呈现死循环不断产生这个中止。

要花时刻看材料,了解CortexM3的中止机制(比方EXTI和USART中止有什么区别)。

/***********************************************************例程称号:外部中止实验硬件衔接:指示灯衔接  PE0按钮衔接    PA3 功用描绘:本例程完成外部中止的输入实验,使用杜邦线把PA3接到开发板的GND,指示灯闪耀一下**/#include "stm32f10x_lib.h"/*********************************************************** 函数称号    :void RCC_Configuration()* 功用描绘    : 复位和时钟操控 装备* 参数        :  无* 返回值      :  无* 大局变量    :  无* 大局静态变量:  无* 部分静态变量:  无****************************************************************/void RCC_Configuration(){ErrorStatus HSEStartUpStatus;     //界说外部高速晶振发动状况枚举变量RCC_DeInit();     //复位RCC外部寄存器到默认值RCC_HSEConfig(RCC_HSE_ON);     //翻开外部高速晶振HSEStartUpStatus=RCC_WaitForHSEStartUp();     //等候外部高速时钟准备好if(HSEStartUpStatus==SUCCESS){ //外部高速时钟现已准备好FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //敞开FLASH预读缓冲功用,加快FLASH的读取。一切程序中有必要的用法,方位:RCC初始化子函数里边,时钟起振之后FLASH_SetLatency(FLASH_Latency_2); //FLASH时序推迟几个周期,等候总线同步操作。引荐依照单片机体系运转频率,0—24MHz时,取Latency=0;24—48MHz时,取Latency=1;48~72MHz时,取Latency=2。RCC_HCLKConfig(RCC_SYSCLK_Div1);       //装备AHB(HCLK)==体系时钟/1RCC_PCLK2Config(RCC_HCLK_Div1); //装备APB2(高速)(PCLK2)==体系时钟/1 RCC_PCLK1Config(RCC_HCLK_Div2); //装备APB1(低速)(PCLK1)==体系时钟/2//注:AHB首要担任外部存储器时钟。APB2担任AD,I/O,高档TIM,串口1。APB1担任DA,USB,SPI,I2C,CAN,串口2345,一般TIM。RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //装备PLL时钟==(外部高速晶体时钟/1)* 9 ==72MHzRCC_PLLCmd(ENABLE); //使能PLL时钟while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET); //等候PLL时钟安排妥当RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //装备体系时钟==PLL时钟while(RCC_GetSYSCLKSource()!=0x08); //等候体系时钟源的发动}//------------------------以下为敞开外设时钟的操作-----------------////   RCC_AHBPeriphClockCmd (ABP2设备1 | ABP2设备2 , ENABLE); //发动AHB设备//   RCC_APB2PeriphClockCmd(ABP2设备1 | ABP2设备2 , ENABLE); //发动ABP2设备//   RCC_APB1PeriphClockCmd(ABP2设备1 | ABP2设备2 , ENABLE); //发动ABP1设备RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOE , ENABLE);   //给GPIOA、GPIOE和重映射供给时钟,留意:一定要设置RCC_APB2Periph_AFIO} /************************************************************* 函数称号    : NVIC_Configuration(void)* 功用描绘    : NVIC(嵌套中止操控器)装备* 参数        :  无* 返回值      :  无* 大局变量    :  无* 大局静态变量:  无* 部分静态变量:  无******************************************************************/ void NVIC_Configuration( ){NVIC_InitTypeDef NVIC_InitStructure;                           //界说一个中止结构体//NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);        //设置中止向量表的开始地址为0x08000000//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);    //抢占式优先等级设置为无抢占优先级//注:总共16个优先级,分为抢占式和呼应式。两种优先级所占的数量由此代码确认,NVIC_PriorityGroup_x能够是0、1、2、3、4,//别离代表抢占优先级有1、2、4、8、16个和呼应优先级有16、8、4、2、1个。规则两种优先级的数量后,一切的中止等级有必要在其中挑选,//抢占等级高的会打断其他中止优先履行,而呼应等级高的会在其他中止履行完优先履行。NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQChannel;  //指定中止源NVIC_InitStructure.NVIC_IRQChannelSubPriority = 15;     //指定呼应优先等级1NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;     //翻开外部中止通道3NVIC_Init(&NVIC_InitStructure);   //初始化} 

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/dianzi/319396.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部