3、初识stm32——GPIO

GPIO

 GPIO,通用I/O端口。
在嵌入式系统中,经常需要控制许多结构简单的外部设备或者电路,这些设备有的需要通过CPU控制,有的需要CPU提供输入信号。

 对设备的控制,使用传统的串口或者并口就显得比较复杂,所以,在嵌入式微处理器上通常提供了一种“通用可编程“I/O端口”,也就是GPIO。
 一个GPIO端口至少需要两位寄存器,一个做控制用的“通用IO端口控制寄存器”,还有一个是存放数据的“通用I/O端口数据寄存器”。
 数据寄存器的每一位是和GPIO的硬件引脚对应的,而数据的传递方向是通过控制寄存器设置的,通过控制寄存器可以设置每一位引脚的数据流向
STM32 芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及采集的功能。

STM32103VET6 GPIO引脚

 STM32103VET6总共有100个引脚,其中GPIO口有80个。
在这里插入图片描述
STM32F10x系列引脚分类

引脚分类 引脚说明
电源 (VBAT)、(VDD VSS)、(VDDA VSSA)、(VREF+VREF-)等
晶振 IO 主晶振 IO,RTC(实时时钟)晶振 IO
下载IO 用于JTAG下载的IO:JTMS、JTCK、JTDI、JTDO、NJTRST
BOOT IO BOOT0,BOOT1用于设置系统的启动方式
复位 IO NRST,用于外部复位
上面5部分IO组成单片机最小系统
32 专用器件接专用总线,如 I2C,SPI,SDIO,FSMC,DCMI等总线的器件要接到专用的IO
普通的元器件接到GPIO,比如蜂鸣器,LED,按键等需要接到普通GPIO口
如果还有剩下的IO,根据扩展需求置空或者引出

 每个GPIO端口都有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR),一个32位置位、复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR).

IO 端口位的基本结构

在这里插入图片描述

  1. IO引脚电压保护措施,当正常IO口电压低于VDD(3.3V),由于反向二极管,VDD向IO口、IO口向VSS均没有电流;当IO口电压略高于VDD时,电流流出VDD端;当IO口电压低于VSS时,电流由VSS流出IO口,从而保护了芯片内部电路。但是这个电路还不足以保护芯片被脉冲电流烧毁。
  2. 当数据写入ODR输出数据寄存器,输出控制确定两个MOS管高低电平,输出IO口是0 V还是3.3 V.
推挽输出
1
INT端 由ODR输出寄存器输出的1或者0,经过反相器变成0或者1。若经过反相器为0,则PMOS基极为0,Ug<Us,PMOS管导通(NMOS截止),则OUT电压等于VDD为3.3V;若经过反相器为1,则NMOS基极为1,Ug>Us,NMOS管导通(PMOS截止),则OUT电压等于0。寄存器输出1,则VDD向OUT推(灌)电流,寄存器输出0,NMOS接地端向OUT挽(拉)电流,高电平由VDD决定,低电平由VSS决定,故称推挽输出。优点效率比较高,电流大(可以直接点亮LED灯),驱动能力强
开漏输出
在这里插入图片描述
INT 输出0,经过反相器变为1,Ug>Us,NMOS管导通,OUT 输出0;INT 输出1,经过反相器变为0,NMOS管截止,OUT输出1。缺点:由于存在较大的上拉电阻,只能输出低于VDD的电平,不能输出高电平,电压由VDD和上拉电阻确定
  1. ODR端口输出数据寄存器
    &emsp32位,低16位有效,对应16个GPIO端口引脚。输出数据时候,可以直接修改ODR,也可以修改BSRR位设置/清除寄存器,低16位置位,写1有效,置1;高16位清0,写1有效,清零。还有BRR端口位清除寄存器,32位低16位有效,相当于BSRR寄存器的高16位。若同时清0置1,则置1有效。
  2. 复用功能输出:内容来自片上外设,如串口输出。
  3. IDR(INPUT DATA REGISTER)数据输入寄存器:32位低16位有效,只读,0:外部输入0; 1:外部输入1。
    在这里插入图片描述
    当IO口输入电流,到达位置1的复合开关,CRL被配置成上拉输入或者下拉输入,BSRR置位写1或者清除写1,置位或清除输出寄存器。电流TTL施密特触发器起门限作用,将高于TTL高电平2V的置1,低于TTL低电平1.2V的置0,然后输入IDR对应的位设为0,或者1。
  4. 复用功能输入,电流不经过IDR这条电路,进入外设寄存器。
  5. 模拟输入不经过触发器,比如ADC采集。(模拟输出DAC也不经过输出寄存器,直接输出到IO口)

端口配置低寄存器

在确定好使用哪些GPIO口之后,需要对GPIOx进行端口配置。32位端口配置低寄存器每两位控制一个GPIO口
在这里插入图片描述
比如控制GPIOB 0口输出,低四位设置成 00 01 :推挽输出,输出最大速度为10MHz ; GPIOB 1输入,4-7位设置成 00 00, 模拟输入模式

在这里插入图片描述
在这里插入图片描述

输出输入寄存器设置顺序

  • GPIO输出
  1. 选定GPIO口
  2. 配置为设置寄存器CRL(控制0-7位GPIO),CRH (控制8-15位GPIO,两个寄存器是一样的
  3. 控制输出高电平,低电平——ODR,BRR,BSRR
  • GPIO输入
  1. 确定是哪个输入方式……
发布了16 篇原创文章 · 获赞 1 · 访问量 883

猜你喜欢

转载自blog.csdn.net/qq_33866593/article/details/105642510