【文档说明】第4章ARM硬件结构应用4~6-课件.ppt,共(55)页,906.013 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-92616.html
以下为本文档部分文字说明:
嵌入式系统及应用福州大学物信学院1.LPC和STM32简介2.STM32固件库3.系统控制模块4.引脚连接模块5.GPIO操作6.向量中断控制器7.外中断输入LPC和STM32系列ARM硬件结构与应用8.定时器原理及应用9.SPI接口及应用
10.UART接口及应用11.A/D转换器及应用12.看门狗13.PWM原理与应用14.实时时钟嵌入式系统及应用福州大学物信学院4引脚连接模块•概述LPC2000系列微控制器的大部分管脚都具有多种
功能,即管脚复用,但是同一引脚在同一时刻只能使用其中一个功能,通过配置相关寄存器控制多路开关来连接引脚与片内外设。引脚P0.0GPIOTXD0PWM1输出保留PINSELx引脚连接寄存器PINSELx1:000011011P0.0默认为GPIO功能P0.0选择TXD0功能,配置对应位为01P0
.0选择PWM1功能,配置对应位为10P0.0选择保留功能,配置对应位为11嵌入式系统及应用福州大学物信学院4引脚连接模块LPC2000系列微控制器具有三个32位宽度PINSEL寄存器,其中PINSEL0和PINSEL1控制端口0,PINSE
L2根据芯片的不同控制的端口数量也不同。•寄存器描述寄存器LPC2100LPC2200PINSEL0P0[0:15]PINSEL1P0[16:31]PINSEL2P1[16:31]P1[0:1]、P1[16:31]、P2[0:31]、P3[0:31]嵌入式系统及应用福州大学物信
学院4引脚连接模块•应用示例PINSEL0=0x05<<16;要求将P0.8、P0.9设置为TxD1、RxD1通过查阅PINSE0寄存器设置表,得到P0.9和P0.8的控制位为PINSEL0[19:16],当该域设置为[0101](0x05)时选择R
xD1和TxD1。为了不影响别的管脚连接设置,通常选择下面的设置方法。PINSEL0=(PINSEL0&0xFFF0FFFF)|(0x05<<16);嵌入式系统及应用福州大学物信学院5GPIO•引脚描述LPC2114/2124微控制器具
有两个端口——P0和P1,可以作为GPIO使用的引脚数为46个。LPC2210/2212/2214微控制器还包含另外两个端口——P2和P3,这个两个端口与外部存储器总线复用,当它们全部作为GPIO使用时,GPIO引脚数多达112个。GPI
O与控制寄存器的关系PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10引脚嵌入式系统及应用福州大学物信学院PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10PINSELxI
OxDIRIOxCLRIOxPINIOxSETinout10通用名称描述访问类型复位值IOPINGPIO引脚值寄存器,不管方向模式如何,引脚的当前状态都可以从该寄存器中读出只读NAIOSETGPIO输出置位
寄存器。该寄存器控制引脚输出高电平读/置位0x00000000IOCLRGPIO输出置位寄存器。该寄存器控制引脚输出低电平只清零0x00000000IODIRGPIO方向控制寄存器。该寄存器单独控制每个IO口的方向读/写0x00000000•GPIO相关寄存器描述嵌入式系统及应用福州大学物信学院P
INSELxIOxDIRIOxCLRIOxPINIOxSETinout10•GPIO相关寄存器描述——IOxPINIOxPIN描述复位值31:0GPIO引脚值。IOxPIN[0]对应于Px.0…IOxPIN[31]对应于Px.31引脚未定义该寄存器反映了当前引脚的状态。
IOxPIN中的x对应于某一个端口,如P1口对应于IO1PIN。所以芯片存在多少个端口,就有多少个IOxPIN分别与之对应。写该寄存器会将值保存到输出寄存器,具体使用稍后介绍。注意:无论引脚被设置为输入还是输出模式,都不影响引脚状态的读出。嵌入式系统及应用
福州大学物信学院PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10•GPIO相关寄存器描述——IOxDIRIOxDIR描述复位值31:0方向控制位。IOxDIR[0]对应于Px.0…IOxD
IR[31]对应于Px.31引脚0当引脚设置为GPIO输出模式时,可使用该寄存器控制引脚的方向。向某位写入1使对应引脚作为输出功能,写入0时作为输入功能。作为输入功能时,引脚处于高阻态。嵌入式系统及应用福州大学物信学院PINSELxIOxDIRIOxCLRIOxPINIOxSETi
nout10•GPIO相关寄存器描述——IOxSETIOxSET描述复位值31:0输出置位。IOxSET[0]对应于Px.0…IOxPIN[31]对应于Px.31引脚0当引脚设置为GPIO输出模式时,可使
用该寄存器从引脚输出高电平。向某位写入1使对应引脚输出高电平。写入0无效。从该寄存器读回的数据为GPIO输出寄存器的值。该值不反映外部环境对引脚的影响。嵌入式系统及应用福州大学物信学院PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10•GPIO相关寄
存器描述——IOxCLRIOxCLR描述复位值31:0输出清零。IOxCLR[0]对应于Px.0…IOxCLR[31]对应于Px.31引脚0当引脚设置为GPIO输出模式时,可使用该寄存器从引脚输出低电平。向某位写入1使对应引脚输出低电平。写入0无效。注
意:读取该寄存器无效,不能读回输出寄存器的值。嵌入式系统及应用福州大学物信学院5GPIO•使用GPIO注意要点引脚设置为输出方式时,输出状态由IOxSET和IOxCLR中最后操作的寄存器决定;大部分GPIO输出为推挽方式(个别引脚
为开漏输出),正常拉出/灌入电流均为4mA(短时间极限值40mA);复位后默认所有GPIO为输入模式。嵌入式系统及应用福州大学物信学院...PINSEL0&=0xFFFFFFFC;IO0DIR|=0x00000001
;IO0SET=0x00000001;...C代码:PINSEL0IO0DIRIO0CLRIO0PINIO0SETinout10•GPIO应用示例——设置P0.0输出高电平P0.0(1)设置引脚连接模块,P0.0为GPIO(2)设置P0.0口方向,设置为输出(3)设置P0.0口状态,输出高电平
1嵌入式系统及应用福州大学物信学院...uint32PinStat;PINSEL0&=0xFFFFFFFC;IO0DIR&=0xFFFFFFFE;PinStat=IO0PIN;...C代码:PINSEL0IO0DIRIO0CLRIO0PINIO0SETinout10•GPIO应用示例——读取P
0.0引脚状态P0.0(1)设置引脚连接模块,P0.0为GPIO(2)设置P0.0口方向,设置为输入(3)从IO0PIN读取引脚状态IO0PIN嵌入式系统及应用福州大学物信学院#defineDataBus0xFFPINSEL0&=0xFFFF0000;IO0DIR|=Da
taBus;IO0CLR=DataBus;IO0SET=Data;...使用IOxSET和IOxCLR实现:•GPIO应用示例——输出多位数据至IO口(1)设置引脚连接模块,P0.0~7为GPIO(2)设置P0.0口方向,设置为输出(3)清零8位IO口的输出状态在需要将多位数据同时输出
到某几个IO口线时,通常使用IOxSET和IOxCLR来实现,在某些情况下也可以使用IOxPIN寄存器实现。后者可以在多个IO口上直接输出0和1电平。本例将8位无符号整形变量Data的值输出到P0.0~P0.7。(4)Data变量中为1的位将输出高电平0x??0x00Data数据输出线:嵌入式系统
及应用福州大学物信学院#defineDataBus0xFFPINSEL0&=0xFFFF0000;IO0DIR|=DataBus;IO0PIN=(IO0SET&0xFFFFFF00)|Data;...•GPIO应用示例——输出多位数据至IO口(1)设置引脚连接模块,P0.0
为GPIO(2)设置P0.0口方向,设置为输出(3)写IO0PIN,输出数据在需要将多位数据同时输出到某几个IO口线时,通常使用IOxSET和IOxCLR来实现,在某些情况下也可以使用IOxPIN寄存器实现。后者可以在多个IO口上直接输出0
和1电平。本例将8位无符号整数变量Data的值输出到P0.0~P0.7。使用IOxPIN实现:0x??Data数据输出线:0x??0x00Data与前者对比:嵌入式系统及应用福州大学物信学院STM32GPIO操作主要功能:通用I/O(GPIO)用
,输入输出;单独的位设置或位清除;外部中断/唤醒线:端口必须配置成输入模式时,所有端口都有外部中断能力;复用功能(AF),并且软件能重新映射I/O复用功能;GPIO锁定机制:主要针对复位设定的,当某端口位lock后,
复位后将不改变的此端口的位配置。嵌入式系统及应用福州大学物信学院STM32GPIO操作•强大的GPIO功能,可设置:GPIOMode_TypeDefGPIOmode定义及偏移地址GPIOmode:GPIO_Mode_AIN0x00模拟输入GPIO_Mode_IN_FLOATING0x04悬空输入G
PIO_Mode_IPD0x28下拉输入GPIO_Mode_IPU0x48上拉输入GPIO_Mode_Out_OD0x14开漏输出GPIO_Mode_Out_PP0x10推挽输出GPIO_Mode_AF_OD0x1c开漏复用GPIO_Mode_AF_PP0x18推挽复用嵌
入式系统及应用福州大学物信学院STM32GPIO操作•输出速度通过GPIOSpeed_TypeDef结构体可选择:2MHz,10MHz,50MHz。typedefenum{GPIO_Speed_10MHz,GPIO_Speed_2MHz,G
PIO_Speed_50MHz}GPIOSpeed_TypeDef;嵌入式系统及应用福州大学物信学院•固件库里面的GPIO库文件已经为我们准备好了很多的操作函数,可以直接使用。1.GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitT
ypeDef*GPIO_InitStruct):根据GPIO_InitTypeDef里面的值,初始化某排里面的某些引脚的模式跟速度2.GPIO_StructInit(GPIO_InitTypeDef*GPIO_InitStruct):给GPIO_InitTypeDef里面的项目赋默认
值3.GPIO_SetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin):某排引脚某个引脚输出1嵌入式系统及应用福州大学物信学院•固件库里面的GPIO库文件已经为我们准备好了很多的操作函数,可以直接使用。4.
GPIO_ResetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin):某排引脚某个引脚输出05.GPIO_Write(GPIO_TypeDef*GPIOx,uint16_tPortVal):设置某排引脚输出值6.GPIO_ReadInputData(
GPIO_TypeDef*GPIOx):读整排引脚的值7.GPIO_ReadOutputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin):读某排引脚里面的输出寄存器的某个引脚值……嵌入式系统及应用福州大学物信学院操作实例•做个跑马灯程序,PA.11—PA.
14口分别4个LED灯,当I/O为高电平时LED灯点亮。嵌入式系统及应用福州大学物信学院•#include“stm32f10x.h”#include“stm32f10x_conf.h”GPIO_InitTypeDefPAInit;voidLED_Init(void){RCC_APB2Pe
riphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//开GPIOC时钟PAInit.GPIO_Pin=GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14;PAInit.GPIO_Mode
=GPIO_Mode_Out_PP;PAInit.GPIO_Speed=GPIO_Speed_2MHz;GPIO_Init(GPIOA,&PAInit);}嵌入式系统及应用福州大学物信学院•main(){LED_Init(
);while(1){GPIO_SetBits(GPIOA,GPIO_Pin_11);//GPIOA.11=1Delay(0x8ffff);GPIO_ResetBits(GPIOA,GPIO_Pin_11);//GPIOA.11=0Delay(0x8ffff);GPIO_SetBi
ts(GPIOA,GPIO_Pin_12);Delay(0x8ffff);GPIO_ResetBits(GPIOA,GPIO_Pin_12);Delay(0x8ffff);GPIO_SetBits(GPIOA,GPIO_P
in_13);Delay(0x8ffff);GPIO_ResetBits(GPIOA,GPIO_Pin_13);Delay(0x8ffff);GPIO_SetBits(GPIOA,GPIO_Pin_14);Delay(0x8ffff);GP
IO_ResetBits(GPIOA,GPIO_Pin_14);Delay(0x8ffff);}}嵌入式系统及应用福州大学物信学院6向量中断控制器•概述ARM7TDMI内核具有两个中断输入,分别为IRQ中断和FIQ中断。向量中断控制器(VIC)负
责管理芯片的中断源,最多可以管理32个中断输入请求。CPU内核ARM7TDMI-S嵌入式系统及应用福州大学物信学院6.向量中断控制器•程序状态寄存器CPSR与VIC的关系ARM内核通过CPSR来监视和控制内部
的操作,CPSR中的“I”位和“F”位分别用来控制IRQ模式和FIQ模式的使能。CPUARM7TDMI-SVICIRQFIQCPSR[7](I)CPSR[6](F)嵌入式系统及应用福州大学物信学院6.向量中断控制器•程序状态寄存器CPSR与VIC的关系当I=1时,
禁止IRQ中断CPUARM7TDMI-SVICIRQFIQCPSR[7](I)CPSR[6](F)当I=0时,使能IRQ中断CPUARM7TDMI-SVICIRQFIQCPSR[7](I)CPSR[6](F)嵌入式系统及应用福州大学物信学院6.向量中断控制器•程序状态寄存器CP
SR与VIC的关系当F=1时,禁止FIQ中断CPUARM7TDMI-SVICIRQFIQCPSR[7](I)CPSR[6](F)当F=0时,使能FIQ中断CPUARM7TDMI-SVICIRQFIQCPSR[7
](I)CPSR[6](F)嵌入式系统及应用福州大学物信学院6.向量中断控制器•中断分类中断输入请求可以在VIC中被设置为以下三类:FIQ中断:具有最高优先级;向量IRQ中断:具有中等优先级;非向量IRQ中断:具有最低优先级;VICARM7TDMI向量IRQ非向量IRQFIQ
IRQFIQ嵌入式系统及应用福州大学物信学院6.向量中断控制器•FIQ中断硬件处理流程将当前的程序状态寄存器的内容备份即,SPSR_fiq=CPSR处理器切换到FIQ模式禁止IRQ和FIQ中断,即,I=F=1保存
返回地址LR_fiq=PC设置FIQ异常入口地址PC=0x1C发生FIQ异常事件说明:ARM7不支持FIQ中断嵌套嵌入式系统及应用福州大学物信学院6.向量中断控制器•IRQ中断相应流程将当前的程序状态寄存器的内容备份即,SPSR_irq=CPS
R处理器切换到IRQ模式禁止IRQ中断,即,I=1保存返回地址LR_irq=PC设置IRQ异常入口地址PC=0x18发生IRQ异常事件说明:ARM7不支持IRQ中断嵌套嵌入式系统及应用福州大学物信学院向量IRQ0使能中断源向量IRQ0控制寄存器VICVectCntl0向量地址0寄存
器VICVectAddr0默认向量地址寄存器VICDefVectAddr向量IRQ15使能中断源向量IRQ15控制寄存器VICVectCntl15向量地址15寄存器VICVectAddr15DefIRQIRQ0IRQ15VectAddr0VectAddr15DefVec
tAddr硬件优先级选择向量地址选择向量地址寄存器VICVectAddrIRQ0IRQ15DefIRQIRQ中断信号向量IRQ0向量IRQ15非向量IRQ高低优先级IRQ中断状态寄存器VICIRQStatusFIQ中断信号中断选择寄存器VICIntSelect中断使能寄存器VICI
ntEnable中断使能清零寄存器VICIntEnClr中断源[31:0]软件中断使能寄存器VICSoftInt软件中断清零寄存器VICSoftIntClearFIQ中断状态寄存器VICFIQStatus中断状态寄存器VICRawIntrIRQFIQ嵌入式系统及应用福州
大学物信学院中断选择寄存器VICIntSelect中断使能寄存器VICIntEnable中断使能清零寄存器VICIntEnClr中断源[31:0]软件中断使能寄存器VICSoftInt软件中断清零寄存器VICSoftIntClear中断状态寄存器VICRawInt
rIRQFIQ名称描述访问复位值地址VICIntEnable中断使能寄存器控制32个中断请求(包括软件中断)的使能R/W00xFFFFF010VICIntEnClr中断使能清零寄存器将中断使能寄存器中的一个或多个位清零W00xFFFFF014VICIntSelect中断选择寄存器将32
个中断请求的每个中断分配为FIQ或IRQR/W00xFFFFF00CVICSoftInt软件中断寄存器控制对应通道产生软件中断R/W00xFFFFF018VICSoftIntClear软件中断清零寄存器禁止对应通道的软件中断W00xFFFFF01C•寄存器描述-控制寄存器嵌入式系
统及应用福州大学物信学院•控制寄存器功能描述6.向量中断控制器控制寄存器功能描述VICIntEnable使能(禁止)中断源产生中断VICIntEnClrVICIntSelect中断类型选择:FIQ&IRQVICSoftInt软件中断设置寄存器VICSoftIntClearFI
Q中断向量IRQ中断非向量IRQ中断中断源0中断源1……中断源31VIC将32个中断输入进行分配嵌入式系统及应用福州大学物信学院向量IRQ0使能中断源向量IRQ0控制寄存器VICVectCntl0向量
地址0寄存器VICVectAddr0默认向量地址寄存器VICDefVectAddr向量IRQ15使能中断源向量IRQ15控制寄存器VICVectCntl15向量地址15寄存器VICVectAddr15向量地址寄存器VICVectAddr•寄存器描述-参数设置寄存器名称描述复位置地址VICV
ectCntl0~VICVectCntl15向量控制0寄存器~向量控制15寄存器00xFFFFF200~0xFFFFF23CVICVectAddr0~VICVectAddr15向量地址0寄存器~向量地址15寄存器00xFFFFF100~0xFFFFF13CVICDefV
ectAddr默认向量地址寄存器00xFFFFF034VICVectAddr向量地址寄存器00xFFFFF030嵌入式系统及应用福州大学物信学院•IRQ中断特点6.向量中断控制器特点区别向量IRQ支持16个向量IRQ中断;16个优先级;每个优先级指定一个服务程序入口地址。能为每个向量I
RQ中断源设置服务程序地址。非向量IRQ支持1个非向量IRQ中断;所有非向量IRQ的入口地址都相同。所有的非向量IRQ中断都共用一个相同的服务程序入口地址。嵌入式系统及应用福州大学物信学院•IRQ中断相关寄存器6.向量中断控制器寄存器名称功能VICVectCntl0~15为中断源分配
向量IRQ中断的优先级。VICVectAddr0~15为该中断优先级设置服务程序入口地址。VICDefVectAddr设置非向量中断服务程序的入口地址。注意:如果将同一个中断源分配给多个使能的向量IRQ中断,那么该中断源发生中断时,会使用最高优
先级(最低编号)的寄存器设置。嵌入式系统及应用福州大学物信学院•产生中断后的服务程序地址6.向量中断控制器向量IRQ中断发生向量IRQ中断后,VIC将对应的向量地址寄存器中的数据存入VICVectAddr寄存器中。非向量IRQ中断发生非向量IRQ中断后,VIC将默认向量地址寄存器中的数据
存入VICVectAddr寄存器中嵌入式系统及应用福州大学物信学院IRQ中断状态寄存器VICIRQStatus中断选择寄存器VICIntSelect中断使能寄存器VICIntEnable中断使能清零寄存器VICIntEnClr中断源[31:
0]软件中断使能寄存器VICSoftInt软件中断清零寄存器VICSoftIntClearFIQ中断状态寄存器VICFIQStatus中断状态寄存器VICRawIntrIRQFIQ•寄存器描述-状态寄存器名称描述访问复位值地址VICIRQStatusIRQ状态寄存
器该寄存器读出定义为IRQ并使能的中断的状态RO00xFFFFF000VICFIQStatusFIQ状态请求该寄存器读出定义为FIQ并使能的中断的状态RO00xFFFFF004VICRawIntr所有中断的状态寄存器该寄存器读出32个中断请求/软件中断的状态,不管中断是否使能或分类RO00xF
FFFF008注意:读取VICRawIntr寄存器将得到所有32个中断请求和软件中断的状态,它不管中断是否使能或分类。嵌入式系统及应用福州大学物信学院•保护使能寄存器6.向量中断控制器保护使能寄存器(VICProtection):位[31:1]0功能—当该位为1时,只能在特权模式下访问VI
C寄存器。在某些场合可能需要禁止在用户模式下访问VIC寄存器,以提高软件的安全等级。嵌入式系统及应用福州大学物信学院•FIQ中断处理6.向量中断控制器SPSR_fiq=CPSR12CPSR=nzcvqIFt
_fiq3LR_fiq=PC4PC=0x1C硬件处理软件处理中断服务程序1设置返回地址2恢复程序状态寄存器CPSR3SUBSPC,LR,#4嵌入式系统及应用福州大学物信学院•IRQ中断处理6.向量中断控制器硬件处理SPSR_irq=CPSR12CPSR=nzcvqIft_irq3VICV
ectAddr=VICVectAddrn4LR_irq=PC5PC=0x18软件处理执行中断服务程序2设置返回地址3恢复程序状态寄存器CPSR4获取中断服务程序地址1嵌入式系统及应用福州大学物信学院•IRQ中断处理6.向量中断控制器SPSR_irq=CPSR12
CPSR=nzcvqIft_irq3VICVectAddr=VICVectAddrn4LR_irq=PC硬件处理5PC=0x18软件处理执行中断服务程序2设置返回地址3恢复程序状态寄存器CPSR4PC[VICV
ectAddr]1嵌入式系统及应用福州大学物信学院•IRQ中断处理6.向量中断控制器SUBSPC,LR,#4SPSR_irq=CPSR12CPSR=nzcvqIft_irq3VICVectAddr=VICVectAddrn4LR_irq
=PC硬件处理5PC=0x18软件处理执行中断服务程序2设置返回地址3恢复程序状态寄存器CPSR4LDRPC,[PC,#-0xff0]1嵌入式系统及应用福州大学物信学院•IRQ中断的设计实例将定时器0中断分配为向量IRQ通道0,中断服务程序地址设置为Timer0_ISR。C代码:步
骤:IRQ通道0控制寄存器VICVectCntl031:654:0010x04向量IRQ通道0控制寄存器位分配位数值IRQ通道0向量地址寄存器VICVectAddr0定时器0中断服务程序地址Timer0_ISR中断使能寄存器VICIntEnable中断通道#4对应位,置“1”中断选择寄存器VICI
ntSelect中断通道4分配为IRQ中断(定时器0位于中断通道#4)VICIntSelect=0x00000000;VICVectAddr0=(int)Timer0_ISR;VICVectCntl0=(0x20|4);VICIn
tEnable=(1<<4);嵌入式系统及应用福州大学物信学院③IRQ_Eint0???VICVectAddr0VICVectAddrIRQ_Eint0•图示IRQ中断的发生过程0x000000000xFFFFFFFF用户程序中
断服务程序异常向量表1.正在执行用户程序;①2.外部中断0发生中断;②3.VIC硬件将中断服务程序地址装入VICVectAddr寄存器;④4.程序跳转至异常向量表中IRQ入口0x0018处;5.执行指令跳转至VICVectAddr寄存器中的中断
服务地址;⑤⑥6.中断服务程序执行完毕,返回被中断的用户程序继续执行被中断的代码。⑤LDRPC,[PC,#-0xff0]嵌入式系统及应用福州大学物信学院•图示IRQ中断的发生过程0x000000000xFFFFFFFF用户程序中断服务程序异常向量表①②④⑤⑥③IRQ_E
int0???VICVectAddr0VICVectAddrIRQ_Eint0⑤LDRPC,[PC,#-0xff0]注意:任何IRQ中断产生之后,微控制器跳转到地址0x18执行代码,该地址处的指令为:LDRPC,[PC,#-0xff0]在执行该指令时,PC指向当前指令
后的第2条指令,即地址0x20。该指令将内存地址:0x20-0xFF0=0xFFFFF030处的内容存入PC,该地址正是VICVectAddr寄存器的地址。所以一条ARM指令即可实现程序向中断服务程序的
跳转。嵌入式系统及应用福州大学物信学院•STM32目前支持的中断共为:84个其中(16个内核+68个外部),和16级可编程中断优先级的设置(仅使用中断优先级设置8bit中的高4位,见后面解释)。6.ST
M32中断控制嵌入式系统及应用福州大学物信学院•STM32可以支持的68个外部中断通道,已经固定的分配给相应的外部设备。•每个中断通道都具备自己的中断优先级控制字节PRI_n(8位,但在STM32中只使用4位,高4位有效)对于这4bit的中断优先级控制位还
必须分成2组看:从高位开始,前面是定义抢先式优先级的位,后面用于定义子优先级。6.STM32中断控制嵌入式系统及应用福州大学物信学院•4bit的分组组合可以有以下几种形式:•第0组:所有4bit用于指定响应优先级;•第1
组:最高1位用于指定抢占式优先级,后面3位用于指定响应优先级;•第2组:最高2位用于指定抢占式优先级,后面2位用于指定响应优先级;•第3组:最高3位用于指定抢占式优先级,后面1位用于指定响应优先级;•第4组:所有4位用于指定抢占式优先级。具有高抢占式优先级的中断可以在具有低抢占式优先级的
中断处理过程中被响应,即中断嵌套。6.STM32中断控制嵌入式系统及应用福州大学物信学院6.STM32中断控制嵌入式系统及应用福州大学物信学院•设置相应的中断实际上就是设置NVIC,在STM32的固件库中有一个结构体NVIC_InitTypeDef,里面有相应的标志位设
置,然后再用NVIC_Init()函数进行初始化。•详细代码如下:6.STM32中断设置实例嵌入式系统及应用福州大学物信学院•voidNVIC_cfg(){NVIC_InitTypeDefNVIC_Ini
tStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//选择中断分组2NVIC_InitStructure.NVIC_IRQChannel=EXTI2_IRQChannel;//选
择中断通道2NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//抢占式中断优先级设置为0NVIC_InitStructure.NVIC_IRQCh
annelSubPriority=0;//响应式中断优先级设置为0NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//使能中断NVIC_Init(&NVIC_InitStructure)
;}嵌入式系统及应用福州大学物信学院嵌入式系统及应用福州大学物信学院写中断响应函数•STM32不像C51单片机那样,可以用过interrupt关键字来定义中断响应函数,STM32的中断响应函数接口存在中断向量表中,是由启动代码给出的。
•默认的中断响应函数在stm32f10x_it.c中。因此我们需要把这个文件加入到工程中来。嵌入式系统及应用福州大学物信学院•voidEXTI2_IRQHandler(void){//点亮LED灯GPIO_SetBits(
GPIOD,GPIO_Pin_6);//清空中断标志位,防止持续进入中断EXTI_ClearITPendingBit(EXTI_Line2);}voidEXTI3_IRQHandler(void){GPIO_S
etBits(GPIOD,GPIO_Pin_3);EXTI_ClearITPendingBit(EXTI_Line3);}