CKS32F103微控制器原理与实践 课件 第6-10章 通GPIO和复用AFIO接口-DMA控制_第1页
CKS32F103微控制器原理与实践 课件 第6-10章 通GPIO和复用AFIO接口-DMA控制_第2页
CKS32F103微控制器原理与实践 课件 第6-10章 通GPIO和复用AFIO接口-DMA控制_第3页
CKS32F103微控制器原理与实践 课件 第6-10章 通GPIO和复用AFIO接口-DMA控制_第4页
CKS32F103微控制器原理与实践 课件 第6-10章 通GPIO和复用AFIO接口-DMA控制_第5页
已阅读5页,还剩219页未读 继续免费阅读

下载本文档

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

文档简介

CKS32F103微控制器教学课件06通用GPIO和复用AFIO接口GPIO(General-PurposeInput/Output)通用输入输出接口,以及强大的复用功能6.1GPIO的主要功能解析GPIO的核心定义,深入理解输入、输出及引脚复用的基础概念,建立对通用输入输出口的完整认知。📌GPIO通用输入/输出端口:是微控制器MCU与外部世界交互的基础通道,每一个GPIO引脚都能通过软件灵活配置为输入或输出模式,是嵌入式开发中最最基础的硬件资源,承担着数据感知与执行控制的双重职责。📥功能1:数据输入(InputMode)实时检测外部引脚的高低逻辑电平,常用于读取按键状态、传感器数据;支持外部中断触发(上升/下降沿),部分引脚还可复用为ADC模拟信号的输入通道,实现对模拟量的采集。通过编程控制引脚上的高低电平,实现与各类外部设备(如传感器、LED、电机等)的交互,是连接数字逻辑与物理世界的关键纽带。6.1GPIO的主要功能📤功能2:数据输出(OutputMode)输出稳定的高低电平,直接驱动LED指示灯、继电器等外设。支持最高50MHz的高速电平翻转,能够快速响应控制指令,是实现硬件执行动作的最直接手段。🔀功能4:复用功能(AlternateFunction-AF)突破基础IO的限制,大部分引脚拥有第二功能。可被分配给UART串口、SPI总线、I2C通信等硬件外设,实现更高效、更专业的设备间数据传输,是拓展微控制器功能的关键。🧩功能3:

位操作能力支持对单个引脚进行独立的置1、置0或翻转操作,无需操作整个寄存器。这种精细化的控制方式不仅简化了代码逻辑,还能避免误操作其他引脚,极大提升了编程的灵活性与安全性。6.1GPIO的主要功能-工作模式类别模式描述应用输入模式浮空输入默认输入模式,输入状态由外部电平决定用于需要精确电平检测的场景,如按键检测,需外接电阻上拉输入内部上拉电阻,保持高电平状态适合简化外部电路设计,如按键直接接地避免引脚浮空引入噪声下拉输入内部下拉电阻,保持低电平状态模拟输入连接到ADC或模拟外设,数字输入缓冲器被关闭,降低功耗连接模拟传感器等外设,采集模拟电压信号输出模式通用推挽输出驱动能力强,最大可达25mA,可输出高电平/低电平适用于驱动LED、继电器等数字负载通用开漏输出仅输出低电平或高阻态,需外接上拉电阻才能输出高电平适用于总线通信,如I²C,避免电平冲突复用推挽输出引脚由片上外设控制,输出模式为推挽式用于功能复用如USART、SPI等需要高速、强驱动场合,满足外设的输出需求复用开漏输出引脚由片上外设控制,输出模式为开漏式用于复用功能的开漏模式如I2C_SDA等引脚,满足外设的特殊输出要求GPIO的输入输出工作模式GPIOA端口的16个引脚可表示为GPIOA0~GPIOA156.1GPIO的主要功能-引脚指标引脚指标1:GPIO

单个引脚的承载电压为3.3V,部分引脚具备5V容忍能力,所有I/O端口都是CMOS和TTL兼容引脚指标2:单个引脚灌入或输出的最大电流通常为±25mA,所有I/O的总电流不可超过150mA,所有VDD/VSS引脚总电流不可超过±150mA。为保证电平可靠,单个I/O推荐工作电流≤8mA引脚指标3:引脚的最低输入高电平为0.7×VDD,最高输入低电平为0.35×VDD。引脚输出高电平在8mA负载下能保证≥VDD-0.4V,例如在3.3V供电时大于2.9V,低电平≤0.4V6.2GPIO的结构及工作流程每个I/O引脚都带有上下保护的两个二极管,用于防止外部输入电压超过供电范围而损坏芯片I/O引脚还配有可控的上拉/下拉电阻,实现上拉、下拉和浮空三种输入状态6.3GPIO的结构及工作流程-输入流程GPIO引脚可配置为数字输入、模拟输入或片上外设复用功能输入数字量输入:GPIO配置为数字输入时,主要用于检测外部电路施加在引脚上的高、低电平状态,如按键、开关量或状态信号采集模拟信号输入:GPIO配置为模拟输入时,引脚上的模拟电压直接进入ADC模块的采样保持电路,实现模拟量到数字量的转换

片上外设复用功能输入:如串口接收、定时器捕获、外部中断、I²C/SPI的数据输入等。引脚上的信号经配置的上拉/下拉电阻和肖特基触发器整形后送入对应的外设模块。6.3GPIO的结构及工作流程-输出流程GPIO引脚可配置直接数字量输出和复用功能输出两类。为确保输出可靠,在关键应用中常需对输出状态进行检测直接数字量输出:GPIO配置为数字信号输出端,控制LED、蜂鸣器、继电器、片选信号等。开漏输出或推挽输出模式推挽模式(Push-Pull):主动式双驱通过内部上下两个互补的MOS管轮流导通,主动输出强高电平和强低电平。拥有极强的电流驱动能力,是最常用的通用输出模式,适用于直接驱动LED、继电器等负载。开漏模式(Open-Drain):被动式集电极仅能主动拉低电平,无法主动输出高电平,需依赖外部上拉电阻才能实现高电平输出。支持“线与”逻辑,允许多个设备共享同一总线,是I2C、SMBus等通信协议的标准配置。6.3GPIO的结构及工作流程-输出流程复用功能输出:当GPIO配置为片上外设复用功能引脚时,引脚电平状态由片上外设的硬件逻辑驱动,用户无法控制引脚的输出电平。例如串口USART的TX引脚、定时器PWM输出等。复用功能输出时根据应用需要,必须在GPIO配置寄存器中选择推挽复用输出或开漏复用输出模式。片上外设负责驱动数据,但输出特性须由GPIO配置决定。GPIO的输出速度:指输出驱动电路的响应速度,支持2、10、50MHz三档,输出速度决定了I/O驱动电路的响应能力。速度越高,信号翻转越快,但功耗、噪声及EMI电磁干扰也随之增加。速度越低,功耗更低,EMI更小,有利于提升系统的抗干扰性能开漏输出模式下,读取结果为引脚上的实际电平,状态取决于外部电路及上拉电阻。推挽输出模式下,读取结果等于MCU最近写入的输出值,即由MCU驱动的电平输出状态检测:软件在向GPIOx_ODR写入数据的同时,也可以通过读取输入数据寄存器GPIOx_IDR来检测输出状态是否正确。6.3GPIO的位带操作💡核心原理:化“位”为“字”

位带:是一种将存储器或片上外设寄存器中的单个位映射为内存中的一个字地址的技术。位带操作是Cortex-M3内核的独特特性,它将寄存器中的单个比特位,映射为内存中的一个32位字。通过普通的读写指令,即可实现对单个引脚的精准控制,告别繁琐的位运算。💡一句话总结:将“操作某一位”转化为“操作某一个地址”,实现原子化的位访问。6.3GPIO的位带操作位带区(Bit-bandRegion)支持位带操作的内存区域,通常为外设寄存器区与SRAM的最低1MB空间。Cortex-M3中有两个空间可实现位带操作,SRAM区的最低1MB共8M个bit空间,片上外设区最低1MB空间共8M个bit,对应地址为0x20000000~0x200FFFFF和0x40000000~0x400FFFFF6.3GPIO的位带操作

位带别名区中的每4个字节对应位带区的一位,所以1MB位带区的8M位,需要32MB的位带别名区与之对应。而4字节地址中的数据只有最低一位LSB代表位地址的数据。若位带别名区某地址中数据的最低位为1,则其对应的位带区的位数据为1。操作位带别名区等价于操作位带区,在位带别名区写入一个字等同于对位带区的目标位执行读-改-写操作SRAM位带区映射图6.3GPIO的位带操作位带别名区地址与位带区地址映射关系

AliasAddr为位带别名区中的32位地址,它映射到某个目标位;bit_band_base是位带别名区的起始地址, SRAM区:bit_band_base=0x22000000,

外设区:bit_band_base=0x42000000;byte_offset是包含目标位的字节在位带里的序号, SRAM区:byte_offset=位带地址-0x20000000,

外设区:byte_offset=位带地址-0x40000000;bit_number是目标位在字节中的位置,数值为(0~31),代表D0~D31位6.3GPIO的位带操作例:如映射位带区SRAM地址为0x20000300字节中的D2位,bit_band_base=0x22000000,byte_offset=0x20000300-0x20000000=300,bit_number=2,所以位带别名区地址为:AliasAddr=0x22000000+(0x300×32)+(2×4)=0x22006008若操作GPIOA的PA0,GPIOA的端口寄存器地址为0x40010800,则代码如下//定义指向位带别名地址的指针volatileuint32_t*bitBandAlias=(volatileuint32_t*)(0x42000000+((0x40010800-0x40000000)<<5)+(0<<2));//左移操作实现乘法运算//设置该位为1*bitBandAlias=1;//读取该位的值uint32_tvalue=*bitBandAlias;6.4最小系统最小系统也称最小应用系统,是用最少的元器件组成可以工作的CKS32F103系统。最小系统是MCU工作的最低要求,不包含芯片CKS32F103之外的外围设备。设计和分析最小系统是学习CKS32F103系列的入门基础。CKS32F103最小系统包括CKS32F103C8T6芯片、供电电源、复位电路、外部振荡电路、启动模式选择、调试和程序下载接口等6个部分为方便调试和状态观察,一般在GPIO引脚连接若干LED指示灯,配备串口或USB接口。LED指示灯用来指示电源和程序的运行状态,串口电路或者USB接口电路用于实现CKS32F103系统与计算机通讯以显示程序的调试信息并监测程序的执行状况等6.4最小系统最小系统电路图6.4最小系统供电电源一般选择3.3V供电,并在每个电源引脚增加0.1uf

去耦电容。设计时通常配备5V电源做为基础电源,方便需5V供电的设备,所以需要5V到3.3V的稳压电源芯片为CKS32F103提供3.3V电源。图中U2为XC6201是5V到3.3V的LDO线性低压差稳压电源芯片。VDDA和VSSA必须分别连接到VDD和VSS。VBAT供电范围1.8V~3.6V,可外接电池,当VDD掉电时,为RTC、LSI和后备数据寄存器等供电。手动复位电路CKS32F103自身有POR上电复位,不增加外部器件就可以正常工作,但为了调试方便一般会设计手动复位电路。外部振荡电路系统时钟可以选择芯片内部的RC振荡器HSI。为保证时钟源的精度和稳定性,最小系统配备了外部振荡电路,用于产生32.768KHz的LSE和8MHz的HSE时钟。6.8GPIO相关寄存器及关键位GPIO寄存器:是软件与GPIO硬件电路之间的接口,用于配置、控制和读取引脚状态。通过对寄存器的读写,能够灵活设置GPIO的工作模式、电气特性,并实现与外部设备的输入输出交互每个GPIO端口的寄存器7个:高、低配置寄存器GPIOx_CRL

和GPIOx_CRH,输入/输出数据寄存器GPIOx_IDR和GPIOx_ODR,置位/复位(设置/清零)寄存器GPIOx_BSRR,复位(清零)寄存器GPIOx_BRR锁定寄存器GPIOx_LCKR。GPIOA~E的基地址分别为0x40010800、0x40010C00、0x40011000、0x40011400和0x400118006.8GPIO相关寄存器及关键位序号寄存器名称偏移地址复位值功能及关键位描述1

GPIO配置低寄存器:GPIOx_CRL0x000x44444444RW;配置端口x的的输入/输出模式及速度,x=A~E,y=0~7D[4y+3:4y+2]:MODEy[4y+3:4y+2],模式位,00=输入,01=10MHz输出,10=2MHz输出,11=50MHz输出;D[4y+1:4y]:CNFy[4y+1:4y],配置位,输入时01=浮空、10=上拉/下拉;输出时00=推挽、01=开漏、10=复用推挽、11=复用开漏2

GPIO配置高寄存器:GPIOx_CRH0x040x44444444RW:配置端口的8~15位的输入/输出模式及速度;结构与CRL完全相同,y=8~153

GPIO输入数据寄存器:GPIOx_IDR0x080x0000xxxxR:输入端口x的引脚y的输入状态,y=0~15;D[y]:IDRy,端口输入数据,1=引脚y输入高电平,0=低电平;高16位D31~D16保留,始终读为0;4

GPIO输出数据寄存器:GPIOx_ODR0x0C0x00000000RW:控制端口x的引脚y的输出电平,y=0~15;D[y]:ODRy,端口输出数据位,1=引脚y输出高电平,0=低电平;高16位保留,始终读为05

GPIO位设置/清零寄存器:GPIOx_BSRR0x100x00000000W:置位/清零端口x的任一位y,y=0~15;D[y]:

BSy,设置端口位y,1=置位,0=不影响;D[y+16]:

BRy,清除端口位y,1=清零;0=不影响;6

GPIO位清零寄存器:GPIOx_BRR0x140x00000000W:清零端口x的任一位y,高16位保留,y=0~15;D[y]:

BRy,清除端口的位y,1=清零;写0状态不变;7配置锁定寄存器,GPIOx_LCKR0x180x00000000W:写入特定序列后锁定CRL/CRH设置,防止误操作D[y]:

LCKy,端口x的锁位y,1=锁定端口配置;0=不锁定;6.8GPIO相关寄存器及关键位GPIO寄存器:是软件与GPIO硬件电路之间的接口,用于配置、控制和读取引脚状态。通过对寄存器的读写,能够灵活设置GPIO的工作模式、电气特性,并实现与外部设备的输入输出交互每个GPIO端口的寄存器:高、低配置寄存器GPIOx_CRL

和GPIOx_CRH,输入/输出数据寄存器GPIOx_IDR

和GPIOx_ODR,置位/复位寄存器GPIOx_BSRR,复位寄存器GPIOx_BRR

和锁定寄存器GPIOx_LCKR。6.4最小系统调试接口最小系统采用4线SWD模式,如图中P2,包括两条电源线、时钟线SCLK和数据线SDATA。启动模式选择只要BOOT0接地,程序就从Flash启动。最小系统中将BOOT0和BOOT1引脚引出,可采用跳线帽将BOOT0和BOOT1连接到电源或地,以便选择启动模式。当P1的3脚与1脚用跳线帽连接时,BOOT0的逻辑电平为1,当P1的3脚与5脚用跳线帽连接时,则BOOT0为逻辑电平0。指示灯和USB接口LED显示系统的运行状态,例如电源状态、GPIO引脚状态、通讯状态或程序执行过程中的中间状态等。D1为电源指示灯,D2用于程序状态指示。U3为USB接口,用于与计算机之间进行数据传输。6.5GPIO应用编程实例6.5.14位LED显示二进制数据本实例通过CKS32F103的GPIO引脚输出高、低电平控制LED灯,4个LED模拟成二进制数码管,循环显示数字0~15。1.GPIO控制LED原理图6.5GPIO应用编程实例2.程序代码#include"cs32.h"//包含Cks32的头文件voiddelay(uint32_tcount);voidLED_Init(void);voiddelay(uint32_tcount){while(count--){__NOP();//空操作,用来延时}}voidLED_Init(void){//1.使能GPIOA时钟(RCC_APB2ENRbit2=1)RCC->APB2ENR|=(1<<2);6.5GPIO应用编程实例2.程序代码//2.配置PA1~PA4为推挽输出(50MHz),CRL:每4位控制一个引脚//MODEy=11(50MHz输出),CNFy=00(通用推挽输出)GPIOA->CRL&=~((0xF<<(1*4))|(0xF<<(2*4))|(0xF<<(3*4))|(0xF<<(4*4)));//清零GPIOA->CRL|=((0x3<<(1*4))|(0x3<<(2*4))|(0x3<<(3*4))|(0x3<<(4*4)));//设置输出}//主函数intmain(void){

LED_Init();while(1){for(uint8_ti=0;i<16;i++)//0~15循环{//3.输出到PA1~PA4,i

的低4位对应LED状态GPIOA->ODR&=~(0x1E);//清除PA1~PA4GPIOA->ODR|=((~i&0x0F)<<1);//输出位移到PA1~PA4delay(500000);}}6.5GPIO应用编程实例3.程序说明LED显示二进制计数:0000,0001,0010,…,1111。循环往复。函数delay()函数用于产生延时,使LED之间的切换不至于过快,以保证人眼能够分辨出LED的闪烁,也可以使用定时器优化此部分。如果实际中需要控制更多的LED或修改控制LED的引脚,程序需根据硬件设计调整引脚6.5GPIO应用编程实例6.5.2按键控制LED本实例实现的功能:根据按键的状态控制LED的点亮和熄灭,即按下连接在PA0的复位键,点亮连接在PA5的LED,松开复位键则熄灭LED,电路如图6‑6所示。使用寄存器和位带操作编程,以便更好的理解GPIO和位带操作

6.5GPIO应用编程实例6.5.2按键控制LED#include"stdint.h"//位带宏定义,定义外设位带地址宏#defineBITBAND(addr,bitnum)((*(volatileuint32_t*)(0x42000000+(((uint32_t)(addr)-0x40000000)*32)+(bitnum*4))))//GPIOAODR/IDR的位带操作#definePAout(n)BITBAND(&GPIOA->ODR,n)//输出#definePAin(n)BITBAND(&GPIOA->IDR,n)//输入//GPIO寄存器基地址#defineGPIOA_BASE0x40010800#defineGPIOA((GPIO_TypeDef*)GPIOA_BASE)#defineRCC_BASE0x40021000//RCC地址#defineRCC((RCC_TypeDef*)RCC_BASE)#defineRCC_IOPAEN(1<<2)//GPIOA使能位

6.5GPIO应用编程实例6.5.2按键控制LED//GPIO寄存器结构体typedefstruct{volatileuint32_tCRL;volatileuint32_tCRH;volatileuint32_tIDR;volatileuint32_tODR;volatileuint32_tBSRR;volatileuint32_tBRR;volatileuint32_tLCKR;}GPIO_TypeDef;//RCC寄存器结构体typedefstruct{volatileuint32_tAPB2ENR;}RCC_TypeDef;//GPIO初始化voidGPIOA_Init(void){//1.使能GPIOA时钟RCC->APB2ENR|=RCC_IOPAEN;

//2.配置PA0为输入浮空(按键)GPIOA->CRL&=~(0xF<<(0*4));//清除CRL对应4位GPIOA->CRL|=(0x4<<(0*4));//PA0=输入浮空

//3.配置PA5为通用推挽输出GPIOA->CRL&=~(0xF<<(5*4));//清除原有配置GPIOA->CRL|=(0x1<<(5*4));//PA5=10MHz推挽输出}6.5GPIO应用编程实例6.5.2按键控制LED//主程序intmain(void){GPIOA_Init();

while(1){if(PAin(0))//检测按键PA0{PAout(5)=1;//点亮LED}else{PAout(5)=0;//熄灭LED}}}PAout(5)和PAin(0)对应GPIO寄存器位的别名区,直接读写单个位,位带操作无需读-改-写,安全可靠6.6GPIO复用AFIO(AlternateFunctionI/O)GPIO复用AFIO

:GPIO引脚通过引脚重映射可以配置为复用功能。通过AFIO模块的相关寄存器设置和内部硬件电路,将GPIO引脚与片上各类外设模块相连,从而实现特定功能。一个引脚在硬件设计上可支持多种功能,但同一时间只能选择其中一种。复用后,原有的GPIO功能失效,引脚由对应的片上外设直接驱动控制引脚复用有三种方式:默认复用、重映射复用和软件模拟外设功能复用。默认复用最常用,可满足大部分需求。遇到布线冲突时,可使用重映射复用。当MCU不具备外设要求的功能时,则可通过软件模拟实现复用功能6.6GPIO复用AFIO外设默认复用引脚重映射复用引脚AFIO_MAPR寄存器配置SPI1NSS=PA4,SCK=PA5,MISO=PA6,MOSI=PA7NSS=PA15,SCK=PB3,MISO=PB4,MOSI=PB5SPI1_REMAP=1I²C1SCL=PB6,SDA=PB7SCL=PB8,SDA=PB9I2C1_REMAP=1USART1TX=PA9,RX=PA10TX=PB6,RX=PB7USART1_REMAP=1USART2TX=PA2,RX=PA3,CTS=PA0,RTS=PA1TX=PD5,RX=PD6,CTS=PD3,RTS=PD4USART2_REMAP=1USART3TX=PB10,RX=PB11,CK=PB12,CTS=PB13,RTS=PB14部分重映射:TX=PC10,RX=PC11,CK=PC12,CTS=PB13,RTS=PB14全重映射:TX=PD8,RX=PD9,CK=PD10,CTS=PD11,RTS=PD12USART3_REMAP[1:0]=01,部分重映射;USART3_REMAP[1:0]=11,全重映射TIM1CH1=PA8,CH2=PA9,CH3=PA10,CH4=PA11,BKIN=PB12,CH1N=PB13,CH2N=PB14,CH3N=PB15ETR/PA12部分重映射:CH1=PA8,CH2=PA9,CH3=PA10,CH4=PA11,BKIN=PA6,CH1N=PA7,CH2N=PB0,CH3N=PB1,ETR=PA12全重映射:CH1=PE9,CH2=PE11,CH3=PE13,CH4=PE14,BKIN=PE15,CH1N=PE8,CH2N=PE10,CH3N=PE12,ETR/PE7TIM1_REMAP[1:0]=01,部分重映射TIM1_REMAP[1:0]=11,全重映射6.6GPIO复用AFIOTIM2CH1=PA0,CH2=PA1,CH3=PA2,CH4=PA3部分重映射1:CH1=PA15,CH2=PB3,CH3=PA2,CH4=PA3部分重映射2:CH1=PA0,CH2=PA1,CH3=PB10,CH4=PB11全重映射:CH1=PA15,CH2=PB3,CH3=PB10,CH4=PB11TIM2_REMAP[1:0]=01,部分重映射1TIM2_REMAP[1:0]=10,部分重映射2TIM2_REMAP[1:0]=11,全部重映射TIM3CH1=PA6,CH2=PA7,CH3=PB0,CH4=PB1部分重映射:CH1=PB4,CH2=PB5,CH3=PB0,CH4=PB1全重映射:CH1=PC6,CH2=PC7,CH3=PC8,CH4=PC9TIM3_REMAP[1:0]=10,部分重映射TIM3_REMAP[1:0]=11,全部重映射TIM4CH1=PB6,CH2=PB7,CH3=PB8,CH4=PB9全重映射:CH1=PD12,CH2=PD13,CH3=PD14,CH4=PD15TIM4_REMAP=1CAN1RX=PA11,TX=PA12RX=PB8,TX=PB9或RX=PD0,TX=PD1CAN_REMAP[1:0]=10,PB8和PB9CAN_REMAP[1:0]=11,PD0和PD1振荡器OSC_IN,OSC_OUTPD01,PD01PD01_REMAP=1,全部重映射,只适用于36、48和64脚的封装JTAG/SWD默认:JTMS/SWDIO=PA13,JTCK/SWCLK=PA14,JTDI=PA15,JTDO=PB3,NJTRST=PB4TRACECK=PE2TRACED0=PE3TRACED1=PE4TRACED2=PE5TRACED3=PE6复位后的默认状态产启用SWJ但没有跟踪功能;可部分/完全关闭调试接口SWJ_CFG[2:0]=000,完全SWJ(JTAG-DP+SW-DP):复位默认状态;SWJ_CFG[2:0]=001,

完全SWJ(JTAG-DP+SW-DP)但没有NJTRST;SWJ_CFG[2:0]=010,关闭JTAG-DP,启用SW-DPSWJ_CFG=100,

关闭JTAG-DP,关闭SW-DP6.6GPIO复用AFIO2.重映射复用重映射复用功能是指通过配置复用重映射与调试I/O配置寄存器AFIO_MAPR,将某个外设的默认复用引脚功能重新分配到芯片的其他可用引脚上引脚重映射之后,原本由默认引脚承载的外设功能被转移到了重映射后的引脚上。如USART1的TX和RX默认引脚是PA9和PA10,开启重映射功能后,可将TX和RX重映射到PB6和PB7引脚上,重映射后PA9和PA10不再具有TX和RX功能默认复用默认复用功能指CKS32F103出厂默认的外设复用引脚功能,是芯片上电后的标准分配。使用默认复用功能前,须通过GPIO相关寄存器编程,实现复用输入和输出功能的配置。一般108引脚以上封装的芯片具有引脚复用功能,小封装芯片复用功能有限,具体请查阅相关芯片手册。6.6GPIO复用AFIO2.重映射复用实际的电路设计和PCB布局中,有时外设默认的复用引脚分配可能会导致布线困难或与其它元件产生干扰等问题,引入外设引脚的重映射功能后,可提供更灵活的引脚分配方案。引脚重映射是通过修改寄存器配置,改变片上外设与GPIO引脚之间的连接关系。每个外设功能在芯片内部有对应的信号通路,默认情况下这些通路连接到指定的默认引脚。当进行重映射操作时,芯片内部会将原信号通路切换到指定的重映射引脚,默认引脚上的外设功能被移除,转而由重映射后的引脚来实现该外设的功能6.6GPIO复用AFIO3.软件模拟外设功能复用软件模拟外设复用功能是通过编写软件模拟外设功能,并用指定引脚实现复用输入或者输出功能。软件模拟时引脚被设置为复用功能模式,不再由外部驱动,而是通过GPIO控制器由用户编写的软件驱动。一般在开发CKS32F103不具备的片上外设功能时采用4.OSC32_IN和OSC32_OUT振荡引脚复用为GPIO引脚OSC32_IN/PC14和OSC32_OUT/PC15引脚

。LSE振荡器关闭时,OSC32_IN/PC14和OSC32_OUT/PC15作为普通GPIO使用,当LSE振荡器开启时,这两个引脚固定为OSC32_IN和OSC32_OUT,用于连接32.768kHz外部晶振,不能再用作GPIO。进入待机模式并关闭1.5V电压区域,或当后备区域使用VBAT电源供电而不再使用VDD时,OSC32_IN/PC14和OSC32_OUT/PC15只能作为LSE晶振引脚。LSE晶振功能始终高于通用I/O功能,当LSE被使能时,引脚自动切换为晶振功能。6.6GPIO复用AFIO6.复用功能配置使用复用功能时,需使能AFIO时钟并配置引脚的输入输出功能。对于复用输入功能,端口须配置为浮空、上拉或下拉模式,且由外设驱动。对于复用输出功能,端口须配置为推挽复用输出或开漏复用输出模式。对于输入输出双向复用功能,端口须配置为推挽复用输出或开漏复用输出模式,此时输入端默认配置为浮空输入模式。具体的引脚是输入、输出还是输入输出双向复用功能,取决于外设,如USART的接收端RX为输入功能,而I²C的SDATA线为双向复用功能。6.9AFIO相关寄存器及关键位AFIO复用功能寄存器(6个)实现事件输出控制、外设引脚重映射以及外部中断源选择功能。事件输出控制寄存器AFIO_EVCR用于配置事件触发信号输出到指定GPIO引脚,实现外设间同步。复用功能重映射和调试I/O配置寄存器AFIO_MAPR,通过AFIO_MAPR的重映射位,可将外设功能从默认GPIO引脚映射到其他引脚,如USART1默认用PA9/10,重映射后可用PB6/7,灵活适配硬件布局。外部中断配置寄存器(4个)AFIO_EXTICRx

将外部中断线EXTI0~15绑定到具体GPIO端口。

由于EXTI控制器仅提供16条外部中断线EXTI0~EXTI15,因此需要通过AFIO模块中的外部中断配置寄存器AFIO_EXTICRx选择端口映射AFIO基地址为0x40010000

寄存器名称偏移地址复位值功能及关键位描述事件控制寄存器:AFIO_EVCR0x000x00000000RW:事件输出控制,选择事件信号的端口和引脚;D[3:0]:PIN[3:0],事件输出引脚选择,0000=Pin0,...,1111=Pin15,配合PORT选择具体引脚;D[6:4]:PORT[2:0],事件输出端口选择,000=PA,001=PB,...,100=PE;D7:EVOE,允许事件输出,1=Cortex的EVENTOUT将连接到由PORT[2:0]和PIN[3:0]选定的I/O口。复用重映射和调试I/O配置寄存器:AFIO_MAPR0x040x00000000RW:I/O复用重映射与调试引脚配置;通过设置该寄存器的相应位,可以改变引脚的默认复用功能,以满足不同应用场景的需求。外部中断配置寄存器1:AFIO_EXTICR10x080x00000000RW:配置外部中断线EXTIx与GPIO端口引脚的连接关系,x=0~3,每个引脚4位;D[15:0] :EXTIx[4x+3:4x]的外部中断线x映射,0000=PAx,0001=PBx,...,0100=PEx外部中断配置寄存器2:AFIO_EXTICR20x0C0x00000000RW:EXTI4~7外部中断线映射选择;D[15:0]:EXTIx+4[4x+3:4x],外部中断线x+4映射,配置同上外部中断配置寄存器3:AFIO_EXTICR30x100x00000000RW:EXTI8~11外部中断线映射选择;D[15:0]:EXTIx+8[4x+3:4x],外部中断线x+8映射,配置同上外部中断配置寄存器4:AFIO_EXTICR40x140x00000000RW:EXTI12~15外部中断线映射选择;D[15:0]:EXTIx+12[4x+3:4x],外部中断线x+12映射,同上6.9AFIO相关寄存器及关键位6.7AFIO复用功能编程实例

默认复用配置开启GPIO时钟、AFIO时钟和目标外设时钟;确认外设的默认引脚分配,如:USART1默认TX/RX在PA9/PA10;配置GPIO引脚为复用功能,输出引脚配置为复用推挽输出,速度一般设为50MHz,输入引脚配置为浮空输入或上拉/下拉输入,根据电路需要选择;初始化外设功能,配置对应外设的寄存器如波特率、模式、极性、分频等;使能外设;若使用中断或事件,需配置NVIC和EXTI相关寄存器如:默认复用为USART1的PA9、PA10引脚,需要使能PA组端口的GPIOA时钟、AFIO时钟和外设USART1的时钟,然后进行复用后的引脚功能配置,将PA9引脚复用为USART1_TX功能及复用推挽输出模式,最后进行外设功能的初始化和使能。代码如下:6.7AFIO复用功能编程实例//1.开启时钟RCC->APB2ENR|=(1<<2);//IOPAEN使能GPIOA时钟RCC->APB2ENR|=(1<<0);//AFIOEN使能AFIO时钟RCC->APB2ENR|=(1<<14);//USART1EN使能USART1时钟//2.配置PA9(TX)为复用推挽输出,50MHzGPIOA->CRH&=~(0xF<<4);//清空PA9配置位GPIOA->CRH|=(0xB<<4);//MODE9=11(50MHz),CNF9=10(复用推挽)//3.配置PA10(RX)为浮空输入GPIOA->CRH&=~(0xF<<8);//清空PA10配置位GPIOA->CRH|=(0x4<<8);//MODE10=00(输入),CNF10=01(浮空输入)//4.配置USART1USART1->BRR=0x1D4C;//波特率9600@72MHzUSART1->CR1|=(1<<13)|(1<<3)|(1<<2);//UE=1,TE=1,RE=1//现在USART1已可通过默认引脚(PA9/PA10)收发数据若软件已将GPIO引脚配置为对应外设的复用输出功能,而该外设未被激活,则此GPIO引脚的输出状态将不确定6.7AFIO复用功能编程实例2.重映射复用配置步骤:开启GPIO端口时钟,确保相关引脚可用;了解默认的外设引脚分配,明确哪些引脚是外设的默认复用端口;确定重映射后的引脚分配并根据需要选择重映射方案;开启AFIO模块及目标外设的时钟,保证重映射控制与外设功能可用;配置AFIO_MAPR寄存器,使能外设的重映射功能;将重映射后的GPIO引脚配置为复用功能,并完成外设功能初始化。6.7AFIO复用功能编程实例2.重映射复用配置如将USART1的默认引脚PA9、PA10重映射到发送引脚PB6和接收引脚PB7,具体步骤:使能GPIOB、USART1、AFIO时钟,配置寄存器AFIO_MAPR开启外设的重映射,进行重映射后的引脚功能配置及对应外设功能的初始化。重映射完成后,原默认引脚PA9、PA10不再作为USART1的收发引脚,可作为普通GPIO使用。PB6、PB7成为USART1的新的发送和接收引脚,承担通信功能。将USART1默认引脚重映射到PB6和PB7的具体代码如下:6.7AFIO复用功能编程实例USART_InitTypeDefUSART_InitStructure;NVIC_InitTypeDefNVIC_InitStructure;//使能GPIOB、USART1和AFIO时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_USART1|RCC_APB2Periph_AFIO,ENABLE);//开启USART1重映射GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);//配置PB6为USART1_TXGPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);//配置PB7为USART1_RXGPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;6.7AFIO复用功能编程实例GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOB,&GPIO_InitStructure);//USART1配置

USART_InitStructure.USART_BaudRate=9600;USART_InitStructure.USART_WordLength= USART_WordLength_8b;USART_InitStructure.USART_StopBits=USART_StopBits_1;

USART_InitStructure.USART_Parity=USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;

USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;

USART_Init(USART1,&USART_InitStructure);//使能USART1

USART_Cmd(USART1,ENABLE);}第6章作业熟悉GPIO的功能、结构和工作流程。列出并说明GPIO的输入模式和输出模式。说明GPIO引脚的最大灌电流、拉电流和承受的电压。熟悉GPIO寄存器的名称和功能。理解位带、位带区和位带别名区的含义。若操作GPIOB的PB1,请计算其位带别名区的映射地址,并编写代码。请画出利用GPIOB.1~GPIOB.7控制7个LED的电路并编写实现流水灯的程序。利用位带操作实现6题程序。请说明本章编程实例中延时程序中延时时间的计算方法。利用AltiumDesigner(AD)或Proteus软件绘制CKS32F103最小系统电路图。理解GPIO的引脚复用功能和意义,举例说明一种外设复用GPIO的引脚分配写出引脚复用的三种方式的名称及应用特点。熟悉AFIO寄存器的名称和功能。请写出GPIO默认复用功能和重映射SPI1复用功能两种情况下开启的时钟,说明其区别。请编写程序实现USART2默认引脚复用功能的程序。感谢观看CKS32F103微控制器教学课件07中断和事件简单来说,中断就是打断CPU当前正在做的事情,让它去处理更紧急的任务。就像这张图里的交警,当路口出现紧急情况时,他会中断正常的车流,优先处理特殊情况。嵌入式系统在运行过程中需要及时应对各种突发事件。外部设备可能引起引脚电平变化,如锅炉水位越限、电机温度异常、火焰传感器报警等,片上外设则可能产生计数器溢出、AD转换完成等信号。这些事件在安全生产中的紧急性和重要性各不相同,因此处理方式也有所区别当检测到锅炉水位低于下限时,系统会通过增大给水调节阀开度来提升液位,同时触发报警提示。而当电机温度传感器监测到温度超过设定值时,温度继电器则会触发联锁保护机制,立即切断电机电源、强制停机并启动散热装置,以避免温度持续升高导致绕组绝缘损坏或线圈烧毁。相比之下,电机过温保护的紧急程度明显高于水位越限。引言:为何需要中断与事件?轮询方式的弊端•效率低下:CPU不断循环查询事件状态,占用大量资源,导致其他任务无法及时执行。•实时性差:由于CPU有查询间隔,极易错过持续时间极短的信号脉冲或紧急事件。中断与事件的优势•中断(Interrupt):支持“主动上报”机制,打断CPU当前流程,即时响应处理,极大提升系统实时性。•事件(Event):纯硬件级信号联动,无需CPU介入即可直接触发DMA或外设操作,实现极致效率。为什么我们需要中断和事件?想象一下,如果CPU只能通过不断检查的方式来发现锅炉水位是否越限、电机温度是否异常、按键是否被按下等,会非常低效。中断和事件机制正是为了解决这个问题。中断让CPU能被事件主动通知,而事件则能实现硬件间的自动协同工作,两者共同构成了现代MCU高效运行的基础。基于ARMCortex-M内核的MCU,对紧急或重要状况的响应依赖中断和事件两种硬件触发机制。二者虽然都可以由片上外设或片外外设触发,但在触发后的处理方式和对系统的影响上存在显著差异。中断需要CPU介入并执行相应的中断服务程序,而事件则无需CPU参与即可由硬件直接完成后续动作7.1中断(Interrupt)和事件(Event)▍1.什么是中断?程序运行过程中,当发生特殊或异常事件时,CPU会暂时中止当前正在执行的程序,转而执行与异常相关的处理程序,待处理完成后再返回原来的位置继续运行。实时响应立即响应按键输入、定时器溢出等异步事件,保证实时性。提高效率无需主动“轮询”等待事件,通过被动通知的方式,最大化解放CPU资源。处理异常在系统运行过程中,快速处理硬件错误、非法指令等突发故障。7.1中断(Interrupt)和事件(Event)系统运行过程中能够引发中断的事件称为中断源。中断源通常以脉冲或电平的形式出现。中断源:分为外部中断源和内部中断源。外部中断源指来自MCU外部的事件,例如按键操作、传感器的报警信息、通信接口接收数据等。内部中断源指由MCU内部或片上外设产生的事件,如定时器溢出、ADC转换结束、系统异常、软件触发等。由外部中断源触发的中断称为外部中断,由内部中断源触发的中断称为内部中断。中断源7.1中断(Interrupt)和事件(Event)中断服务程序ISR

当某个紧急或重要事件触发中断时,CPU将跳转至用户编写的处理代码,该代码称为中断服务程序,即ISR。ISR需针对性处理特定中断事件,快速响应并高效执行,以应对高优先级任务ISR中的常见任务:包括清除中断标志、数据处理和紧急控制、状态更新等。清除中断标志是了避免中断反复触发。ISR的质量直接影响系统的稳定性,因此编写时需遵循代码尽量简短、减少嵌套、慎用全局资源和避免阻塞操作的原则7.1中断(Interrupt)和事件(Event)ISR设计时尽量遵循:尽量简短:ISR会中断原程序执行,过长的处理会增加系统延迟,尤其是实时系统。复杂逻辑应放在ISR之外,可在ISR中设置标志位通知主程序处理。减少嵌套:虽然Cortex-M支持高优先级中断打断低优先级中断的嵌套操作,但过多嵌套会增加栈空间消耗和调试难度。慎用全局资源:ISR访问全局变量时,需避免主程序与ISR的资源竞争,可通过关中断、使用互斥锁等方式。避免阻塞操作:ISR中禁止使用延时函数、等待外设响应等阻塞性操作,否则会导致其他中断无法及时响应。7.1中断(Interrupt)和事件(Event)中断处理过程:包括中断请求产生、CPU响应中断、保护现场与执行ISR、恢复现场与继续执行原程序。中断请求产生:外部或内部事件的中断源触发中断,并在中断使能的情况下向CPU发送中断请求信号,硬件将该中断请求挂起,同时置位中断标志。挂起指的是中断请求已经产生,但由于某种原因暂时未被CPU处理,处于等待状态的情况。

CPU响应中断:若CPU处于中断使能状态,即未屏蔽该中断,且当前正在执行的指令已完成,CPU将暂停原程序执行,转而响应中断。7.1中断(Interrupt)和事件(Event)保护现场与执行ISR:CPU首先保存原程序的上下文信息,如PC值、寄存器值等,通常存储于栈内存中,以防止后续操作覆盖关键数据。保护现场是确保中断处理完成后能正确恢复原程序运行的关键步骤。随后,CPU跳转至ISR入口地址执行相应的处理逻辑,这是中断处理的核心环节,由硬件自动完成以确保跳转的快速与准确。恢复现场与继续执行原程序:中断服务程序结束后,CPU从之前保存的上下文信息中恢复原程序状态,即恢复现场。恢复现场的作用与保护现场完全对应,将中断发生前保存的系统状态重新加载到CPU中,并根据保存的PC值返回原程序中断位置,继续执行后续指令7.1中断(Interrupt)和事件(Event)7.1中断(Interrupt)和事件(Event)中断优先级:基于紧急程度的分级机制称为中断优先级.为确保CPU能及时响应并处理系统中不同紧急程度的事件,需根据中断源的重要性、紧迫程度及实时性要求,为其划分不同的优先级级别.中断嵌套:高优先级中断对低优先级中断的抢占.如在计数器溢出中断发生后,CPU响应并执行其对应的ISR。此时检测到锅炉水位低于下限,而锅炉水位中断的优先级高于计数器溢出中断,CPU则立即保存当前计数器ISR的执行现场,并暂停其运行,转而进入锅炉水位ISR。当锅炉水位ISR执行完毕后,CPU再恢复之前保存的现场,继续完成计数器溢出ISR的执行7.1中断

和事件▍2.事件事件是嵌入式系统中一种特殊的触发机制,主要用于触发特定外设模块操作或唤醒内核,不引起CPU程序流程的跳转,因此也被称为非中断型事件。硬件级同步外设间直接触发,无需CPU介入,实现精准的时序同步,如定时器自动触发ADC转换。零CPU开销处理逻辑完全由硬件完成,响应速度极快,不占用宝贵的CPU资源去处理中断。低功耗唤醒可配置为从停机或待机等低功耗模式中唤醒系统,平衡系统性能与功耗需求。事件的触发逻辑与中断类似,均由外部信号或内部状态的变化触发,触发源称为事件源。3中断与事件的区别与联系与中断相比,事件没有对应的服务函数,也不涉及现场保存与恢复,能显著降低CPU负载,提升系统响应速度。因此事件机制特别适用于硬件间需直接联动、无需CPU参与中间环节的场景7.1中断

和事件中断(Interrupt)●触发对象:CPU(软件层面的响应)●CPU参与:需要,执行中断服务函数●响应路径:经NVIC仲裁,产生异常进入●延迟表现:相对较高(微秒级

μs)●典型用途:处理按键、串口等需CPU干预的任务事件(Event)●触发对象:DMA、ADC等其他硬件外设●CPU参与:不需要,纯硬件联动操作●响应路径:直接连接到目标外设,绕过CPU●延迟表现:极低(纳秒级ns),效率极高●典型用途:硬件模块间的自动同步与握手二者联系:同一个物理信号源(例如GPIO引脚的电平变化或定时器溢出),可同时被配置为触发中断(唤醒CPU处理逻辑)和事件(触发DMA传输数据),灵活满足复杂场景需求。7.1中断

和事件项目中断事件触发方式外部信号或内部状态变化触发外部信号或内部状态变化触发触发结果CPU跳转执行中断服务程序(ISR)直接驱动相关外设硬件操作CPU参与需要CPU介入,保存/恢复现场并执行ISR不需要CPU介入,全程由硬件完成程序支持必须编写对应的中断服务函数无需编写服务函数效率影响需保存/恢复现场,执行ISR,增加CPU负担提高系统效率,减轻CPU负担嵌套可能可设置优先级并允许中断嵌套不存在嵌套概念7.2CKS32F103中断系统特点Cortex-M3的核心组件嵌套向量中断控制器NVIC:与内核紧密耦合,负责统一管理所有的异常即内核异常和外设中断,可实现中断的启用与屏蔽、优先级分配、嵌套控制等,并支持低延迟响应及晚到中断,实现高优先级中断在低优先级处理期间到达时的高效处理。CKS32F103直接采用Cortex-M3内置的NVIC作为中断控制器,因此中断优先级管理、嵌套机制、低延迟响应等核心功能均由NVIC实现,与具体厂商无关。CKS32F103芯片厂商的主要工作是在外设层面将外部中断挂接到NVIC的中断通道,而具体的中断源数量、类型及在向量表中的分布位置,则由CKS32F103厂商定义和实现。7.2CKS32F103中断系统特点CKS32F103芯片中NVIC的特点:43个可屏蔽中断通道,除了16个Cortex™-M3的中断线;16个可编程的优先等级,使用了4位中断优先级;低延迟的异常和中断处理;电源管理控制;系统控制寄存器的实现;Cortex-M3内核与异常处理程序之间建立对应关系的关键是异常向量表。异常向量表相当于一套导航系统,通过固定的地址映射机制,实现对各类异常的快速定位、准确区分与统一管理,是保证嵌入式系统稳定运行的关键硬件结构7.3异常向量表(ExceptionVectorTable)中断映射:将外设产生的中断请求与处理器可识别的中断向量建立对应关系的过程异常向量表:反映中断映射关系,是ARM架构CPU中实现异常快速响应的关键数据结构。异常向量表中的每个元素对应一个异常处理程序的入口地址,用于在异常发生时,快速引导CPU跳转到对应的处理代码中断请求号IRQn:所有异常的唯一标识,分为内核异常向量和外设中断向量两部分。内核异常向量:由ARM官方定义,属于系统级内核异常。其IRQn编号为负数,在所有Cortex-M3处理器中固定不变,无厂商差异,优先级通常高于外设中断。例如Reset、NMI、HardFault、SysTick等。外设中断向量:由芯片厂商根据自身器件的外设资源进行定义,IRQn编号为非负数。7.3异常向量表(ExceptionVectorTable)异常/中断的入口地址当异常或者中断发生时,若CPU响应这些异常或者中断,需要获取相应异常或中断的中断服务程序入口地址,再由入口地址跳转到中断服务程序执行。对于CKS32F103,当某个中断被响应时,硬件会根据中断源的IRQn计算中断服务程序的地址,公式如下:中断服务程序地址=向量表基地址+(IRQn+16)×4CKS32F103的默认向量表基地址=0x00000000CKS的固件库文件

cs32f10x.h通过宏定义将IRQn号与宏名联系起来,编写中断服务程序时直接使用宏名即可。中断入口地址在启动代码文件中定义,如startup_cs32f10x_yy.s文件7.4片上外设的中断/事件机制片上外设中断的名称:由于中断服务程序名称与向量表中的入口地址强绑定,以便CPU通过向量表索引直接跳转至该函数名对应的地址,因此函数名称不允许随意修改。//cs32F10x.h中定义的中断请求编号TIM3_IRQn=29,/*!<TIM3globalInterrupt*/I2C1_EV_IRQn=31,/*!<I2C1EventInterrupt*/I2C1_ER_IRQn=32,/*!<I2C1ErrorInterrupt*/SPI1_IRQn=35,/*!<SPI1globalInterrupt*/USART1_IRQn=37,/*!<USART1globalInterrupt*/USART2_IRQn=38,/*!<USART2globalInterrupt*///startup_cks32f10x_yy.s中定义的中断服务程序名称TIM3_IRQHandlerI2C1_EV_IRQHandlerI2C1_ER_IRQHandlerSPI1_IRQHandlerUSART1_IRQHandlerUSART2_IRQHandler7.5外部中断/事件与通用GPIO映射CKS32F103提供19条独立的外部中断线EXTI0~EXTI18。每条EXTI线都用于将外部

GPIO引脚信号或内部特定外设信号映射为中断或事件请求,且同一时刻每条EXTI线仅能绑定一个输入信号源,确保触发逻辑无冲突。EXTI0~EXTI15为GPIO引脚的专用映射通道,解决GPIO引脚数量远多于EXTI线数量的扩展需求。CKS32F103的GPIO引脚多达80余个,远多于EXTI0~EXTI15的16条线,因此MCU通过功能复用AFIO的映射机制,保证任意GPIO引脚均可作为外部中断源或事件源。7.5外部中断/事件与通用GPIO映射

EXTI16~EXTI18为MCU内部特定外设信号的映射通道,仅连接与系统核心状态相关的外设,无法修改信号源,用于监测MCU关键运行状态并触发响应。电源电压调节器PVD映射到EXTI16,当电源电压低于阈值时,通过EXTI16产生中断或事件,处理电源异常。RTC闹钟事件映射到EXTI17,产生定时唤醒或触发中断信号。USB唤醒信号映射到EXTI18,处理USB模块的唤醒事件。19条中断/事件线分布EXTI0~15·GPIO输入对应芯片的GPIO引脚输入,是开发中处理按键、传感器等外部信号的最常用中断源EXTI线16连接到PVD(可编程电压监测器)输出,监测电源电压异常EXTI线17连接到RTC(实时时钟)闹钟事件,用于从停机/待机模式唤醒系统。EXTI线18连接到USB唤醒事件。7.5外部中断/事件与通用GPIO映射

GPIO与EXTI线的映射关系见图7‑2,EXTI0~EXTI15采用同序号GPIO引脚共享一条EXTI线的规则。若某个GPIO引脚序号已经做为外部中断源,则同序号的其它GPIO引脚不能再做为中断源。7.10外部中断/事件相关寄存器及关键位配置基地址为0x40010400寄存器名称偏移地址复位值功能及关键位描述中断屏蔽寄存器:EXTI_IMR0x000x00000000RW:设置EXTIx线是否产生中断请求,x=0~18;D[x]:MRx,对应EXTIx线的中断屏蔽位,1=允许,0=屏蔽;例如:MR0=1,允许EXTI0中断;事件屏蔽寄存器:EXTI_EMR0x040x00000000RW:设置EXTIx线是否产生事件请求,x=0~18;D[x]:MRx,对应EXTIx线的事件请求,1=允许,0=屏蔽;例如:MR0=1,允许EXTI0事件请求;上升沿触发选择寄存器:EXTI_RTSR0x080x00000000RW:设置EXTIx线上升沿触发,x=0~18;D[x]:TRx,对应EXTIx线的上升沿触发,1=允许,0=禁止;例如:TR0=1,允许EXTI0上升沿触发;下降沿触发选择寄存器:EXTI_FTSR0x0C0x00000000RW:设置EXTIx线下降沿触发,x=0~18;D[x]:TRx,对应EXTIx线的下降沿触发,1=允许,0=禁止;例如:TR0=1,允许EXTI0下降沿触发;软件中断事件寄存器:EXTI_SWIER0x100x00000000RW:设置EXTIx线软件中断,x=0~18;D[x]:SWIERx,当该位为0时,写1将设置EXTI_PR中相应的挂起位。如果在EXTI_IMR和EXTI_EMR中

温馨提示

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

评论

0/150

提交评论