第8章STM32F10x的主要模块设计3外部中断课件_第1页
第8章STM32F10x的主要模块设计3外部中断课件_第2页
第8章STM32F10x的主要模块设计3外部中断课件_第3页
第8章STM32F10x的主要模块设计3外部中断课件_第4页
第8章STM32F10x的主要模块设计3外部中断课件_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

EmbeddedSystemDevelopment嵌入式系统与应用

EmbeddedSystemDevelopment嵌入式第8章STM32F10x的主要模块设计3外部中断8.3外部中断8.3.1GPIO键盘设计实验8.3.2外部中断EXTI设计第8章STM32F10x的主要模块设计3外部中断8.3外8.3.1GPIO键盘设计实验GPIO端口如何进行键盘设计?下面两种办法效果一样。一是采用上拉输入模式,按键在没按下的时候,默认为高电平。PE5–key1PE6–key2

二是直接采用浮空输入模式,在芯片外部接上拉电阻。按键实现LED灯反转。按键原理图8.3.1GPIO键盘设计实验GPIO端口如何进行键盘设1、按键实现LED灯反转main()intmain(void){/*configtheled*/LED_GPIO_Config();LED1(ON);

/*configkey*/Key_GPIO_Config();while(1){if(Key_Scan(GPIOE,GPIO_Pin_5)==KEY_ON){/*LED1灯反转*/

GPIO_WriteBit(GPIOC,GPIO_Pin_3,BitAction(1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_3)));}}}读取PC3的当前输出电平当前状态反相后写入到PC31、按键实现LED灯反转main()intmain(voi按键实现LED灯反转把前面写的Led灯led.c和led.h复制到本工程文件夹,编写main函数:1、先调用了led.c中的LED_GPIO_Config(),配置LED用到的I/O。2、调用LED1(ON),把LED灯1点亮。3、调用Key_GPIO_Config(),配置按键用到的I/O口。4、调用Key_Scan()按键检测函数,监测到按键时,调用GPIO_WriteBit()函数实现灯反转。BitAction枚举定义在stm32f10x_gpio.h第104行:typedefenum{Bit_RESET=0,Bit_SET}BitAction;按键实现LED灯反转把前面写的Led灯led.c和led.h2、bsp_key.h按键函数头文件主要声明Key_GPIO_Config()、Key_Scan()两个函数:#ifndef__KEY_H//条件编译#define__KEY_H#include"stm32f10x.h"#defineKEY_ON 0//按键按下标志#defineKEY_OFF 1//无按键标志voidKey_GPIO_Config(void);uint8_tKey_Scan(GPIO_TypeDef*GPIOx,u16GPIO_Pin);#endif在bsp_key.C文件中实现上两个函数。2、bsp_key.h按键函数头文件主要声明Key_GPIO3、Key_GPIO_Config()函数与LED的GPIO初始化函数LED_GPIO_Config()类似。#include"bsp_key.h"voidKey_GPIO_Config(void){GPIO_InitTypeDefGPIO_InitStructure;/*开启按键端口GPIOE(PE5)的时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOE,&GPIO_InitStructure);}可用符号|同时配置多个:GPIO_Pin_5|GPIO_Pin_6;3、Key_GPIO_Config()函数与LED的GPIO4、Key_Scan()按键检测函数/*输入:GPIOx、GPIO_Pin:待读取的端口、引脚,**输出:KEY_OFF(没按下按键)、KEY_ON(按下按键)*/u8Key_Scan(GPIO_TypeDef*GPIOx,u16GPIO_Pin){/*检测是否有按键按下*/if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY_ON){Delay(10000);//延时消抖

if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY_ON)

{while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY_ON);returnKEY_ON;}//等待按键释放elsereturnKEY_OFF;elsereturnKEY_OFF;}}4、Key_Scan()按键检测函数/*输入:GPIOx、Key_Scan()按键检测函数库函数GPIO_ReadInputDataBit(端口号,引脚号);返回引脚的数据,0为低电平即KEY_ON,可能有按键按下,调用延时函数消抖;否则返回1为高电平即KEY_OFF,表示按键没有被按下。延时之后再次读取该引脚数据,若依然为低电平,表明确实有按键被按下了;否则返回KEY_OFF,表示没按键。while循环调用GPIO_ReadInputDataBit(),等待按键释放,条件变为假退出循环,返回表示按键被按下的标志KEY_ON。同理,通过输入不同的实参,来检测其它按键的引脚。这就是库的魅力!Key_Scan()按键检测函数库函数GPIO_ReadIn作业1、进一步熟悉GPIO,掌握GPIO设计。2、掌握GPIO键盘实验,实验报告。作业1、进一步熟悉GPIO,掌握GPIO设计。8.3.2STM32中断向量表上个实验中while(1){…}程序中始终轮询检测是否有按键按下,浪费CPU时间、能耗。可采用中断处理方式,当按键按下时触发中断再检测按键。STM32的所有GPIO都可以用作外部中断源,可把按键轮询检测改为由中断来处理,大大提高软件执行的效率。向量中断控制器NVIC属于Cortex内核的器件,编号为1-15的对应系统异常,大于等于16的则全是外部中断。STM32中断向量表,优先级从-3至6(即编号1-15)为系统异常,优先级为负的不能设置优先级,如复位Reset、不可屏蔽中断NMI、硬错误Hardfault。从优先级7开始(即类型编号16开始)的为外部中断,优先级自行设置。8.3.2STM32中断向量表上个实验中while(1){STM32中断向量表STM32中断向量表STM32中断向量表STM32中断向量表8.3.3STM32外部中断控制器EXTI向量中断控制器NVIC能配置16种外部中断EXTIx(0~15),超过16个中断事件时,必然有2个以上的中断事件使用相同的中断种类。注意:相同种类的中断不能嵌套。外部中断控制器EXTI配置管理外部事件输入GPIO引脚与EXTIx的连接方式:PAx~PGx端口引脚的事件连接同一个EXTIx,分时复用。GPIO事件可配置为下降沿、上升沿或边沿三种模式触发中断。EXTI一个应用:上个实验的按键再添加下降沿触发中断,用中断处理来检测按键。EXTI158.3.3STM32外部中断控制器EXTI向量中断控制器NSTM32外部中断控制器EXTI对于互联型芯片,外部中断控制器由20个产生事件中断请求的边沿检测器组成,其他芯片19个。STM32外部中断控制器EXTI对于互联型芯片,外部中断控制STM32外部中断控制器EXTI每个输入线都可配置输入类型(脉冲或挂起)和对应的触发方式(上升沿或下降沿或者双边沿都触发)。每个输入线都可被屏蔽。挂起寄存器保持着状态线的中断请求。另外四个EXTI线的连接方式如下:EXTI线16连接到PVD输出EXTI线17连接到RTC闹钟事件EXTI线18连接到USB唤醒事件EXTI线19连接到以太网唤醒事件(只适用于互联型产品)GPIO的x引脚配置为EXTIxSTM32外部中断控制器EXTI每个输入线都可配置输入类型(8.3.4EXTI寄存器库中定义stm32f10x.h库892行中EXTI寄存器结构定义:typedefstruct{vu32IMR;//中断屏蔽寄存器,配置20个中断线的屏蔽位vu32EMR;//事件屏蔽寄存器vu32RTSR;//上升沿触发选择寄存器vu32FTSR;//下降沿触发选择寄存器vu32SWIER;//设置软件中断寄存器的请求位vu32PR;//挂起寄存器}EXTI_TypeDef;8.3.4EXTI寄存器库中定义stm32f10x.h库8EXTI寄存器库中定义#definePERIPH_BASE((uint32_t)0x40000000)#defineAPB2PERIPH_BASE(PERIPH_BASE+0x10000)#defineEXTI_BASE(APB2PERIPH_BASE+0x0400)#defineEXTI((EXTI_TypeDef*)EXTI_BASE)EXTI为EXTI_TypeDef结构体型指针地址:0x40010400EXIT寄存器配置数据位宏定义在3269行开始:。/*BitdefinitionforEXTI_IMRregister**/#defineEXTI_IMR_MR0((uint32_t)0x00000001)/*!<InterruptMaskonline0*/#defineEXTI_IMR_MR1((uint32_t)0x00000002)……EXTI寄存器库中定义#definePERIPH_BASE8.3.5EXTI库函数stm32f10x_exti.cEXTI库函数在文件stm32f10x_exti.c中定义8.3.5EXTI库函数stm32f10x_exti.c8.3.6外部中断与NVIC的关系外部中断0与NVIC的对应8.3.6外部中断与NVIC的关系外部中断0与NVIC的对NVIC寄存器NVIC寄存器NVIC库函数NVIC库函数NVIC配置misc库中NVIC_Init()函数对NVIC初始化,用到NVIC_InitTypeDef结构体,其中四个成员:NVIC_IRQChannel参数来选择将要配置的中断向量;NVIC_IRQChannelCmd参数来进行使能(ENABLE)或关闭(DISABLE)该中断;NVIC_IRQChannelPreemptionPriority成员要配置中断向量的抢占优先级;NVIC_IRQChannelSubPriority需要配置中断向量的响应优先级。NVIC只可配置16种中断向量的优先级:编号越小,优先级别越高;抢占优先级:是指打断其它中断,会出现嵌套中断;响应优先级:先处理响应优先级高的中断;NVIC配置misc库中NVIC_Init()函数对NVI中断检测按键实验硬件连接:PE5–key1、PE6–key2,key1按下时,进入线中断处理函数,LED1状态取反。

配置工程环境:除使用GPIO和RCC片上外设;还要使用exti片上外设,stm32f10x_exti.c包含了支持exti配置和操作的函数;misc.c文件则包含了NVIC的配置函数;本实验中还会在stm32f10x_it.c中编写中断服务函数。中断检测按键实验硬件连接:PE5–key1、PE6–Main函数配置好LED用到的I/O后,调用LED1()点亮一盏LED灯;配置中断,等待中断发生。intmain(void){/*configtheled*/LED_GPIO_Config();LED1(ON);/*extilineconfig*/EXTI_PE5_Config();/*waitinterrupt*/while(1){}}Main函数配置好LED用到的I/O后,调用LED1()点亮配置外部中断exti.cEXTI_PE5_Config()函数,配置PE5为线中断口,并设置中断优先级。主要步骤:1.使能EXTIx线的时钟和第二功能AFIO时钟2.配置EXTIx线的中断优先级3.配置EXTI中断线I/O4.选定要配置为EXTI的I/O口线和I/O口的工作模式5.EXTI中断线工作模式配置配置外部中断exti.cEXTI_PE5_Config()函EXTI_PE5_Config()函数8.voidEXTI_PE5_Config(void)9.{10.GPIO_InitTypeDefGPIO_InitStructure;11.EXTI_InitTypeDefEXTI_InitStructure;13.

/*configtheextiline(PE5)clockandAFIOclock*/14.RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO,ENABLE);16./*configtheNVIC(PE5)*/17.NVIC_Configuration();//NVIC初始化配置19./*EXTIlinegpioconfig(PE5)*/20.GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;21.GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//上拉输入EXTI_PE5_Config()函数8.voidEXTEXTI_PE5_Config()函数_续22.GPIO_Init(GPIOE,&GPIO_InitStructure);24./*EXTIline(PE5)modeconfig*/25.GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource5);//PE5设置为EXTI输入线26.EXTI_InitStructure.EXTI_Line=EXTI_Line5;27.EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;28.EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿触发中断

29.EXTI_InitStructure.EXTI_LineCmd=ENABLE;30.EXTI_Init(&EXTI_InitStructure);31.}EXTI_PE5_Config()函数_续22.GPIO_GPIO端口的复用功能AFIOAFIO(alternate-functionI/O),GPIO除了用作普通的输入输出(主功能),还可以作为片上外设的复用输入输出,如串口,ADC,这些就是复用功能。GPIO还有重映射功能:重映射功能是指把原来属于A引脚的默认复用功能,转移到了B引脚进行使用(当然B引脚具有这个重映射功能)。当把GPIO用作EXTI外部中断或使用重映射功能的时候,必须开启AFIO时钟。代码的第14行,开启了AFIO的时钟。GPIO端口的复用功能AFIOAFIO(alternateNVIC初始化配置EXTI_PE5_Config()调用了NVIC_Configuration()函数来配置NVIC控制器。8.staticvoidNVIC_Configuration(void)9.{10.NVIC_InitTypeDefNVIC_InitStructure;12./*Configureonebitforpreemptionpriority*/13.NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);15./*配置P[A|B|C|D|E]5为中断源*/16.NVIC_InitStructure.NVIC_IRQChannel=EXTI9_5_IRQn;17.NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;18.NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;19.NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;20.NVIC_Init(&NVIC_InitStructure);//向寄存器写入参数21.}把NVIC中断优先级分组设置为第1组要配置的为EXTI第5~9线的中断向量抢占优先级和响应优先级,设为最高NVIC初始化配置EXTI_PE5_Config()调用了N编写中断服务函数PE5连接到内部的EXTI5,GPIO配置为上拉输入,工作在下降沿中断。在外围电路上我们将PE5接到了key1上。PE5始终为高,当按键按下时,下降沿跳变,EXTI5会捕捉到这一跳变,并产生相应的中断,中断服务程序在stm32f10x_it.c中实现,专门用来存放中断服务函数。中断服务函数的名字必须要跟启动文件startup_stm32f10x_hd.s中的中断向量表定义一致:DCDEXTI9_5_IRQHandler;EXTILine9..5EXTI9~EXTI5中断向量的服务函数名在stm32f10x_it.c中加入EXTI9_5_IRQHandler()函数;编写中断服务函数PE5连接到内部的EXTI5,GPIO配置EXTI9_5_IRQHandler()函数/*I/O线中断,中断线为PE5*/voidEXTI9_5_IRQHandler(void){if(EXTI_GetITStatus(EXTI_Line5)!=RESET)

//确保是否产生了EXTILine中断{//LED1取反GPIO_WriteBit(GPIOC,GPIO_Pin_3,(BitAction)((1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_3))));//清除中断标志位EXTI_ClearITPendingBit(EXTI_Line5);}}EXTI9_5_IRQHandler()函数/*I/O线中实验现象将野火STM32开发板供电(DC5V),插上JLINK,将编译好的程序下载到开发板,LED1亮,按下按键时LED1灭,再按下按键时LED1亮,如此循环。实验现象将野火STM32开发板供电(DC5V),插上JLIN8.2课下任务阅读P161-172阅读Cortex-M3权威指南,第7、8、9章阅读野火资料:P124-1411、NVIC嵌套向量中断控制器2、中断向量表3、EXTI外部中断8.2课下任务阅读P161-172EmbeddedSystemDevelopment嵌入式系统与应用

EmbeddedSystemDevelopment嵌入式第8章STM32F10x的主要模块设计3外部中断8.3外部中断8.3.1GPIO键盘设计实验8.3.2外部中断EXTI设计第8章STM32F10x的主要模块设计3外部中断8.3外8.3.1GPIO键盘设计实验GPIO端口如何进行键盘设计?下面两种办法效果一样。一是采用上拉输入模式,按键在没按下的时候,默认为高电平。PE5–key1PE6–key2

二是直接采用浮空输入模式,在芯片外部接上拉电阻。按键实现LED灯反转。按键原理图8.3.1GPIO键盘设计实验GPIO端口如何进行键盘设1、按键实现LED灯反转main()intmain(void){/*configtheled*/LED_GPIO_Config();LED1(ON);

/*configkey*/Key_GPIO_Config();while(1){if(Key_Scan(GPIOE,GPIO_Pin_5)==KEY_ON){/*LED1灯反转*/

GPIO_WriteBit(GPIOC,GPIO_Pin_3,BitAction(1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_3)));}}}读取PC3的当前输出电平当前状态反相后写入到PC31、按键实现LED灯反转main()intmain(voi按键实现LED灯反转把前面写的Led灯led.c和led.h复制到本工程文件夹,编写main函数:1、先调用了led.c中的LED_GPIO_Config(),配置LED用到的I/O。2、调用LED1(ON),把LED灯1点亮。3、调用Key_GPIO_Config(),配置按键用到的I/O口。4、调用Key_Scan()按键检测函数,监测到按键时,调用GPIO_WriteBit()函数实现灯反转。BitAction枚举定义在stm32f10x_gpio.h第104行:typedefenum{Bit_RESET=0,Bit_SET}BitAction;按键实现LED灯反转把前面写的Led灯led.c和led.h2、bsp_key.h按键函数头文件主要声明Key_GPIO_Config()、Key_Scan()两个函数:#ifndef__KEY_H//条件编译#define__KEY_H#include"stm32f10x.h"#defineKEY_ON 0//按键按下标志#defineKEY_OFF 1//无按键标志voidKey_GPIO_Config(void);uint8_tKey_Scan(GPIO_TypeDef*GPIOx,u16GPIO_Pin);#endif在bsp_key.C文件中实现上两个函数。2、bsp_key.h按键函数头文件主要声明Key_GPIO3、Key_GPIO_Config()函数与LED的GPIO初始化函数LED_GPIO_Config()类似。#include"bsp_key.h"voidKey_GPIO_Config(void){GPIO_InitTypeDefGPIO_InitStructure;/*开启按键端口GPIOE(PE5)的时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOE,&GPIO_InitStructure);}可用符号|同时配置多个:GPIO_Pin_5|GPIO_Pin_6;3、Key_GPIO_Config()函数与LED的GPIO4、Key_Scan()按键检测函数/*输入:GPIOx、GPIO_Pin:待读取的端口、引脚,**输出:KEY_OFF(没按下按键)、KEY_ON(按下按键)*/u8Key_Scan(GPIO_TypeDef*GPIOx,u16GPIO_Pin){/*检测是否有按键按下*/if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY_ON){Delay(10000);//延时消抖

if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY_ON)

{while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==KEY_ON);returnKEY_ON;}//等待按键释放elsereturnKEY_OFF;elsereturnKEY_OFF;}}4、Key_Scan()按键检测函数/*输入:GPIOx、Key_Scan()按键检测函数库函数GPIO_ReadInputDataBit(端口号,引脚号);返回引脚的数据,0为低电平即KEY_ON,可能有按键按下,调用延时函数消抖;否则返回1为高电平即KEY_OFF,表示按键没有被按下。延时之后再次读取该引脚数据,若依然为低电平,表明确实有按键被按下了;否则返回KEY_OFF,表示没按键。while循环调用GPIO_ReadInputDataBit(),等待按键释放,条件变为假退出循环,返回表示按键被按下的标志KEY_ON。同理,通过输入不同的实参,来检测其它按键的引脚。这就是库的魅力!Key_Scan()按键检测函数库函数GPIO_ReadIn作业1、进一步熟悉GPIO,掌握GPIO设计。2、掌握GPIO键盘实验,实验报告。作业1、进一步熟悉GPIO,掌握GPIO设计。8.3.2STM32中断向量表上个实验中while(1){…}程序中始终轮询检测是否有按键按下,浪费CPU时间、能耗。可采用中断处理方式,当按键按下时触发中断再检测按键。STM32的所有GPIO都可以用作外部中断源,可把按键轮询检测改为由中断来处理,大大提高软件执行的效率。向量中断控制器NVIC属于Cortex内核的器件,编号为1-15的对应系统异常,大于等于16的则全是外部中断。STM32中断向量表,优先级从-3至6(即编号1-15)为系统异常,优先级为负的不能设置优先级,如复位Reset、不可屏蔽中断NMI、硬错误Hardfault。从优先级7开始(即类型编号16开始)的为外部中断,优先级自行设置。8.3.2STM32中断向量表上个实验中while(1){STM32中断向量表STM32中断向量表STM32中断向量表STM32中断向量表8.3.3STM32外部中断控制器EXTI向量中断控制器NVIC能配置16种外部中断EXTIx(0~15),超过16个中断事件时,必然有2个以上的中断事件使用相同的中断种类。注意:相同种类的中断不能嵌套。外部中断控制器EXTI配置管理外部事件输入GPIO引脚与EXTIx的连接方式:PAx~PGx端口引脚的事件连接同一个EXTIx,分时复用。GPIO事件可配置为下降沿、上升沿或边沿三种模式触发中断。EXTI一个应用:上个实验的按键再添加下降沿触发中断,用中断处理来检测按键。EXTI158.3.3STM32外部中断控制器EXTI向量中断控制器NSTM32外部中断控制器EXTI对于互联型芯片,外部中断控制器由20个产生事件中断请求的边沿检测器组成,其他芯片19个。STM32外部中断控制器EXTI对于互联型芯片,外部中断控制STM32外部中断控制器EXTI每个输入线都可配置输入类型(脉冲或挂起)和对应的触发方式(上升沿或下降沿或者双边沿都触发)。每个输入线都可被屏蔽。挂起寄存器保持着状态线的中断请求。另外四个EXTI线的连接方式如下:EXTI线16连接到PVD输出EXTI线17连接到RTC闹钟事件EXTI线18连接到USB唤醒事件EXTI线19连接到以太网唤醒事件(只适用于互联型产品)GPIO的x引脚配置为EXTIxSTM32外部中断控制器EXTI每个输入线都可配置输入类型(8.3.4EXTI寄存器库中定义stm32f10x.h库892行中EXTI寄存器结构定义:typedefstruct{vu32IMR;//中断屏蔽寄存器,配置20个中断线的屏蔽位vu32EMR;//事件屏蔽寄存器vu32RTSR;//上升沿触发选择寄存器vu32FTSR;//下降沿触发选择寄存器vu32SWIER;//设置软件中断寄存器的请求位vu32PR;//挂起寄存器}EXTI_TypeDef;8.3.4EXTI寄存器库中定义stm32f10x.h库8EXTI寄存器库中定义#definePERIPH_BASE((uint32_t)0x40000000)#defineAPB2PERIPH_BASE(PERIPH_BASE+0x10000)#defineEXTI_BASE(APB2PERIPH_BASE+0x0400)#defineEXTI((EXTI_TypeDef*)EXTI_BASE)EXTI为EXTI_TypeDef结构体型指针地址:0x40010400EXIT寄存器配置数据位宏定义在3269行开始:。/*BitdefinitionforEXTI_IMRregister**/#defineEXTI_IMR_MR0((uint32_t)0x00000001)/*!<InterruptMaskonline0*/#defineEXTI_IMR_MR1((uint32_t)0x00000002)……EXTI寄存器库中定义#definePERIPH_BASE8.3.5EXTI库函数stm32f10x_exti.cEXTI库函数在文件stm32f10x_exti.c中定义8.3.5EXTI库函数stm32f10x_exti.c8.3.6外部中断与NVIC的关系外部中断0与NVIC的对应8.3.6外部中断与NVIC的关系外部中断0与NVIC的对NVIC寄存器NVIC寄存器NVIC库函数NVIC库函数NVIC配置misc库中NVIC_Init()函数对NVIC初始化,用到NVIC_InitTypeDef结构体,其中四个成员:NVIC_IRQChannel参数来选择将要配置的中断向量;NVIC_IRQChannelCmd参数来进行使能(ENABLE)或关闭(DISABLE)该中断;NVIC_IRQChannelPreemptionPriority成员要配置中断向量的抢占优先级;NVIC_IRQChannelSubPriority需要配置中断向量的响应优先级。NVIC只可配置16种中断向量的优先级:编号越小,优先级别越高;抢占优先级:是指打断其它中断,会出现嵌套中断;响应优先级:先处理响应优先级高的中断;NVIC配置misc库中NVIC_Init()函数对NVI中断检测按键实验硬件连接:PE5–key1、PE6–key2,key1按下时,进入线中断处理函数,LED1状态取反。

配置工程环境:除使用GPIO和RCC片上外设;还要使用exti片上外设,stm32f10x_exti.c包含了支持exti配置和操作的函数;misc.c文件则包含了NVIC的配置函数;本实验中还会在stm32f10x_it.c中编写中断服务函数。中断检测按键实验硬件连接:PE5–key1、PE6–Main函数配置好LED用到的I/O后,调用LED1()点亮一盏LED灯;配置中断,等待中断发生。intmain(void){/*configtheled*/LED_GPIO_Config();LED1(ON);/*extilineconfig*/EXTI_PE5_Config();/*waitinterrupt*/while(1){}}Main函数配置好LED用到的I/O后,调用LED1()点亮配置外部中断exti.cEXTI_PE5_Config()函数,配置PE5为线中断口,并设置中断优先级。主要步骤:1.使能EXTIx线的时钟和第二功能AFIO时钟2.配置EXTIx线的中断优先级3.配置EXTI中断线I/O4.选定要配置为EXTI的I/O口线和I/O口的工作模式5.EXTI中断线工作模式配置配置外部中断exti.cEXTI_PE5_Config()函EXTI_PE5_Config()函数8.voidEXTI_PE5_Config(void)9.{10.GPIO_InitTypeDefGPIO_InitStructure;11.EXTI_InitTypeDefEXTI_InitStructure;13.

/*configtheextiline(PE5)clockandAFIOclock*/14.RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO,ENABLE);16./*configtheNVIC(PE5)*/17.NVIC_Configuration();//NVIC初始化配置19./*EXTIlinegpioconfig(PE5)*/20.GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;21.GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//上拉输入EXTI_PE5_Config()函数8.voidEXTEXTI_PE5_Config()函数_续22.GPIO_Init(GPIOE,&GPIO_InitStructure);24./*EXTIline(PE5)modeconfig*/25.GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource5);//PE5设置为EXTI输入线26.EXTI_InitStructure.EXTI_Line=EXTI_Line5;27.EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;28.EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿触发中断

29.EXTI_InitStructure.EXTI_LineCmd=ENABLE;30.EXTI_Init(&EXTI_InitStructure);31.}EXTI_PE5_Config()函数_续22.GPIO_GPIO端口的复用功能AFIOAFIO(alternate-functionI/O),GPIO除了用作普通的输入输出(主功能),还可以作为片上外设的复用输入输出,如串口,ADC,这些就是复用功能。GPIO还有重映射功能:重映射功能是指把原来属于A引脚的默认复用功能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论