第6章 通用、复用及重映射IO_第1页
第6章 通用、复用及重映射IO_第2页
第6章 通用、复用及重映射IO_第3页
第6章 通用、复用及重映射IO_第4页
第6章 通用、复用及重映射IO_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

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

文档简介

第6章通用、复用及重映射I/O6.1通用、复用和重映射I/O的关系通用I/O:通用I/O比较容易理解,就是作为普通的输入输出引脚;复用I/O:有些I/O口不仅可以作为普通I/O口使用,还可以设置为ADC、SPI等引脚,当I/O设置为ADC的输入引脚时,就是使用了I/O的复用功能。一个I/O的复用功能可以为0个,也可以为多个,具体要看M3的型号。重映射I/O:重映射就是把外设默认的对应引脚重新定义到另一个引脚上边;下面以外设I2C1说明,I2C1的两个引脚I2C1_SCL、I2C1_SDA默认使用的是PB6、PB7,但是如果在开发设计时,PB6、PB7已经被使用,而我们又必须使用I2C1来进行数据传输,这时候,我们就要使用到了重映射,重映射后,I2C1_SCL和I2C_SDA分别对应PB8和PB9;这样,我们就可以使用PB8和PB9作为I2C1的引脚来进行通信;需要说明的是,并不是每一个外设都可以进行重映射,即使可以进行重映射,也不是可以重映射到任意引脚,这个在芯片设计时已经固定了,不同型号的芯片是不一样的;仍以I2C1为例,I2C1的重映射功能在36引脚芯片就不能使用,在非36引脚的芯片上边,也只能重映射到PB8和PB9这两个固定的引脚上边。复用和重映射功能解决了外设多,而I/O数量一定的矛盾,灵活动态使用复用和重映射功能能够使我们在一些产品的开发上边事半功倍,比如,我们可以在某些时刻将I2C1对应PB6、PB7,某些时刻对应PB8、PB9,这样涉及到通信的程序就无需进行改动,硬件上边就可以实现引脚的切换。6.2通用I/O寄存器描述6.2.1各种输入输出模式介绍模拟输入:一般是作为ADC采集时使用。上拉/下拉输入:引脚内部接上拉/下拉电阻后作为输入引脚;浮空输入:顾名思义,就是引脚既没有上拉也没有下拉,悬空作为输入,此时引脚为高阻态模式,当外部没有明确的高电平或者低电平输入时,引脚读出的0和1没有实际意义。M3芯片引脚输入内部结构如图6-1图6-1M3芯片输入引脚内部结构图(1)VDD_FT与VDD不同,它是容忍5V电平的特殊处理电源,不是所有的I/O都接VDD_FT开漏输出:就是I/O不输出电压,在低电平时接地,在高电平时类似浮空,需要外接上拉电阻,开漏输出一般在外接电压高于M3芯片电压时使用,当引脚容忍5V时,外接5V上拉,可以将输出高电平拉到5V,不能容忍5V的引脚作为开漏输出时意义不大,即使外接5V的上拉,输出高电平时仍然只能输出3.3V。推挽输出:这种模式下,I/O引脚通过MOS管进行输出放大,输出高电平时为3.3V,输出电流最大50mA,驱动能力比较强。M3芯片引脚输出内部结构如图6-2图6-2M3芯片输出引脚内部结构图(1)VDD_FT与VDD不同,它是容忍5V电平的特殊处理电源,不是所有的I/O都接VDD_FT6.2.2端口配置低寄存器GPIOx_CRL (x=A...E)每个I/O需要4位进行输入输出的配置,M3芯片每个寄存器是32位,所以一个寄存器只能配置8个引脚,M3芯片每组端口一般有16个I/O,所以,端口配置分高和低寄存器,高寄存器配置8~15引脚,低寄存器配置0~7引脚。偏移地址:0x00复位值:0x4444444431302928272625242322212019181716CNF7[1:0]MODE7[1:0]CNF6[1:0]MODE6[1:0]CNF5[1:0]MODE5[1:0]CNF4[1:0]MODE4[1:0]RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW1514131211109876543210CNF3[1:0]MODE3[1:0]CNF2[1:0]MODE2[1:0]CNF1[1:0]MODE1[1:0]CNF0[1:0]MODE0[1:0]RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW位31:3027:2623:2219:1815:1411:107:63:2CNFy[1:0]:端口x配置位(y=0…7)软件通过这些位配置相应的I/O端口在输入模式(MODE[1:0]=00):

00:模拟输入模式

01:浮空输入模式(复位后的状态)10:上拉/下拉输入模式

11:保留

在输出模式(MODE[1:0]>00):

00:通用推挽输出模式

01:通用开漏输出模式

10:复用功能推挽输出模式

11:复用功能开漏输出模式位29:2825:2421:2017:1613:129:85:41:0MODEy[1:0]:端口x的模式位(y=0…7)软件通过这些位配置相应的I/O端口。00:输入模式(复位后的状态)01:输出模式,最大速度10MHz10:输出模式,最大速度2MHz11:输出模式,最大速度50MHz6.2.3端口配置高寄存器GPIOx_CRH (x=A...E)偏移地址:0x04复位值:0x4444444431302928272625242322212019181716CNF15[1:0]MODE15[1:0]CNF14[1:0]MODE14[1:0]CNF13[1:0]MODE13[1:0]CNF12[1:0]MODE12[1:0]RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW1514131211109876543210CNF11[1:0]MODE11[1:0]CNF10[1:0]MODE10[1:0]CNF9[1:0]MODE9[1:0]CNF8[1:0]MODE8[1:0]RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW位31:3027:2623:2219:1815:1411:107:63:2CNFy[1:0]:端口x配置位(y=8…15)软件通过这些位配置相应的I/O端口在输入模式(MODE[1:0]=00):

00:模拟输入模式

01:浮空输入模式(复位后的状态)10:上拉/下拉输入模式

11:保留

在输出模式(MODE[1:0]>00):

00:通用推挽输出模式

01:通用开漏输出模式

10:复用功能推挽输出模式

11:复用功能开漏输出模式位29:2825:2421:2017:1613:129:85:41:0MODEy[1:0]:端口x的模式位(y=8…15)软件通过这些位配置相应的I/O端口。00:输入模式(复位后的状态)01:输出模式,最大速度10MHz10:输出模式,最大速度2MHz11:输出模式,最大速度50MHz6.2.4端口输入数据寄存器GPIOx_IDR(x=A...E)偏移地址:Ox08复位值:0x0000XXXX31302928272625242322212019181716保留1514131211109876543210RRRRRRRRRRRRRRRR位31:16保留,读出数据始终为0位15:0端口输入数据,这些位只读,读出值对应I/O状态6.2.5端口输出数据寄存器GPIOx_ODR(x=A...E)偏移地址:0x0C复位值:0x0000000031302928272625242322212019181716保留1514131211109876543210ODR15ODR14ODR13ODR12ODR11ODR10ODR9ODR8ODR7ODR6ODR5ODR4ODR3ODR2ODR1ODR0RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW在I/O作为输出状态下,设置该寄存器输出对应电平;在I/O作为输入状态下,设置该寄存器对应位作为上拉/下拉输入,1为上拉输入,0为下拉输入。位31:16保留,读出始终为0位15:0这些位可读可写6.2.6端口位设置/清除寄存器GPIOx_BSRR(x=A...E)偏移地址:0x10复位值:0x0000000031302928272625242322212019181716BR15BR14BR13BR12BR11BR10BR9BR8BR7BR6BR5BR4BR3BR2BR1BR0WWWWWWWWWWWWWWWW1514131211109876543210BS15BS14BS13BS12BS11BS10BS9BS8BS7BS6BS5BS4BS3BS2BS1BS0WWWWWWWWWWWWWWWW位31:16BRy:清除端口x的位y(y=0…15)这些位只能写入并只能以字(16位)的形式操作。

0:对对应的ODRy位不产生影响

1:清除对应的ODRy位为0注:如果同时设置了BSy和BRy的对应位,BSy位起作用。位15:0BSy:设置端口x的位y(y=0…15)这些位只能写入并只能以字(16位)的形式操作。

0:对对应的ODRy位不产生影响

1:设置对应的ODRy位为1单独操作GPIOx_ODR就可以完全控制I/O的输出了,但是有时候我们需要单独设置一个位来单独操作一个引脚,而又不影响其他引脚的输出状态,如果用GPIOx_ODR来实现这个功能;以PA3为例,单独设置PA3输出低电平,我们就需要这样写:unsignedintoldState;oldState=GPIOA_ODR; //先读出当前PAI/O状态oldState=oldState&(~(1<<3));//将第3位清0GPIOA_ODR=oldState; //重新赋值给GPIOA_ODR如果用GPIOA_BSRR,那这个操作就简单多了,实现同样的功能,写法如下:GPIOA_BSRR=((1<<3)<<16);//设置BR3为1,其他位都为06.2.7端口位清除寄存器GPIOx_BRR(x=A...E)偏移地址:0x14复位值:0x0000000031302928272625242322212019181716保留1514131211109876543210BR15BR14BR13BR12BR11BR10BR9BR8BR7BR6BR5BR4BR3BR2BR1BR0WWWWWWWWWWWWWWWW位31:16保留位15:0BRy:清除端口x的位y(y=0…15)这些位只能写入并只能以字(16位)的形式操作。

0:对对应的ODRy位不产生影响

1:清除对应的ODRy位为0GPIOx_BRR的功能和GPIOx_BSRR的高16位功能完全相同。6.2.8端口配置锁定寄存器GPIOx_LCKR(x=A...E)端口配置锁定寄存器,顾名思义,它的作用就是锁定I/O端口的配置,使锁定端口在下次复位之前都不能再更改配置。锁定I/O配置,需要先按一定时序执行LOCK序列,相当于一把钥匙,只有钥匙对了,才能开锁的原理;只有LOCK序列对了,才能进行锁定,否则锁定是无效的。偏移地址:0x18复位值:0x0000000031302928272625242322212019181716保留LCKK(RW)1514131211109876543210LCK15LCK14LCK13LCK12LCK11LCK10LCK9LCK8LCK7LCK6LCK5LCK4LCK3LCK2LCK1LCK0RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW位31:17保留位16LCKK:锁键

该位可随时读出,它只可通过锁键写入序列修改。

0:端口配置锁键位激活

1:端口配置锁键位被激活,下次系统复位前GPIOx_LCKR寄存器被锁住。

锁键的写入序列:写1->写0->写1->读0->读1最后一个读可省略,但可以用来确认锁键已被激活。

注:在操作锁键的写入序列时,不能改变LCK[15:0]的值。

操作锁键写入序列中的任何错误将不能激活锁键。

位15:0LCKy:端口x的锁位y(y=0…15)这些位可读可写但只能在LCKK位为0时写入。

0:不锁定端口的配置

1:锁定端口的配置

6.3复用和重映射对应引脚6.3.1重映射初探引脚重映射会用到一个寄存器:复用重映射和调试I/O配置寄存器(AFIO_MAPR),注意这是一个寄存器的名字,而不是两个寄存器。为了方便读者理解本节内容,先简单描述一下AFIO_MAPR寄存器,下个章节会对AFIO所有寄存器进行全面的讲解。小、中、大容量芯片复用重映射和调试I/O配置寄存器(AFIO_MAPR)31302928272625242322212019181716保留SWJ_CFG[2:0]保留ADC2_ETRGREG_REMAPADC2_ETRGINJ_REMAPADC1_ETRGREG_REMAPADC1_ETRGINJ_REMAPTIM5CH4_IREMAPWWWRWRWRWRWRW1514131211109876543210PD01_REMAPCAN_REMAP[1:0]TIM4_REMAPTIM3_REMAP[1:0]TIM2_REMAP[1:0]TIM1_REMAP[1:0]USART3_REMAP[1:0]USART2_REMAPUSART1_REMAPI2C1_REMAPSPI1_REMAPRWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW互联型芯片复用重映射和调试I/O配置寄存器(AFIO_MAPR)31302928272625242322212019181716保留PTP_PPS_REMAPTIM2ITR1_REMAPSPI3_REMAP保留SWJ_CFG[2:0]MII_RMII_SELCAN2_REMAPETH_REMAP保留TIM5CH4_IREMAPRWRWRWWWWRWRWRWRW1514131211109876543210PD01_REMAPCAN1_REMAP[1:0]TIM4_REMAPTIM3_REMAP[1:0]TIM2_REMAP[1:0]TIM1_REMAP[1:0]USART3_REMAP[1:0]USART2_REMAPUSART1_REMAPI2C1_REMAPSPI1_REMAPRWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW6.3.2把OSC32_IN/OSC32_OUT作为GPIO端口PC14/PC15当把LSE振荡器关闭时,可以把OSC32_IN/OSC32_OUT用作PC14/PC15,默认状态下,LSE打开,需要程序关掉LSE,才能配置为PC14/PC15。当关闭1.8V电压区(进入待机模式)或后备区域使用VBAT供电(不再有VDD供电)时,不能使用PC14/PC15的GPIO口功能;注:由于PC13、PC14、PC15使用电源开关进行供电,而这个电源开关只能吸收有限的电流(3mA),因此,这三个引脚在同一时间只能有一个引脚作为输出,且工作在2MHz模式下,不能作为电流源。6.3.3把OSC_IN/OSC_OUT作为GPIO端口PD0/PD1对于OSC_IN/OSC_OUT引脚来说,它的默认功能是作为晶振的输入输出引脚,复用功能才是作为GPIO;PD01_REMAP=0PD01_REMAP=1OSC_INPD0OSC_OUTPD16.3.4CAN1复用功能重映射CAN信号可以被映射到A、B、D端口,在36、48、64引脚封装的芯片上,没有端口D的重映射。1.在互联型产品里是AN_RX/AN_TX;其他带有单个CAN的产品里是CAN_RX/CAN_TX。2.重映射不适用与36引脚封装的芯片。3.当PD0和PD1没有被重映射到OSC_IN/OSC_OUT时,该重映射只适用于100和144引脚封装的芯片。复用功能(1)CAN_REMAP=00CAN_REMAP=10(2)CAN_REMAP=11(3)CAN1_RX或AN_RXPA11PB8PD0CAN1_TX或AN_TXPA12PB9PD16.3.5CAN2复用功能重映射在互联型产品中才有CAN2接口。复用功能CAN2_REMAP=0CAN2_REMAP=1CAN_RXPB12PB5CAN_TXPB13PB66.3.6JTAG/SWD复用功能重映射JTAG/SWD是调试端口,复位默认作为调试端口,要作为GPIO使用时,需要手动关闭JTAG或者SWD;调试接口如下:复用功能GPIO端口JTMS/SWDIOPA13JTCK/SWCLKPA14JTDIPA15JTDO/TRACESWOPB3JNTRSTPB4TRACECKPE2TRACED0PE3TRACED1PE4TRACED2PE5TRACED3PE6为了使用更多的I/O,就需要关掉JTAG,使用SWD,或者在产品开发结束后,要完全关掉JTAG或者SWD,就需要设置SWJ_CFG[2:0];SWJ_CFG[2:0]可能的调试端口SWJI/O引脚分配PA13/JTMS/SWDIOPA14/JTCK/SWCLKPA15/JTDIPB3/JTDO/TRACESWOPB4/NJTRST000JTAG+SWDI/O不可用I/O不可用I/O不可用I/O不可用I/O不可用001JTAG+SWD,但没有JNTRSTI/O不可用I/O不可用I/O不可用I/O不可用I/O可用010JTAG关闭SWD启用I/O不可用I/O不可用I/O可用I/O可用(1)I/O可用100JTAG关闭SWD关闭I/O可用I/O可用I/O可用I/O可用I/O可用其他禁用6.3.7ADC复用功能重映射此部分重映射只适用于大容量产品。ADC1外部触发注入转换复用功能重映射ADC1外部触发规则转换复用功能重映射复用功能ADC1_ETRGINJ_REMAP=0ADC1_ETRGINJ_REMAP=1ADC1外部触发注入转换

ADC1外部触发注入转换与EXTI15相连ADC1外部触发注入转换与TIM8_CH4相连

复用功能ADC1_ETRGREG_REMAP=0ADC1_ETRGREG_REMAP=1ADC1外部触发规则转换

ADC1外部触发规则转换与EXTI11相连ADC1外部触发规则转换与TIM8_TRGO相连

ADC2外部触发注入转换复用功能重映射ADC2外部触发规则转换复用功能重映射复用功能ADC2_ETRGINJ_REMAP=0ADC2_ETRGINJ_REMAP=1ADC2外部触发注入转换

ADC2外部触发注入转换与EXTI15相连ADC2外部触发注入转换与TIM8_CH4相连

复用功能ADC2_ETRGREG_REMAP=0ADC2_ETRGREG_REMAP=1ADC2外部触发规则转换

ADC2外部触发规则转换与EXTI11相连ADC2外部触发规则转换与TIM8_TRGO相连

6.3.8定时器复用功能重映射TIM5复用功能重映像(只适用于大容量和互联型产品)TIM4复用功能重映像复用功能TIM5CH4_IREMAP=0TIM5CH4_IREMAP=1TIM5_CH4TIM5的通道4连至PA3LSI内部时钟连至TIM5_CH4的输入作为校准使用

复用功能0TIM4_REMAP=0TIM4_REMAP=1(1)TIM4_CH1PB6PD12TIM4_CH2PB7

PD13

TIM4_CH3PB8

PD14

TIM4_CH4PB9

PD15

TIM3复用功能重映像1.只适用于64、100、144封装复用功能TIM3_REMAP[1:0]=00TIM3_REMAP[1:0]=10TIM3_REMAP[1:0]=11(1)TIM3_CH1PA6PB4PC6TIM3_CH2

PA7PB5PC7TIM3_CH3PB0PC8TIM3_CH4PB1PC9TIM2复用功能重映像1.不适用于36脚封装2.TIM2_CH1和TIM2_ETR共用一个引脚,但不能同时使用(因此在此使用这样的标记:TIM2_CH1_ETR)

复用功能TIM2_REMAP[1:0]=00TIM2_REMAP[1:0]=01TIM2_REMAP[1:0]=10TIM2_REMAP[1:0]=11(1)TIM2_CH1_ETR(2)PA0PA15

PA0PA15

TIM2_CH2PA1

PB3PA1

PB3TIM2_CH3

PA2

PB10

TIM2_CH4

PA3PB11

TIM1复用功能重映像1.只适用于100和144引脚封装2.不适用于36引脚封装复用功能TIM1_REMAP[1:0]=00TIM1_REMAP[1:0]=01TIM1_REMAP[1:0]=11(1)TIM1_ETRPA12PE7TIM1_CH1PA8PE9TIM1_CH2PA9PE11TIM1_CH3

PA10PE13TIM1_CH4

PA11PE14TIM1_BKINPB12(2)PA6PE15TIM1_CH1NPB13(2)PA7PE8TIM1_CH2NPB14(2)PA8PE10TIM1_CH3NPB15(2)PA9PE126.3.9USART复用功能重映射USART3重映像1.重映射只适用于64、100、144引脚2.重映射只适用于100、144引脚复用功能USART3_REMAP[1:0]=00USART3_REMAP[1:0]=01(1)USART3_REMAP[1:0]=11(2)

USART3_TXPB10PC10PD8USART3_RXPB11

PC11

PD9

USART3_CKPB12

PC12

PD10

USART3_CTSPB13

PD11

USART3_RTSPB14

PD12

USART2重映像1.重映射只适用于100、144引脚

复用功能USART2_REMAP=0USART2_REMAP=1(1)USART2_CTSPA0PD3USART2_RTSPA1

PD4

USART2_TXPA2

PD5

USART2_RXPA3

PD6

USART2_CKPA4

PD7

USART1重映像复用功能USART1_REMAP=0USART1_REMAP=1USART1_TXPA9PB6USART1_RXPA10

PB7

6.3.10I2C1复用功能重映射I2C1重映像复用功能I2C1_REMAP=0I2C1_REMAP=1(1)I2C1_SCLPB6PB8I2C1_SDAPB7

PB9

6.3.11SPI复用功能映射SPI3重映像,这个重映射只适用于互联型产品。复用功能SPI3_REMAP=0SPI3_REMAP=1SPI3_NSSPA15PA4SPI3_SCKPB3PC10SPI3_MISOPB4

PC11

SPI3_MOSIPB5

PC12

SPI1重映像复用功能SPI1_REMAP=0SPI1_REMAP=1SPI1_NSSPA4PA15SPI1_SCKPA5

PB3SPI1_MISOPA6

PB4

SPI1_MOSIPA7

PB5

6.3.12以太网复用功能重映射ETH重映像,只适用于互联型产品。复用功能ETH_REMAP=0ETH_REMAP=1RX_DV-CRS_DVPA7PD8RXD0PC4PD9

RXD1

PC5PD10

RXD2

PB0PD11

RXD3

PB1PD12

6.4重映射相关寄存器描述AFIO包括AFIO_EVCR(事件控制寄存器),AFIO_MAPR(复用重映射寄存器)和AFIO_EXTICRx(x=1...4)。在对AFIO寄存器进行读写前必须使能AFIO时钟,所以当使用GPIO的外部中断功能时,必须也要给AFIO提供时钟,参考外设时钟使能寄存器RCC_APB2ENR。6.4.1事件控制寄存器AFIO_EVCR偏移地址:0x00复位值:0x0000000031302928272625242322212019181716保留1514131211109876543210保留EVOEPORT[2:0]PIN[3:0]RWRWRWRWRWRWRWRW位31:8保留位7EVOE:允许事件输出

该位可由软件读写。当设置该位后,Cortex的EVENTOUT将连接到由PORT[2:0]和PIN[3:0]选定的I/O口。

位6:4PORT[2:0]:端口选择

选择用于输出Cortex的EVENTOUT信号的端口:

000:选择PA

001:选择PB

010:选择PC

011:选择PD

100:选择PE位3:0PIN[3:0]:引脚选择(x=A…E)选择用于输出Cortex的EVENTOUT信号的引脚:

0000:选择Px0

0001:选择Px1

0010:选择Px2

0011:选择Px30100:选择Px4

0101:选择Px5

0110:选择Px6

0111:选择Px71000:选择Px8

1001:选择Px9

1010:选择Px10

1011:选择Px111100:选择Px12

1101:选择Px13

1110:选择Px14

1111:选择Px156.4.2复用功能重映射寄存器AFIO_MAPR地址偏移:0x04复位值:0x00000000小、中、大容量芯片复用重映射和调试I/O配置寄存器(AFIO_MAPR)31302928272625242322212019181716保留SWJ_CFG[2:0]保留ADC2_ETRGREG_REMAPADC2_ETRGINJ_REMAPADC1_ETRGREG_REMAPADC1_ETRGINJ_REMAPTIM5CH4_IREMAPWWWRWRWRWRWRW1514131211109876543210PD01_REMAPCAN_REMAP[1:0]TIM4_REMAPTIM3_REMAP[1:0]TIM2_REMAP[1:0]TIM1_REMAP[1:0]USART3_REMAP[1:0]USART2_REMAPUSART1_REMAPI2C1_REMAPSPI1_REMAPRWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW互联型芯片复用重映射和调试I/O配置寄存器(AFIO_MAPR)31302928272625242322212019181716保留PTP_PPS_REMAPTIM2ITR1_REMAPSPI3_REMAP保留SWJ_CFG[2:0]MII_RMII_SELCAN2_REMAPETH_REMAP保留TIM5CH4_IREMAPRWRWRWWWWRWRWRWRW1514131211109876543210PD01_REMAPCAN1_REMAP[1:0]TIM4_REMAPTIM3_REMAP[1:0]TIM2_REMAP[1:0]TIM1_REMAP[1:0]USART3_REMAP[1:0]USART2_REMAPUSART1_REMAPI2C1_REMAPSPI1_REMAPRWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW6.4.3外部中断配置寄存器AFIO_EXTICR1AFIO_EXTICR只是将GPIO的外部中断引脚进行映射,如果要配置一个I/O口的外部中断,这个只是配置的其中一个寄存器;一个完整的外部中断要配置三个部分:1.中断引脚映射,也就是本部分讲解的寄存器;2.设置EXTI_IMR开启中断,设置EXTI_FTSR或者EXTI_RTSR来设中断的触发方式;参考外部中断部分。3.设置中断的优先级,参考NVIC寄存器部分。AFIO_EXTICR1只能设置0~3序号的引脚,因此一共需要4个这样的寄存器才能设置0~15序号的引脚。31302928272625242322212019181716保留1514131211109876543210EXTI3[3:0]EXTI2[3:0]EXTI1[3:0]EXTI0[3:0]RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW位31:16保留位15:0EXTIx[3:0]:EXTIx配置(x=0…3)用于选择EXTIx外部中断的输入源。0000:PA[x]引脚

0100:PE[x]引脚

0001:PB[x]引脚

0101:PF[x]引脚

0010:PC[x]引脚

0110:PG[x]引脚

0011:PD[x]引脚

6.4.4外部中断配置寄存器AFIO_EXTICR231302928272625242322212019181716保留1514131211109876543210EXTI7[3:0]EXTI6[3:0]EXTI5[3:0]EXTI4[3:0]RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW位31:16保留位15:0EXTIx[3:0]:EXTIx配置(x=4…7)用于选择EXTIx外部中断的输入源。0000:PA[x]引脚

0100:PE[x]引脚

0001:PB[x]引脚

0101:PF[x]引脚

0010:PC[x]引脚

0110:PG[x]引脚

0011:PD[x]引脚

6.4.5外部中断配置寄存器AFIO_EXTICR331302928272625242322212019181716保留1514131211109876543210EXTI11[3:0]EXTI10[3:0]EXTI9[3:0]EXTI8[3:0]RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW位31:16保留位15:0EXTIx[3:0]:EXTIx配置(x=8…11)用于选择EXTIx外部中断的输入源。0000:PA[x]引脚

0100:PE[x]引脚

0001:PB[x]引脚

0101:PF[x]引脚

0010:PC[x]引脚

0110:PG[x]引脚

0011:PD[x]引脚

6.4.6外部中断配置寄存器AFIO_EXTICR431302928272625242322212019181716保留1514131211109876543210EXTI15[3:0]EXTI14[3:0]EXTI13[3:0]EXTI12[3:0]RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW位31:16保留位15:0EXTIx[3:0]:EXTIx配置(x=12…15)用于选择EXTIx外部中断的输入源。0000:PA[x]引脚

0100:PE[x]引脚

0001:PB[x]引脚

0101:PF[x]引脚

0010:PC[x]引脚

0110:PG[x]引脚

0011:PD[x]引脚

6.5GPIO库函数GPIO_TypeDef和AFIO_TypeDef,在文件“stm32f10x_map.h”中定义如下:typedefstruct{vu32CRL;vu32CRH;vu32IDR;vu32ODR;vu32BSRR;vu32BRR;vu32LCKR;}GPIO_TypeDef;typedefstruct{vu32EVCR;vu32MAPR;vu32EXTICR[4];}AFIO_TypeDef;

主要库函数如下:1函数GPIO_DeInit功能描述:将外设GPIOx寄存器重设为缺省值2函数GPIO_AFIODeInit功能描述:将复用功能(重映射事件控制和EXTI设置)重设为缺省值3函数GPIO_Init功能描述:根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器4函数GPIO_StructInit功能描述:把GPIO_InitStruct中的每一个参数按缺省值填入5函数GPIO_ReadInputDataBit功能描述:读取指定端口管脚的输入6函数GPIO_ReadInputData功能描述:读取指定的GPIO端口输入7函数GPIO_ReadOutputDataBit功能描述:读取指定端

温馨提示

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

评论

0/150

提交评论