中断系统 编程步骤

上传人:夏** 文档编号:558046029 上传时间:2023-04-09 格式:DOCX 页数:7 大小:24.27KB
返回 下载 相关 举报
中断系统 编程步骤_第1页
第1页 / 共7页
中断系统 编程步骤_第2页
第2页 / 共7页
中断系统 编程步骤_第3页
第3页 / 共7页
中断系统 编程步骤_第4页
第4页 / 共7页
中断系统 编程步骤_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《中断系统 编程步骤》由会员分享,可在线阅读,更多相关《中断系统 编程步骤(7页珍藏版)》请在金锄头文库上搜索。

1、中断系统编程步骤:以“按K1(按键K1接到PB7管脚)产生一次EXTI中断,L3 (L3接到PC13管脚)将闪烁 次。”为例。第一部分配置中断系统步骤一加入以下头文件:#include stm32fl0x_lib.h若使用RCC_Configuration();使能外设对应的时钟,还必须加入以下头文件。 若使用具体的使能外设时钟命令(例如,RCC_APB2PeriphClockCmd()等), 则不需要加入以下头文件。#include HelloRobot.h/ (包含 RCC_Configuration、GPIO_Configuration、 USART_Configuration、NVIC

2、_Configuration 这 3 个函数的 HelloRobot.h 文件) 步骤二GPIO配置: 定义 用于初始化GPIOx端口参数 的结构体变量GPIO_InitTypeDef GPIO_InitStructure;使能GPIO端口外设对应的时钟(或RCC_Configuration();) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPI0B,ENABLE); 定义GPIOx端口管脚、响应速度、工作模式,即定义GPIO端口的初始化参数 (通过为结构体变量GPIO_InitStructure的成员赋值实现):GPIO_InitStructure.GPI

3、O_Pin = GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIOB, & GPIO_InitStructure); (调用函数GPIO_Init()来)初始化GPIOx端口,(完成对端口中的寄存器的设置。)GPIO_Init(GPIOB , & GPIO_InitStructure);以上的步骤二,可以打包在一个函数GPIO_Configuration()中。在main函数中, 仅仅调用该函数即可。使得ma

4、in程序简介、明了。步骤三EXTI的配置: 定义用于初始化EXTI(外部中断/事件)参数的结构体变量:EXTI_InitTypeDef EXTI_InitStructure; 使能EXTI外设对应的时钟-注意:当使用EXTI外设时,使能的是AFIO时 钟,而不是EXTI外设时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);注意:使能AFIO时钟 时候,最好与使能GPIO端口外设对应的时钟一起使能(用位或运算符)。否则,常会无法进入EXTIx的中断处理程序。建议 在main ()函数中,变量定义以后,把所有用到的外设的时钟 一起使能。可以

5、把所有外设的时钟使能,打包在一个函数RCC_Configuration() 中(注意:它不是HelloRobot.h中的RCC_Configuration(),而是我们自己定义 的,用于存放 所有外设的时钟使能函数)。选择GPIO管脚,接EXTI线路-EXTI编程特有的语句GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource7);以下是定义EXTI的初始化参数 选择 EXTI 线路:(EXTI_LineOEXTI_Linel9) EXTI_InitStructure.EXTI_Line=EXTI_Line7; 选择EXTI的模式:(中

6、断请求模式 或 事件请求模式)EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; 选择EXTI的触发方式:(上升沿触发、下升沿触发 或 上升沿和下升沿触发)EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; 选中的EXTI线路(在中选中的EXTI线路)的中断使能或中断失能:ENABLE 或 DISABLEEXTI_InitStructure.EXTI_LineCmd = ENABLE;注:类似于:MCS-51单片机的各中断源的中断允许位(作为分控制位)置1: 例如外部中断0的中断允许

7、控制位EXO=1,定时器/计数器T0的中断允许控制位 ETO=1.(根据EXTI_InitStruct中指定的参数,调用函数EXTI_Init()来)初始化外设 EXTI,(完成对外设EXTI寄存器的设置。)EXTI_Init(&EXTI_InitStructure);注意:(i) EXTIx(外部中断/事件)源类似于MCS-51单片机的INTO、INT1外部中断 源。(ii) 当中断不是来自EXTIx,则程序中,就不需要写入与EXTI有关的程序。以上的步骤三,可以打包在一个函数EXTI_Configuration()中。在main函数中, 仅仅调用该函数即可。使得main程序简单、明了。步骤

8、四NVIC配置:定义用于初始化嵌套中断向量控制器(NVIC)参数 的结构体变量:NVIC_InitTypeDef NVIC_InitStructure; 配直优先级组:(第0组第4组,即NVIC_PriorityGroup_0 NVIC_PriorityGroup_4) -NVIC编程特有的语句_PriorityGroupConfig(NVIC_PriorityGroup_l);以下是定义NVIC的初始化参数 选择中断通道(中断IRQ通道)NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel; 设置 选中的中断通道 的抢占式优先级NVI

9、C_InitStructure.NVIC_IRQChannelPreemptionPriority=0;/0 级抢占优先级 设置 选中的中断通道 的子优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;/0 级次优先级 选中的中断通道的中断使能NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;注:类似于:MCS-51单片机的总的中断使能信号EA=1.根据NVIC_InitStructure中指定的参数,调用函数NVIC_Init ()来)初始化NVIC 嵌套向量中断控制器,(完成对NVIC寄存器的设

10、置。)NVIC_Init (&N VIC_InitStructure);以上的步骤四,可以打包在一个函数NVIC_Configuration()中。在main函数中, 仅仅调用该函数即可。使得main程序简单、明了。第二部分编写while(1)死循环和中断服务函数步骤五 编写while(1)死循环程序: 例一while (1);例二while (1) 步骤六编写中断服务函数:各种中断服务函数的实现:在固件函数库stm32f10x_it.c文件中。打开librarysrc目录下的stm32f10x_it.c这个文件,可以看至U*_IRQHandler函 数的实现,虽然说是实现,但是几乎都是空的。

11、这些函数就是要开发者填写的中 断服务(处理)函数,如果你用到了哪个中断来做相应的处理,你就要填写相应 的中断服务(处理)函数。(实质上,中断服务子程序的函数名:它是严格按照stm32f10x_vector.s文件中 的中断向量表中,对应的向量名来命名,两者必须一致。)VectorsDCDinitial spTop;Top of StackDCDReset_Hhndlei:Reset HandlerDCDNMI_Haiidler:NMI HandlerD R R R3DRDCDCDCDCTXDC:RCC;EXn Line 0;EXn Line 1:.EXn Line 2;EXn Lme 3;EX

12、n Line 4RCC_IRQHaiidlerE?OIO_IRQHandleiEXm_IRQH3ndlerEXTLZ.IRQHaiMllerEXTI3_IRQHandlerE?OI4_IRQHandlei例如,当我们用 PE4 口线作为外部中断源时,所对应的中断处理函数是EXTI4_IRQHandler() 或当我们用PB7 口线作为外部中断源时,所对应的中断处理函数是(i) 用 for(i=0;ivl000000;i+);语句 实现延时:void EXTI9_5_IRQHandler(void)u32 i;if(EXTI_GetITStatus(EXTI_Line7)=SET)GPIO_Se

13、tBits(GPIOC,GPIO_Pin_13);for(i=0;iv1000000;i+);系统时钟 Systemclock 为 8MHz GPIO_ResetBits(GPIOC,GPIO_Pin_13);EXTI_ClearITPendingBit(EXTI_Line7);(ii) 用Delay(1000000);语句 实现延时:void EXTI9_5_IRQHandler(void)if(EXTI_GetITStatus(EXTI_Line7) = SET) /* Toggle PC13 pin */GPIO_SetBits(GPIOC, GPI0_Pin_13);Delay(100

14、0000);系统时钟 Systemclock 为 8MHzGPIO_ResetBits(GPIOC, GPIO_Pin_13);/* Clear the EXTI line 7 pending bit */EXTI_ClearITPendingBit(EXTI_Line7); void Delay(vu32 n1) while(n1-); EXTI_ClearITPendingBit(EXTI_Line7);必须放在 if()语句的最后。否则,若放在Delay(1000000);函数前,则会导致每次按下K1(按键K1接到PB7 管脚)时,灯经常会闪烁2次。-可以理解为,若中断处理程序中,一上来

15、就清除 中断请求标志位,会因按键抖动,导致外部又产生一个下降沿,向CM3发出中 断请求。虽然,当前的中断处理程序还没有完成,但新的中断请求,会保存在挂 起请求寄存器中(这是由stm32单片机的EXTI控制器内部结构所决定)。直到CM3 响应为止。即执行2次中断处理程序,闪烁2次。若清除中断请求标志位放在中断处理程序最后,因中断处理程序中的 Delay(1000000);起到按键消抖动的功能,基本不会因按键抖动,导致外部又产生 一个中断请求。 若灯还会经常闪烁2次,这说明延时时间太短。按键刚按键,延时就已经到了, 中断标志位就已经清除。后面若按键有抖动,会造成再次发起中断请求,造成灯 又一次闪烁。处理方法:应加大延时时间。 若系统时钟Systemclock为72MHz,则延时时间应该在后面再加个0 for(i=0;iv10000000;i+);系统时钟 Systemclock 为 72MHz或Delay(10000000);系统时钟 Systemclock 为 72MHz比较:(1)用GPIO编程读

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号