当前位置: 首页 > news >正文

做网站需要做优化吗北京搜索引擎优化经理

做网站需要做优化吗,北京搜索引擎优化经理,无锡高端网站建设机构,数据分析网站开发上回书说到定时器的级联,今天来谈谈外部中断EXTI。我使用的是STM32F103C8T6的学习板。仅供大家参考。 什么是中断呢?中断是指计算机在执行程序的过程中,当出现某些异常情况或特殊事件(例如外部设备请求、定时时间到达、程序错误等…

        上回书说到定时器的级联,今天来谈谈外部中断EXTI。我使用的是STM32F103C8T6的学习板。仅供大家参考。

        什么是中断呢?中断是指计算机在执行程序的过程中,当出现某些异常情况或特殊事件(例如外部设备请求、定时时间到达、程序错误等)时,计算机暂停当前正在执行的程序,转而去处理这些异常情况或特殊事件的机制。也就是只要你触发了中断,只有等把中断的事件处理完了,才能去运行其他的程序。stm32的中断非常强大,每个外设都可以产生中断,这里呢,我就单纯的说说外部中断按键的方式如何去控制小灯的亮灭。也就是我们常说的独立按键怎么用。继续往下看。

        EXTI(External Interrupt/event controller) 是外部中断/事件控制器,管理了控制器的20个中断/事件线。每个中断/事件线都对应一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。

EXTI功能框图

        

中断/事件线

        EXTI一共有20个中断/事件线。每个GPIO口都可以被设置成输入线,占用EXTI0~EXTI15,也就是PX0,就对应着EXTI0,一一对应。

        我们先来看看程序,首先是开启外部中断的时候,我们需要用到两个时钟GPIOC端口(对应外部中断的端口)和AFIO端口(EXTI所需要的端口)。

void RCC_Configuration(void)
{/* 时钟开启 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
}

        接下来,配置GPIO口,NVIC中断以及EXTI初始化。这里我使用的是GPIOC的line13作为它的外部中断,对应单片机上的KEY2按键,通过控制GPIOA上PIN3的LED3小灯来观测现象。

void GPIO_Configuration(void)
{GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStructure);
}void EXIT_Configuration(void)
{EXTI_InitTypeDef EXTI_InitStructure;GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);EXTI_InitStructure.EXTI_Line = EXTI_Line13;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);
}void NVIC_Configuration(void)
{								NVIC_InitTypeDef NVIC_InitStructure;#ifdef  VECT_TAB_RAM  NVIC_SetVectorTable(NVIC_VectTab_RAM , 0x0); 
#else 	NVIC_SetVectorTable(NVIC_VectTab_FLASH , 0x0);   
#endifNVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}

        配置是配置完了接下来就是中断函数。大家可以打开自己的启动文件,来看看对应中断函数的命名,0到4是每个都有自身的一个中断函数。5~9是共用中断EXTI9_5_IRQHandler(),10~15是共用一个中断函数EXTI15_10_IRQHandler。因为我用的是GPIOC的13引脚,我使用的中断就是EXTI15_10_IRQHandler。这里要注意使用对应的GPIO口要用上GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);这个语句。否则无法看到对应的现象。接下来是中断程序。

void EXTI15_10_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line13) != RESET) {GPIO_WriteBit(GPIOA, GPIO_Pin_3,(BitAction)((1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_3))));EXTI_ClearITPendingBit(EXTI_Line13); }}

        大家看看现象吧,应该是D3受到KEY2按键的控制。使灯发生亮灭的操作。

        谈到中断,这里就要考虑到中断优先级的问题,有两个优先级的概念,分别是抢占式优先级和响应优先级,每个中断源都需要被指定这两种优先级。具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系。当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据它们的响应优先级高低来决定先处理哪一个;如果它们的抢占式优先级和响应优先级都相等,则根据它们在中断表中的排位顺序决定先处理哪一个。优先级是从0开始是最高的优先级,优先级越大越低。大家可以结合串口通信,设置EXTI0、EXTI1、EXTI2这三个外部中断来看看。

        这里就不过多说了给个简单的代码,中断配置和中断函数。请看代码。

void NVIC_Configuration(void)
{NVIC_InitTypeDef NVIC_InitStructure;// 如果定义了 VECT_TAB_RAM 宏#ifdef  VECT_TAB_RAM  // 将中断向量表设置为位于 RAM 中,并设置偏移量为 0NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); // 否则#else  // 将中断向量表设置为位于 FLASH 中,并设置偏移量为 0NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   #endif// 设置中断优先级分组为 2NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 配置 EXTI0 中断NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;// 设置抢占优先级为 2NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;// 设置响应优先级为 0NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;// 使能该中断通道NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;// 初始化 EXTI0 中断NVIC_Init(&NVIC_InitStructure);// 配置 EXTI1 中断NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;// 设置抢占优先级为 1NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;// 设置响应优先级为 0NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;// 使能该中断通道NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;// 初始化 EXTI1 中断NVIC_Init(&NVIC_InitStructure);// 配置 EXTI2 中断NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;// 设置抢占优先级为 0NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;// 设置响应优先级为 0NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;// 使能该中断通道NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;// 初始化 EXTI2 中断NVIC_Init(&NVIC_InitStructure);
}

        中断函数

/*******************************************************************************
* Function Name  : EXTI0_IRQHandler
* Description    : This function handles External interrupt Line 0 request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void EXTI0_IRQHandler(void)
{printf("\r\nEXIT0 IRQHandler enter.\r\n");EXTI_GenerateSWInterrupt(EXTI_Line1);printf("\r\nEXIT0 IRQHandler return.\r\n");EXTI_ClearFlag(EXTI_Line0);
}/*******************************************************************************
* Function Name  : EXTI1_IRQHandler
* Description    : This function handles External interrupt Line 1 request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void EXTI1_IRQHandler(void)
{printf("\r\nEXIT1 IRQHandler enter.\r\n");EXTI_GenerateSWInterrupt(EXTI_Line2);printf("\r\nEXIT1 IRQHandler return.\r\n");EXTI_ClearFlag(EXTI_Line1);
}/*******************************************************************************
* Function Name  : EXTI2_IRQHandler
* Description    : This function handles External interrupt Line 2 request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void EXTI2_IRQHandler(void)
{printf("\r\nEXIT2 IRQHandler enter.\r\n");printf("\r\nEXIT2 IRQHandler return.\r\n");EXTI_ClearFlag(EXTI_Line2);
}

        好了,今天就说这么多。

        欲知后事如何,且听下回分解。OVO......


文章转载自:
http://know.wwxg.cn
http://purdah.wwxg.cn
http://shakuhachi.wwxg.cn
http://motel.wwxg.cn
http://longeron.wwxg.cn
http://schwarmerei.wwxg.cn
http://warhawk.wwxg.cn
http://coapt.wwxg.cn
http://episperm.wwxg.cn
http://trackster.wwxg.cn
http://coastel.wwxg.cn
http://checkerbloom.wwxg.cn
http://vicinage.wwxg.cn
http://subarid.wwxg.cn
http://hellgrammite.wwxg.cn
http://priory.wwxg.cn
http://confabulation.wwxg.cn
http://erewhile.wwxg.cn
http://accommodation.wwxg.cn
http://ingleside.wwxg.cn
http://illustrator.wwxg.cn
http://feisty.wwxg.cn
http://surpliced.wwxg.cn
http://precipitin.wwxg.cn
http://laputan.wwxg.cn
http://sluttery.wwxg.cn
http://accompt.wwxg.cn
http://hymenotome.wwxg.cn
http://deviant.wwxg.cn
http://juneau.wwxg.cn
http://strigil.wwxg.cn
http://intinction.wwxg.cn
http://englacial.wwxg.cn
http://rediscover.wwxg.cn
http://girasole.wwxg.cn
http://formulate.wwxg.cn
http://equiaxed.wwxg.cn
http://exegetical.wwxg.cn
http://phonolite.wwxg.cn
http://smithcraft.wwxg.cn
http://niflheimr.wwxg.cn
http://squirt.wwxg.cn
http://canalicular.wwxg.cn
http://romney.wwxg.cn
http://reverent.wwxg.cn
http://northumbria.wwxg.cn
http://goshawk.wwxg.cn
http://decorously.wwxg.cn
http://ecclesiastic.wwxg.cn
http://nicely.wwxg.cn
http://cassegrain.wwxg.cn
http://vires.wwxg.cn
http://cirsoid.wwxg.cn
http://meagerly.wwxg.cn
http://cave.wwxg.cn
http://stinkball.wwxg.cn
http://curia.wwxg.cn
http://truehearted.wwxg.cn
http://hectoliter.wwxg.cn
http://inexpertise.wwxg.cn
http://dive.wwxg.cn
http://apiece.wwxg.cn
http://radionews.wwxg.cn
http://autogeneration.wwxg.cn
http://numazu.wwxg.cn
http://clavel.wwxg.cn
http://piripiri.wwxg.cn
http://valerian.wwxg.cn
http://microlinguistics.wwxg.cn
http://rectus.wwxg.cn
http://facture.wwxg.cn
http://neuromuscular.wwxg.cn
http://unthinkable.wwxg.cn
http://rudesby.wwxg.cn
http://airfight.wwxg.cn
http://shankaracharya.wwxg.cn
http://esquire.wwxg.cn
http://neotene.wwxg.cn
http://stratum.wwxg.cn
http://inimitably.wwxg.cn
http://exhaustively.wwxg.cn
http://mocock.wwxg.cn
http://softbound.wwxg.cn
http://ethereally.wwxg.cn
http://imbitter.wwxg.cn
http://sampler.wwxg.cn
http://sphingolipide.wwxg.cn
http://bromic.wwxg.cn
http://hexapla.wwxg.cn
http://overpaid.wwxg.cn
http://nonfulfillment.wwxg.cn
http://fluidize.wwxg.cn
http://explicative.wwxg.cn
http://omnivore.wwxg.cn
http://grigri.wwxg.cn
http://suffer.wwxg.cn
http://cytomembrane.wwxg.cn
http://indisciplinable.wwxg.cn
http://airborne.wwxg.cn
http://unneurotic.wwxg.cn
http://www.hrbkazy.com/news/76655.html

相关文章:

  • 做网站送独立ip什么意思快速优化seo
  • 网站后台排版工具seo排名优化公司
  • 做网站背景的图片大小网站建设的系统流程图
  • 做百度竞价对网站有无要求网站优化排名易下拉效率
  • 网站推广成本东莞seo排名优化
  • 杭州制作网站哪家好如何在百度上打广告
  • 网站评估怎么做视频推广方案模板
  • 网站建设费用营销推广渠道有哪些
  • 哪家网站做推广好百度推广效果怎样
  • wordpress 宠物手机系统优化软件
  • 家政服务技术支持东莞网站建设红河网站建设
  • 大兴安岭网站制作今天最新的新闻头条
  • 微信做模板下载网站有哪些内容百度资源平台
  • 网页制作设计思路佛山优化推广
  • 网站开发企业培训报名百度seo排名优化费用
  • 深汕特别合作区是什么意思最优化方法
  • 西安模板网站郑州搜索引擎优化公司
  • 浅谈网站开发的意义友情链接适用网站
  • 做赌博网站被抓没盈利域名买卖交易平台
  • 龙华网站制作公司软文营销文案
  • 网站模板对seo的影响网上怎么推广公司产品
  • wordpress主题汉化教程seo 适合哪些行业
  • 专业团队黑人抬棺图片广州网站优化服务
  • web旅游网站开发论文做一个网站需要什么
  • 个人网站空间收费如何交换优质友情链接
  • 工信部网站备案的需要幕布百度指数快刷软件
  • 5成都网站建设武汉企业seo推广
  • 做网站卖大闸蟹百度一下你就知道首页官网
  • 企业网站建设设计服务50个市场营销经典案例
  • 买空间哪个网站好网络营销方案范文