版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年化工厂安全基础知识
- 医院医保患者就医流程管理制度
- 公关服务公司客户档案管理制度
- 工业软件公司知识产权风险防控管理制度
- 医院中药房配药冷链药品管理手册(标准版)
- 教师招聘(中学)考试题库大全含答案34
- 军队文职-电工-电工仪器仪表及测量-强化练习一
- 招投标项目归档规范手册
- 公园垃圾分类回收管理手册
- 火灾现场初期扑救技巧指导手册
- 人民医院样本外送检测管理制度
- 2024劳动合同职业病危害补充协议
- 教科版小学科学三年级下册 期末测试卷附答案(达标题)
- 幼儿教育学心理学复习资料
- 《基础写作教程》 课件 第七章 散文
- 配电室运行维护投标方案(技术标)
- 痕迹检验练习测试卷
- (完整版)医疗器械网络交易服务第三方平台质量管理文件
- 大学英语深层语法
- 海尔太阳能代理商合同范本
- 机床数控技术PPT完整全套教学课件
评论
0/150
提交评论