当前位置:文档之家› 第5章-数字输入输出系统设计(三版)

第5章-数字输入输出系统设计(三版)


5.2 数字逻辑电平及其转换
为何要进行逻辑电平转换?
因为越来越多的处理器为了节约和降低能耗,都把 电源电压降低了。
功率:P∝k×C×F×U2/R 这样不同电源供电的芯片之间进行连接时,逻辑电
平如果不一样,则必须导致信息交互的失败。 即使同电源供电不同逻辑器件如CMOS与TTL之间逻辑
电平也不致。 因此必须进行不同逻辑之间的转换。
GPIO_Write(GPIO_TypeDef* GPIOx, u16 PortVal)
读取GPIO端口输出
设置数据端口位 清除数据端口位 设置或者清除数据
端口位 向指定GPIO数据端
口写入数据
STM32F10x的GPIO操作步骤
一、初始化GPIO端口 1、用RCC_APB2PeriphClockCmd函数使能GPIO时钟 2、用GPIO_Init函数初始化GPIO端口 二、读GPIO端口数据 1、用GPIO_ReadInputDataBit函数读取指定GPIO引脚的电平状态 2、用GPIO_ReadInputData函数读取指定GPIO整个端口的16位数据 三、写GPIO端口数据 1、用GPIO_SetBits函数置位多个指定I/O引脚(高电平输出) 2、用GPIO_ResetBits函数复位多个指定I/O引脚(低电平输出) 3、用GPIO_WriteBit函数写指定一个I/O引脚高低电平 4、用GPIO_Write函数写指定一个完整GPIO端口16位数据
/*初始化GPIOD端口*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 ;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ;
GPIO_Init(GPIOA, &GPIO_InitStructure);
部灭。
初始化程序:
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA| RCC_APB2Periph_GPIOC
|RCC_APB2Periph_GPIOD, ENABLE); /*使能GPIOA,C,D端口时钟*/
STM32F10x的GPIO操作实例
【例5.1】假设PD2、PD3、PD4和PD7为推挽输出作为LED发光二极管(LED1~LED4)
输出控制,0亮,1灭,PD11、PD12、PC13和PA0为上拉输入,作为KEY1~KEY4四个
按键输入,设置各PORTA、PORTC和PORTD工作频率为10MHz出。并让LD1~LD4全
GPIO_Init(GPIOD, &GPIO_InitStructure);
/*初始化GPIOD端口*/
GPIO_SetBits(GPIOD,GPIO_Pin_2|GPIO_Pin_3| GPIO_Pin_4| GPIO_Pin_7|);
/*PD2:LED1、PD3:LED3、PD4:LED3、PD7:LED4全为1灭*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11|GPIO_Pin_12;
/*PD11/12输入*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;/*高阻输入*/
GPIO_Init(GPIOD, &GPIO_InitStructure);
0.8V VIL
0.8V
VOL
0.4V VOL
0.5V
STM32F10x的GPIO配置寄存器
MODE:GPIO工作模式选择 00输入,01为10MHz输出,10为2MHz输出,11为50MHz输出;
CNF:(1)MODE=00时,作为输入模式选择 00 模拟输入 01高阻输入 10上下拉输入 11保留 (2)MODE!=00时,作为输出模式选择 00推挽输出 01开漏输出 10复用推挽输出 11复用开漏输出。
GPIO端口保护措施
GPIO作为输入输出基本端口直接与外界相连接,由于外 部GPIO引脚受到环境及外部连接的器件的影响,使 GPIO引脚上呈现的信号干扰很多,如受到强干扰尖脉 冲的侵入,容易造成引脚的损坏,因此当今嵌入式微 控制器的GPIO引脚已在内部均加上了一定的保护措施。
主要有两种形式的保护: (1)采用二极管钳位的方式来保护 (2)采用ESD器件的方式保护。
STM32F10x的GPIO操作函数
GPIO函数名
原型
功能
GPIO_Init
GPIO_Init(GPIO_TypeDef* GPIOx,GPIO_InitTypeDef* GPIO_InitStruct)
初始化GPIOx
GPIO_ReadInputDataBit GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
U4
U3
U5
输入 数据
强上拉
很弱上拉
弱上拉 外部引脚
U2
U1
GPIO的上拉和下拉
GPIO的引脚内部可配置为上拉或下拉,如果内部没有配置方式,则可以 外接上拉电阻或下拉电阻。所谓上拉指的是引脚与电源VDD或VCC之 间接一个大小100K左右的电阻,下拉指的是引脚与负电源VSS或地 GND之间接一个100K左右的电阻。
(3.0V~3.6V) (3.0V~3.6V)
LVCMOS
3.3V
3.3V
VOH
3.2V
VOH
2.4V
(2.3V~2.7V) 2.5V
LVCMOS (1.6V~2.0V)
VIH
2.0V VIH
2.0V VOH
2.0V
1.8V
VIH
1.7V
VOH
1.35V
VIL
0.8V VIL
0.7V VIL
0.7V
数字信号的逻辑电平
4000 CMOS (4.5V~5.5V)
5.0V
74HC CMOS (4.5V~5.5V)
5.0V
74HCT CMOS (4.5V~5.5V) 5.0V
VOH
4.6V VOH
4.4V VOH
4.4V
74 TTL (4.5V~5.5V)
5.0V
74LS TTL (4.5V~5.5V)
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_7;//PD2/3/4/7入 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; /*速度10MHz*/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /*推挽输出*/
V
VIH
2.0V
VIL
1.5V
VIL
1.0V VIL
0.8V
VOL
0.05V VOL
0.1V VOL
0.1V
0V
0V
0V
VOH
2.7V
VOH
2.4V
VIH
2.0V VIH
2.0V
VIL
0.8V VIL
0.8V
VOL
0.4V VOL
0.5V
0V
0V
LVTTL
LVCMOS
VIH VIL
1.26V 0.6V
VOL
0.4V
VOL
0.1V VOL
0.1V VOL
0.1V
0V
0V
0V
0V
数字信号的逻辑电平
4000 CMOS (4.5V~5.5V)
5.0V
74HC CMOS (4.5V~5.5V)
5.0V
74HCT CMOS (4.5V~5.5V) 5.0V
VOH 4.6V VOH 4.4V VOH 4.4V
GPIO端口中断触发方式
ARMCortex-M系列包括M0和M3这两个典型系列微控制器生产厂家对GPIO 均配置有中断输入方式,可实现单边沿触发(只在上升沿触发或只在下 降沿触发)、双边沿触发(上升沿和下降沿均触发)以及电平触发(高电 平或低电平触发)的多种中断输入方式。
STM32F10x GPIO引脚
GPIO端口二极管和ESD保护
(a)二极管钳位保护 (b)ESD专用器件保护
GPIO端口的中断
为什么需要GPIO中断呢?
普通的GPIO端口作为输入端口时,可随时读取其状 态,但微控制器在处理其它事务时,靠不断查询 引脚的状态,效率是低下的,解决这一问题的有 效方法是采用中断机制。当引脚有变化时产生一 个中断请求,微控制器在中断服务程序中去做相 应引脚中断的处理任务,从而提高了效率。
读取端口管脚的输 入
GPIO_ReadInputData
GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
读取GPIO端口输入
GPIO_ReadOutputDataBit GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
读取端口管脚的输 出
GPIO_ReadOutputData GPIO_SetBits GPIO_ResetBits GPIO_WriteBit
GPIO_Write
GPIO_ReadOutputData(GPIO_TypeDef* GPIOx) GPIO_SetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin) GPIO_ResetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin) GPIO_WriteBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin, BitAction BitVal)
相关主题