当前位置:首页 >> 机械/仪表 >>

第4章


第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端口位的基本结构

端口位配置表
配置模式 通用 输出 推挽式 (Push-Pull) 开漏(OpenDrain) 推挽式 (Push-Pull) 开漏(OpenDrain) 模拟输入 浮空输入 输入 下拉输入 1 上拉输入 0 0 CNF1 CNF0 0 0 1 1 0 1 0 1 00 0 1 MODE1 01 10 11 见下表 MODE0 PxODR寄存器 0 或 1 0 或 1 不使用 不使用 不使用 不使用

复用 功能 输出

输出模式位
MODE[1:0] 00 01 10 11 意义 保留 最大输出速度为10MHz 最大输出速度为2MHz 最大输出速度为50MHz

4.2 GPIO 功能描述
? 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节:外部中断/事件控制器P83 6.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
/* 连接 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(&EXTI_InitStructure);

4、复用功能(AF) 使用默认复用功能前必须对端口位配置寄存器编 程。 ? 对于复用输入功能,端口可以配置成输入模式 (浮空、上拉或下拉) ? 对于复用输出功能,端口必须配置成复用功能输 出模式(推挽或开漏)。 ? 对于双向复用功能,端口位必须配置复用功能输 出模式(推挽或开漏)。这时,输入驱动器被配 置成浮空输入模式。

复用功能配置: 输入可配置成浮空/上拉/下拉输入模式 输出可配置成推挽或开漏

复用功能的模拟输入配置: 输出缓冲器、施密特触发输入、弱上拉和下拉 电阻被禁止,读取输入数据寄存器时值0

5 软件重新映射I/O 复用功能
? 为了使不同器件封装的外设I/O功能的数量 达到最优,可以把一些复用功能重新映射 到其他一些脚上。这可以通过软件配置相 应的寄存器来完成。这时,复用功能就不 再映射到它们的原始引脚上了。

例:配置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) 成辅助功能出入浮空 */ 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;复位值: 4444 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)时,该 寄存器用来锁定端口位的配置。位[15:0] 用于锁 定GPIO端口的配置。在规定的写入操作期间,不能 改变LCKP[15:0] 。当对相应的端口位执行了LOCK 序列后,在下次系统复位之前将不能再更改端口位 的配置。

三、复用功能I/O配置(AFIO)
? BXCAN 复用功能重映射 CAN_REMAP[1:0 CAN_REMAP[1:0]= CAN_REMAP[1:0] 复用功能 ]=”00” ”10”(1) =”11”(2) CANRX CANTX PA11 PA12 PB8 PB9 PD0 PD1

(1)重映射不适用于36脚的封装 (2)重映射只适用于100脚的封装

? USART2 复用功能重映射
复用功能 USART2_CTS USART2_RTS USART2_TX USART2_RX USART2_CK
(1)只适用于100脚重映像

USART2_REMAP = 0 PA0 PA1 PA2 PA3 PA4

USART2_REMAP = 1(1) PD3 PD4 PD5 PD6 PD7

例:将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_Speed_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_REMAP[1:0] = 00 (没有重映像) TIM3_REMAP[1:0] = 10 (部分重映像) TIM3_REMAP[1:0] = 11 ( 完全重映像)(1)

复用功能

TIM3_CH1 TIM3_CH2 TIM3_CH3 TIM3_CH4

PA6 PA7 PB0 PB1

PB4 PB5

PC6 PC7 PC8 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_Speed_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_Init(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_InitStructure);

四、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


相关文章:
第4章 参考答案
第4章 参考答案_理学_高等教育_教育专区。第4章 搜索策略部分参考答案 4.5 有一农夫带一条狼,一只羊和一框青菜与从河的左岸乘船倒右岸,但受到下列条件的 限制...
第4章参考答案
第4章参考答案_从业资格考试_资格考试/认证_教育专区。第四章参考答案 1.将一个数字与数组中的元素比较,如果该数字存在数组中,给出该 数字在数组中的位置;如果...
第4章作业解答
第4章作业解答_理学_高等教育_教育专区。《电磁场与天线 A》作业题解答 第 4 章 恒定电场与恒定磁场 4.1、4.2、4.3、4.8、4.9、4.14 4.1 电导率为 ? 的...
第4章作业
第4章作业_财会/金融考试_资格考试/认证_教育专区。计算机控制技术,课后习题答案第四章习题 4.1 离散化方法中的零阶保持器的计算公式是 D?z ? ? Z ?H ?s ...
第4章习题参考答案
第4 章习题参考答案(一) 、写出分子式为 C9H12 的单环芳烃的所有同分异构体并命名。 CH2CH2CH3 CH(CH3)2 CH3 CH2CH3 CH3 (1) CH3 (2) CH3 CH3 (...
第4章习题
第4章习题_理学_高等教育_教育专区。习题 4 4-1 已知 i1 ? 5 2 cos(...I?1 30? +1 (a) 题 4-1 图 (b) 4-2 已知元件 P 的正弦电压 u ?...
第4章作业
第4章作业_理学_高等教育_教育专区。第4章 作业 1、 (*重点)中盛公司 2000 年的销售额为 1 000 000 元,这已是公司的最大生产能力。假定 税后净利占销售额...
第4章作业参考答案.
第四章 一、单项选择 动态数列 1、关于发展水平的下列说法不正确的是 A、发展...( A ) A、103.3% B、102.8% C、98.6% D、105.3% 4、时期数列平均发展...
第4章 作业
第​4​章​ ​作​业 暂无评价|0人阅读|0次下载|举报文档 离​...R: 我去。 4.根据命题公式的定义和省略括号的约定,判定下列符号串是否为公式...
第4章习题答案
?8.03 第4章 技术经济评价指标与方法 54 则 IRR≈ i1 +=12%+ NPV1 (i2-i1 ) NPV1+ | NPV2 | 8.26 × 3%= 13.52% 8.26+8.03 由于 IRR >...
更多相关标签:
高二化学选修4第一章 | 符文工房4第三章 | 符文工房4第二章攻略 | 痴汉支配第4章 | 数码宝贝tri第4章 | 妈妈的悲惨刘强第4章 | 符文工房4第三章触发 | 究极风暴4第一章白屏 |