您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 制造加工工艺 > 第4章_通用和复用IO功能
第4章通用和复用功能I/O(GPIO和AFIO)4.1GPIO基本配置•每个GPI/O端口有:–2个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),–2个32位数据寄存器(GPIOx_IDR,GPIOx_ODR),–1个32位置位/复位寄存器(GPIOx_BSRR),–1个16位复位寄存器(GPIOx_BRR)–1个32位锁定寄存器(GPIOx_LCKR)。4.1GPIO基本配置根据每个I/O端口的特定硬件特征,GPIO端口的每个位可以由软件分别配置成多种模式:–输入浮空–输入上拉–输入下拉–模拟输入–开漏输出–推挽式输出–推挽式复用功能–开漏复用功能I/O端口位的基本结构端口位配置表1上拉输入010下拉输入00输入不使用1浮空输入不使用00模拟输入不使用见下表1开漏(Open-Drain)输出不使用1101推挽式(Push-Pull)复用功能0或11开漏(Open-Drain)0或1011000推挽式(Push-Pull)通用输出PxODR寄存器MODE0MODE1CNF0CNF1配置模式MODE[1:0]意义00保留01最大输出速度为10MHz10最大输出速度为2MHz11最大输出速度为50MHz输出模式位4.2GPIO功能描述•4.2.1通用I/O(GPIO)–通用I/O的复位状态与配置–单独的位设置或位清除–外部中断/唤醒线–GPIO锁定机制1.通用I/O的复位状态与配置•复位期间和刚复位后,复用功能未开启,I/O端口被配置成浮空输入模式(CNFx[1:0]=01b,MODE[1:0]=00b).•复位后,JTAG引脚被置于输入上拉或下拉模式:–PA15:JTDI置于上拉模式–PA14:JTCK置于下拉模式–PA13:JTMS置于上拉模式–PB4:JNTRST置于上拉模式•复位后可以根据对I/O端口的使用进行再配置。1.通用I/O的复位状态与配置•当作为输出配置时,写到输出数据寄存器上的值(GPIOx_ODR)输出到相应的I/O引脚。可以以推挽模式或开漏模式使用输出驱动器。•(1)输出缓冲器被激活•(2)施密特触发输入被激活•(3)弱上拉和下拉电阻被禁止•(4)出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器输出配置:可配置成推挽模式或开漏模式例:将PC6-PC9引脚设置为输出推挽模式/*选择配置的引脚*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;/*选择引脚翻转的速度*/GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;/*选择输出是推挽模式*/GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;/*初始化引脚*/GPIO_Init(GPIOC,&GPIO_InitStructure);•当作为输入配置时,输入数据寄存器(GPIOx_IDR)在每个APB2时钟周期捕捉I/O引脚上的数据。所有GPIO引脚有一个内部弱上拉和弱下拉,它们可以被激活或不被激活。(1)输出缓冲器被禁止(2)施密特触发输入被激活(3)根据输入配置(上拉,下拉或浮动)的不同,弱上拉和下拉电阻被连接(4)对输入数据寄存器的读访问可得到I/O状态输入配置:可配置成浮空/上拉/下拉输入模式例:将GPIOA所有的引脚都设置为输入浮空模式/*选择配置的引脚*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;/*选择引脚翻转的速度*/GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;/*选择输入是浮空模式*/GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;/*初始化引脚*/GPIO_Init(GPIOA,&GPIO_InitStructure);2.单独的位设置或位清除•当对GPIOx_ODR的个别位编程时,软件不需要禁止中断:在单次APB2写操作里,可以只更改一个或多个位。•这是通过对“置位/复位寄存器”(置位复位寄存器是:GPIOx_BSRR,复位寄存器是:GPIOx_BRR)中想要更改的位写1来实现的。没被选择的位将不被更改。3、外部中断/唤醒线•所有端口都有外部中断能力,为了使用外部中断线,端口必须配置成输入模式。•更多的关于外部中断的信息,参考《STM3210xReference》:•6.2节:外部中断/事件控制器P836.2.3节:唤醒事件管理P84例:将GPIOC的第9引脚置成高电平GPIO_SetBits(GPIOC,GPIO_Pin_9);例:将GPIOA的第7、第8引脚置成低电平GPIO_ResetBits(GPIOA,GPIO_Pin_7|GPIO_Pin_8);例:将GPIOB的第9引脚配置成外部中断Line9/*连接EXTILine9到PB.09*/GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource9);/*设置EXTILine9为下降沿中断*/EXTI_InitStructure.EXTI_Line=EXTI_Line9;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);4、复用功能(AF)使用默认复用功能前必须对端口位配置寄存器编程。•对于复用输入功能,端口可以配置成输入模式(浮空、上拉或下拉)•对于复用输出功能,端口必须配置成复用功能输出模式(推挽或开漏)。•对于双向复用功能,端口位必须配置复用功能输出模式(推挽或开漏)。这时,输入驱动器被配置成浮空输入模式。复用功能配置:输入可配置成浮空/上拉/下拉输入模式输出可配置成推挽或开漏复用功能的模拟输入配置:输出缓冲器、施密特触发输入、弱上拉和下拉电阻被禁止,读取输入数据寄存器时值05软件重新映射I/O复用功能•为了使不同器件封装的外设I/O功能的数量达到最优,可以把一些复用功能重新映射到其他一些脚上。这可以通过软件配置相应的寄存器来完成。这时,复用功能就不再映射到它们的原始引脚上了。例:配置USART2引脚/*配置USART2Tx(PA.02)成辅助功能输出上拉*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(GPIOA,&GPIO_InitStructure);/*配置USART2Rx(PA.03)成辅助功能出入浮空*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA,&GPIO_InitStructure);6.GPIO锁定机制•锁定机制允许冻结IO配置。当在一个端口位上执行了所定(LOCK)程序,在下一次复位之前,将不能再更改端口位的配置。二、GPIO寄存器描述•端口配置低寄存器(GPIOx_CRL)(x=A..E)偏移地址:00h;复位值:44444444h•端口配置高寄存器(GPIOx_CRH)(x=A..E)偏移地址:04h;复位值:44444444h•端口输入数据寄存器(GPIOx_IDR)(x=A..E)偏移地址:08h;复位值:00000000h•端口输出数据寄存器(GPIOx_ODR)(x=A..E)偏移地址:0Ch;复位值:00000000h•端口位设置/复位寄存器(GPIOx_BSRR)(x=A..E)偏移地址:10h;复位值:00000000h•端口位复位寄存器(GPIOx_BRR)(x=A..E)偏移地址:14h;复位值:00000000h•端口配置锁定寄存器(GPIOx_LCKR)(x=A..E)偏移地址:18h;复位值:00000000h当执行正确的写序列设置了位16(LCKK)时,该寄存器用来锁定端口位的配置。位[15:0]用于锁定GPIO端口的配置。在规定的写入操作期间,不能改变LCKP[15:0]。当对相应的端口位执行了LOCK序列后,在下次系统复位之前将不能再更改端口位的配置。三、复用功能I/O配置(AFIO)•BXCAN复用功能重映射复用功能CAN_REMAP[1:0]=”00”CAN_REMAP[1:0]=”10”(1)CAN_REMAP[1:0]=”11”(2)CANRXPA11PB8PD0CANTXPA12PB9PD1(1)重映射不适用于36脚的封装(2)重映射只适用于100脚的封装•USART2复用功能重映射PD6PA3USART2_RXPD5PA2USART2_TXPD4PA1USART2_RTSPD3PA0USART2_CTSUSART2_REMAP=1(1)USART2_REMAP=0复用功能PA4PD7USART2_CK(1)只适用于100脚重映像例:将USART2的发送Tx和接收Rx进行软件重映射/*使能USART2引脚的软件映射*/GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);/*配置USART2Tx(PD.05)成辅助功能输出上拉*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(GPIOD,&GPIO_InitStructure);/*配置USART2Rx(PD.06)成辅助功能出入浮空*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOD,&GPIO_InitStructure);•TIM3复用功能重映射复用功能TIM3_REMAP[1:0]=00(没有重映像)TIM3_REMAP[1:0]=10(部分重映像)TIM3_REMAP[1:0]=11(完全重映像)(1)TIM3_CH1PA6PB4PC6TIM3_CH2PA7PB5PC7TIM3_CH3PB0PC8TIM3_CH4PB1PC9(1)只适用于64和100脚重映像例:对TIM3的通道1引脚进行配置,假设没有重映射,/*TIM3的通道1:辅助功能上拉输出*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);例:对TIM3的通道1引脚进行配置,假设部分重映射/*使能TIM3引脚的部分重映射*/GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);/*TIM3的通道1:辅助功能上拉输出*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed=G
本文标题:第4章_通用和复用IO功能
链接地址:https://www.777doc.com/doc-3220111 .html