嵌入式系统设计(STM32)第3讲

上传人:go****e 文档编号:131188423 上传时间:2020-05-05 格式:PPT 页数:69 大小:803.50KB
返回 下载 相关 举报
嵌入式系统设计(STM32)第3讲_第1页
第1页 / 共69页
嵌入式系统设计(STM32)第3讲_第2页
第2页 / 共69页
嵌入式系统设计(STM32)第3讲_第3页
第3页 / 共69页
嵌入式系统设计(STM32)第3讲_第4页
第4页 / 共69页
嵌入式系统设计(STM32)第3讲_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《嵌入式系统设计(STM32)第3讲》由会员分享,可在线阅读,更多相关《嵌入式系统设计(STM32)第3讲(69页珍藏版)》请在金锄头文库上搜索。

1、第3讲GPIO GPIO Generalpurposeinput output 主要内容 3 1GPIO结构3 2GPIO寄存器3 3GPIO函数3 4GPIO编程举例3 5练习题3 6实验 GPIO的功能 1 最基本的功能是可以驱动LED 产生PWM 驱动蜂鸣器等 2 具有单独的位设置或位清除 编程简单 端口配置好后 只需GPIO SetBits GPIOx GPIO Pin x 就可以实现对GPIOx的Pinx位为高电平 GPIO ResetBits GPIOx GPIO Pin x 就可以实现对GPIOx的Pinx位为低电平 3 具有外部中断 唤醒能力 端口配置成输入模式时 具有外部中断

2、能力 4 具有复用功能 复用功能的端口兼有I O功能等 5 软件重新映射I O复用功能 为了使不同器件封装的外设I O功能的数量达到最优 可以把一些服用功能重新映射到其他一些引脚上 这可以通过软件配置到相应的寄存器来完成 6 GPIO口的配置具有锁定机制 当配置好GPIO口后 在端口位上执行了锁定 LOCK 可以通过程序锁住配置组合 在下一次复位之前 将不能再更改端口位的配置 3 1GPIO结构 I O端口位的基本结构图 钳位保护二极管 GPIO内部具有钳位保护二极管 其作用是防止从外部管脚Pin输入的电压过高或者过低 VDD正常供电是3 3V 如果从Pin输入的信号 假设任何输入信号都有一定

3、的内阻 电压超过VDD加上二极管D1的导通压降 假定在0 6V左右 则二极管D1导通 会把多于的电流引到VDD 而真正输入到内部的信号电压不会超过3 9V 同理 如果从Pin输入的信号电压比GND还低 则由于二极管D2的作用 会把实际输入内部的信号电压钳制在 0 6V左右 对于GPIO的配置种类有8种之多 1 GPIO Mode AIN模拟输入 2 GPIO Mode IN FLOATING浮空输入 3 GPIO Mode IPD下拉输入 4 GPIO Mode IPU上拉输入 5 GPIO Mode Out OD开漏输出 6 GPIO Mode Out PP推挽输出 7 GPIO Mode

4、AF OD复用开漏输出 8 GPIO Mode AF PP复用推挽输出 浮空输入 高阻输入 输入模式的结构比较简单 就是一个带有施密特触发输入 Schmitt triggeredinput 的三态缓冲器 U1 并具有很高的输入等效阻抗 施密特触发输入的作用是能将缓慢变化的或者是畸变的输入脉冲信号整形成比较理想的矩形脉冲信号 执行GPIO管脚读操作时 在读脉冲 ReadPulse 的作用下会把管脚 Pin 的当前电平状态读到内部总线上 InternalBus 在不执行读操作时 外部管脚与内部总线之间是隔离的 推挽输出 执行GPIO管脚写操作时 在写脉冲 WritePulse 的作用下 数据被锁存

5、到Q和 Q T1和T2构成CMOS反相器 T1导通或T2导通时都表现出较低的阻抗 但T1和T2不会同时导通或同时关闭 最后形成的是推挽输出 开漏输出 开漏输出只有下拉晶体管T1而没有上拉晶体管 同样 T1实际上也是多组可编程选择的晶体管 开漏输出的实际作用就是一个开关 输出 1 时断开 输出 0 时连接到GND 开漏输出结构没有内部上拉 因此在实际应用时通常都要外接合适的上拉电阻 通常采用4 7 10k 开漏输出能够方便地实现 线与 逻辑功能 即多个开漏的管脚可以直接并在一起使用 并统一外接一个合适的上拉电阻 就自然形成 逻辑与 关系 开漏输出的另一种用途是能够方便地实现不同逻辑电平之间的转换

6、 如3 3V到5V之间 只需外接一个上拉电阻 而不需要额外的转换电路 输入配置 当I O端口配置为输入时 输出缓冲器被禁止施密特触发输入被激活根据输入配置 上拉 下拉或浮动 的不同 弱上拉和下拉电阻被连接出现在I O脚上的数据在每个APB2时钟被采样到输入数据寄存器对输入数据寄存器的读访问可得到I O状态 输入浮空 上拉 下拉配置图 输出配置 当I O端口被配置为输出时 输出缓冲器被激活开漏模式 输出寄存器上的 0 激活N MOS 而输出寄存器上的 1 将端口置于高阻状态 P MOS从不被激活 推挽模式 输出寄存器上的 0 激活N MOS 而输出寄存器上的 1 将激活P MOS 施密特触发输入

7、被激活弱上拉和下拉电阻被禁止出现在I O脚上的数据在每个APB2时钟被采样到输入数据寄存器在开漏模式时 对输入数据寄存器的读访问可得到I O状态在推挽模式时 对输出数据寄存器的读访问得到最后一次写的值 I O端口位的输出配置图 返回 3 2GPIO寄存器 每个GPI O端口有 两个32位配置寄存器 GPIOx CRL GPIOx CRH 两个32位数据寄存器 GPIOx IDR GPIOx ODR 一个32位置位 复位寄存器 GPIOx BSRR 一个16位复位寄存器 GPIOx BRR 一个32位锁定寄存器 GPIOx LCKR GPIO端口的每个位可以由软件分别配置成多种模式 必须以字 3

8、2位 的方式操作这些外设寄存器 GPIOx BSRR和GPIOx BRR寄存器允许对任何GPIO寄存器的读 更改的独立访问 这样 在读和更改访问之间产生IRQ时不会发生危险 3 2GPIO寄存器 CRL端口配置低寄存器CRH端口配置高寄存器IDR端口输入数据寄存器ODR端口输出数据寄存器BSRR端口位设置 复位寄存器BRR端口位复位寄存器LCKR端口配置锁定寄存器EVCR事件控制寄存器MAPR复用重映射和调试EXTICR外部中断线路0 15配置寄存器 端口配置低寄存器GPIOx CRL x A E 复位值 0 x44444444 CNFy 1 0 端口x配置位 y 0 7 Portxconfi

9、gurationbits MODEy 1 0 端口x的模式位 y 0 7 Portxmodebits 端口位配置表 复位期间和刚复位后 复用功能未开启 I O端口被配置成浮空输入模式 CNFx 1 0 01b MODEx 1 0 00b 输出模式位 端口配置高寄存器 GPIOx CRH x A E 复位值 0 x44444444 CNFy 1 0 端口x配置位 y 8 15 Portxconfigurationbits MODEy 1 0 端口x的模式位 y 8 15 Portxmodebits 端口输入数据寄存器 GPIOx IDR x A E 复位值 0 x0000XXXX IDRy 15

10、 0 端口输入数据 y 0 15 Portinputdata 这些位为只读并只能以字 16位 的形式读出 读出的值为对应I O口的状态 端口输出数据寄存器 GPIOx ODR x A E 复位值 0 x00000000 ODRy 15 0 端口输出数据 y 0 15 Portoutputdata 这些位可读可写并只能以字 16位 的形式操作 注 对GPIOx BSRR x A E 可以分别地对各个ODR位进行独立的设置 清除 端口位设置 清除寄存器 GPIOx BSRR 复位值 0 x00000000 BRy 清除端口x的位y y 0 15 PortxResetbity 这些位只能写入并只能以

11、字 16位 的形式操作 0 对对应的ODRy位不产生影响 1 清除对应的ODRy位为0BSy 设置端口x的位y 0 对对应的ODRy位不产生影响 1 设置对应的ODRy位为1注 如果同时设置了BSy和BRy的对应位 BSy位起作用 端口位清除寄存器 GPIOx BRR 复位值 0 x00000000 BRy 清除端口x的位y y 0 15 PortxResetbity 这些位只能写入并只能以字 16位 的形式操作 0 对对应的ODRy位不产生影响 1 清除对应的ODRy位为0 端口配置锁定寄存器 GPIOx LCKR 复位值 0 x00000000 当执行正确的写序列设置了位16 LCKK 时

12、 该寄存器用来锁定端口位的配置 位 15 0 用于锁定GPIO端口的配置 在规定的写入操作期间 不能改变LCKy 15 0 当对相应的端口位执行了LOCK序列后 在下次系统复位之前将不能再更改端口位的配置 每个锁定位锁定控制寄存器 CRL CRH 中相应的4个位 LCKy 端口x的锁位y y 0 15 PortxLockbity 这些位可读可写但只能在LCKK位为0时写入 0 不锁定端口的配置 1 锁定端口的配置 端口配置锁定寄存器格式 GPIO寄存器结构 GPIO寄存器结构 GPIO TypeDef和AFIO TypeDef 在文件 stm32f10 x map h 中定义如下 寄存器编程举

13、例 voidLED Init void RCC APB2ENR 1CRL PE 0 PE 7输出高电平 APB2外设时钟使能寄存器 RCC APB2ENR 复位值 0 x00000000 IOPEEN 位6 IO端口E时钟使能 I OportEclockenable 由软件置 1 或清 0 0 IO端口E时钟关闭 1 IO端口E时钟开启 点亮灯GPIOC ODR 0 xfffffffe 点亮1个灯GPIOC BSRR 0 x00030000 点亮2个灯GPIOC BRR 0 x000C GPIO ResetBits GPIOC GPIO Pin 2 GPIO Write GPIOC 0 xff

14、ff GPIO WriteBit GPIOC GPIO Pin 3 Bit RESET 熄灭灯GPIOC ODR 0 xffffffff GPIOC BSRR 0 x00000003 GPIOC BSRR 0 x0000000C GPIO SetBits GPIOC GPIO Pin 2 GPIO Write GPIOC 0 xfff0 GPIO WriteBit GPIOC GPIO Pin 3 Bit SET 返回 3 3GPIO函数 GPIO DeInit将外设GPIOx寄存器重设为缺省值GPIO AFIODeInit将复用功能 重映射事件控制和EXTI设置 重设为缺省值GPIO Ini

15、t根据GPIO InitStruct中指定的参数初始化外设GPIOx寄存器GPIO StructInit把GPIO InitStruct中的每一个参数按缺省值填入GPIO ReadInputDataBit读取指定端口管脚的输入GPIO ReadInputData读取指定的GPIO端口输入GPIO ReadOutputDataBit读取指定端口管脚的输出GPIO ReadOutputData读取指定的GPIO端口输出 GPIO SetBits设置指定的数据端口位GPIO ResetBits清除指定的数据端口位GPIO WriteBit设置或者清除指定的数据端口位GPIO Write向指定GPIO

16、数据端口写入数据GPIO PinLockConfig锁定GPIO管脚设置寄存器GPIO EventOutputConfig选择GPIO管脚用作事件输出GPIO EventOutputCmd使能或者失能事件输出GPIO PinRemapConfig改变指定管脚的映射GPIO EXTILineConfig选择GPIO管脚用作外部中断线路 函数GPIO DeInit 功能 将外设GPIOx寄存器重设为缺省值 函数原形 voidGPIO DeInit GPIO TypeDef GPIOx GPIOx x可以是A B C D或者E 来选择GPIO外设 被调用函数 RCC APB2PeriphResetCmd 例 ResetstheGPIOAperipheralregisterstotheirdefaultresetvalues GPIO DeInit GPIOA 函数GPIO AFIODeInit 功能描述 将复用功能 重映射事件控制和EXTI设置 重设为缺省值函数原形 voidGPIO AFIODeInit void 被调用函数 RCC APB2PeriphResetCmd 例 Resetst

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 幼儿/小学教育 > 其它小学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号