首页 STM32中断程序

STM32中断程序

举报
开通vip

STM32中断程序STM32中断程序 #include "stm32f10x.h" #include "stm32f10x_exti.h" //#include "misc.h" void Delay(__IO uint32_t nCount) { for(; nCount != 0; nCount--); } void RCC_Configuration(void) { ErrorStatus HSEStartUpStatus; //使能外部晶振 RCC_HSEConfig(RCC_HSE_ON); //...

STM32中断程序
STM32中断程序 #include "stm32f10x.h" #include "stm32f10x_exti.h" //#include "misc.h" void Delay(__IO uint32_t nCount) { for(; nCount != 0; nCount--); } void RCC_Configuration(void) { ErrorStatus HSEStartUpStatus; //使能外部晶振 RCC_HSEConfig(RCC_HSE_ON); //等待外部晶振稳定 HSEStartUpStatus = RCC_WaitForHSEStartUp(); //如果外部晶振启动成功,则进行下一步操作 if(HSEStartUpStatus==SUCCESS) { //设置HCLK(AHB时钟)=SYSCLK RCC_HCLKConfig(RCC_SYSCLK_Div1); //PCLK1(APB1) = HCLK/2 RCC_PCLK1Config(RCC_HCLK_Div2); //PCLK2(APB2) = HCLK RCC_PCLK2Config(RCC_HCLK_Div1); RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_4); //启动PLL RCC_PLLCmd(ENABLE); //等待PLL稳定 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //系统时钟SYSCLK来自PLL输出 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //切换时钟后等待系统时钟稳定 while(RCC_GetSYSCLKSource()!=0x08); } RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE |RCC_APB2Periph_AFIO , ENABLE); //给GPIOA和重映射提供时钟,注意:一定要设置 RCC_APB2Periph_AFIO } void GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; /************GPIO输入设置*****************/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING ; GPIO_Init(GPIOE, &GPIO_InitStructure); /************GPIO输出设置*****************/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; GPIO_Init(GPIOB, &GPIO_InitStructure); } /***中断引脚设置***/ void EXTI_Configuration(void) { EXTI_InitTypeDef EXTI_InitStructure; /* Configure EXTI Line3 to generate an interrupt on falling edge */ GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource2); //将PE2连接到外部 中断通道3 EXTI_ClearITPendingBit(EXTI_Line2); EXTI_InitStructure.EXTI_Line = EXTI_Line2; //外部中断通道3 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; //NVIC声明外设 /* 设置优先级分组:先占优先级和从优先级 */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//先占优先级 1 为从优先级 3位 /* Enable the EXTI2 Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; //开外部中断线 2 中断EXTI2指GPIO(A~G)2 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //从优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } int main(void) { RCC_Configuration(); GPIO_Config(); NVIC_Configuration(); EXTI_Configuration(); while (1) { GPIO_SetBits(GPIOB , GPIO_Pin_9); GPIO_SetBits(GPIOB , GPIO_Pin_8); } } void EXTI2_IRQHandler(void) { if ( EXTI_GetITStatus(EXTI_Line2) != RESET ) { GPIO_ResetBits(GPIOB , GPIO_Pin_9); GPIO_ResetBits(GPIOB , GPIO_Pin_8); Delay(0xfffff); Delay(0xfffff); EXTI_ClearITPendingBit(EXTI_Line2); EXTI_ClearFlag(EXTI_Line2); //清除中断标志 } }
本文档为【STM32中断程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_079973
暂无简介~
格式:doc
大小:18KB
软件:Word
页数:5
分类:生活休闲
上传时间:2017-09-18
浏览量:32