《【教学课件】第4章通用和复用IO功能.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第4章通用和复用IO功能.ppt(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第4章 通用和复用功能I/O(GPIO和AFIO)4.1 GPIO 基本配置每个 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.1 GPIO 基本配置根据每个 I/O 端口的特定硬件特征,GPIO 端口的每个位可以由软件分别配置成多种模式:输入浮空输入上拉输入下拉模拟输入开漏输出推挽式输出推挽式复用功能开漏复用功能 I/O
2、端口位的基本结构 端口位配置表 1 上拉输入0 1 0 下拉输入00 输入不使用1浮空输入不使用0 0 模拟输入不使用见下表 1 开漏(Open-Drain)输出不使用11 0 1 推挽式(Push-Pull)复用功能0 或 1 1 开漏(Open-Drain)0 或 1 0110 0 0 推挽式(Push-Pull)通用输出 PxODR寄存器MODE0 MODE1 CNF0 CNF1 配置模式MODE1:0 意义00 保留01 最大输出速度为10MHz 10 最大输出速度为2MHz 11 最大输出速度为50MHz 输出模式位 4.2 GPIO 功能描述4.2.1 通用 I/O(GPIO)通用
3、 I/O 的复位状态与配置 单独的位设置或位清除 外部中断/唤醒线 GPIO 锁定机制1.通用 I/O 的复位状态与配置复位期间和刚复位后,复用功能未开启,I/O端口被配置成浮空输入模式(CNFx1:0=01b,MODE1:0=00b).复位后,JTAG引脚被置于输入上拉或下拉模式:PA15:JTDI置于上拉模式 PA14:JTCK置于下拉模式 PA13:JTMS置于上拉模式 PB4:JNTRST置于上拉模式复位后可以根据对 I/O 端口的使用进行再配置。1.通用 I/O 的复位状态与配置当作为输出配置时,写到输出数据寄存器上的值(GPIOx_ODR)输出到相应的I/O引脚。可以以推挽模式或开
4、漏模式使用输出驱动器。(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.GP
5、IO_Mode=GPIO_Mode_Out_PP;/*初始化引脚*/GPIO_Init(GPIOC,&GPIO_InitStructure);当作为输入配置时,输入数据寄存器(GPIOx_IDR)在每个APB2时钟周期捕捉I/O引脚上的数据。所有 GPIO 引脚有一个内部弱上拉和弱下拉,它们可以被激活或不被激活。(1)输出缓冲器被禁止(2)施密特触发输入被激活(3)根据输入配置(上拉,下拉或浮动)的不同,弱上拉和下拉电阻被连接(4)对输入数据寄存器的读访问可得到I/O 状态 输入配置:可配置成浮空/上拉/下拉输入模式例:将GPIOA所有的引脚都设置为输入浮空模式/*选择配置的引脚*/GPIO_
6、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写操作里,可以只更改一个或多个位。这是通过对“置位/复位寄存器”(置位复位寄存器是:GPIO
7、x_BSRR,复位寄存器是:GPIOx_BRR)中想要更改的位写1 来实现的。没被选择的位将不被更改。3、外部中断/唤醒线 所有端口都有外部中断能力,为了使用外部中断线,端口必须配置成输入模式。更多的关于外部中断的信息,参考STM3210 xReference:6.2节:外部中断/事件控制器P83 节:唤醒事件管理P84例:将GPIOC的第9引脚置成高电平GPIO_SetBits(GPIOC,GPIO_Pin_9);例:将GPIOA的第7、第8引脚置成低电平GPIO_ResetBits(GPIOA,GPIO_Pin_7|GPIO_Pin_8);例:将GPIOB的第9引脚配置成外部中断Line9
8、/*连接 EXTI Line9 到 PB.09*/GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource9);/*设置 EXTI Line9 为下降沿中断*/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(&E
9、XTI_InitStructure);4、复用功能(AF)使用默认复用功能前必须对端口位配置寄存器编程。对于复用输入功能,端口可以配置成输入模式(浮空、上拉或下拉)对于复用输出功能,端口必须配置成复用功能输出模式(推挽或开漏)。对于双向复用功能,端口位必须配置复用功能输出模式(推挽或开漏)。这时,输入驱动器被配置成浮空输入模式。复用功能配置:输入可配置成浮空/上拉/下拉输入模式输出可配置成推挽或开漏复用功能的模拟输入配置:输出缓冲器、施密特触发输入、弱上拉和下拉电阻被禁止,读取输入数据寄存器时值0 5 软件重新映射I/O 复用功能为了使不同器件封装的外设I/O功能的数量达到最优,可以把一些复用
10、功能重新映射到其他一些脚上。这可以通过软件配置相应的寄存器来完成。这时,复用功能就不再映射到它们的原始引脚上了。例:配置USART2引脚 /*配置 USART2 Tx(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);/*配置 USART2 Rx(PA.03)成辅助功能出入浮空*
11、/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;复位值:4444 4444h端口配置高寄存器(GPIOx_CRH)(x=A.E)偏移地址:04h;复位值:444
12、4 4444h端口输入数据寄存器(GPIOx_IDR)(x=A.E)偏移地址:08h;复位值:0000 0000h端口输出数据寄存器(GPIOx_ODR)(x=A.E)偏移地址:0Ch;复位值:0000 0000h端口位设置/复位寄存器(GPIOx_BSRR)(x=A.E)偏移地址:10h;复位值:0000 0000h 端口位复位寄存器(GPIOx_BRR)(x=A.E)偏移地址:14h;复位值:0000 0000h端口配置锁定寄存器(GPIOx_LCKR)(x=A.E)偏移地址:18h;复位值:0000 0000h当执行正确的写序列设置了位16(LCKK)时,该寄存器用来锁定端口位的配置。位
13、15:0 用于锁定GPIO端口的配置。在规定的写入操作期间,不能改变LCKP15:0。当对相应的端口位执行了LOCK序列后,在下次系统复位之前将不能再更改端口位的配置。三、复用功能I/O配置(AFIO)BXCAN 复用功能重映射 复用功能CAN_REMAP1:0=”00”CAN_REMAP1:0=”10”(1)CAN_REMAP1:0=”11”(2)CANRX PA11 PB8 PD0 CANTX PA12 PB9 PD1(1)重映射不适用于36脚的封装(2)重映射只适用于100脚的封装 USART2 复用功能重映射 PD6 PA3 USART2_RX PD5 PA2 USART2_TXPD4
14、 PA1 USART2_RTSPD3 PA0 USART2_CTSUSART2_REMAP=1(1)USART2_REMAP=0 复用功能PA4PD7USART2_CK(1)只适用于100脚重映像例:将USART2的发送Tx和接收Rx进行软件重映射/*使能 USART2 引脚的软件映射*/GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);/*配置 USART2 Tx(PD.05)成辅助功能输出上拉*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;GPIO_InitStructure.GPIO_Speed=GPIO_Spe
15、ed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(GPIOD,&GPIO_InitStructure);/*配置 USART2 Rx(PD.06)成辅助功能出入浮空*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOD,&GPIO_InitStructure);TIM3 复用功能重映射 复用功能TIM3_REMAP1:0=00(没有重映像)TIM3_REMAP
16、1:0=10(部分重映像)TIM3_REMAP1:0=11(完全重映像)(1)TIM3_CH1 PA6 PB4 PC6 TIM3_CH2 PA7 PB5 PC7 TIM3_CH3 PB0 PC8 TIM3_CH4 PB1 PC9(1)只适用于64和100脚重映像例:对TIM3的通道1引脚进行配置,假设没有重映射,/*TIM3的通道1:辅助功能上拉输出*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Spe
17、ed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);例:对TIM3的通道1引脚进行配置,假设部分重映射/*使能 TIM3 引脚的部分重映射*/GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);/*TIM3的通道1:辅助功能上拉输出*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_I
18、nit(GPIOB,&GPIO_InitStructure);例:对TIM3的通道1引脚进行配置,假设完全重映射/*使能 TIM3 引脚的完全重映射*/GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);/*TIM3的通道1:辅助功能上拉输出*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_In
19、itStructure);四、AFIO寄存器描述事件控制寄存器(AFIO_EVCR)偏移地址:00h;复位值:0000 0000h复用重映射和调试I/O 配置寄存器(AFIO_MAPR)偏移地址:04h;复位值:0000 0000h外部中断配置寄存器1(AFIO_EXTICR1)偏移地址:08h;复位值:0000 0000h外部中断配置寄存器2(AFIO_EXTICR2)偏移地址:0Ch;复位值:0000 0000h外部中断配置寄存器3(AFIO_EXTICR3)偏移地址:10h;复位值:0000 0000h外部中断配置寄存器4(AFIO_EXTICR4)偏移地址:14h;复位值:0000 0000h