Task10 笔记与总结

目录

一.GPIO基本原理:

1.GPIO的工作方式:

1) STM32 的 IO 口 可以由软件配置成如下 8 种模式:

2)3种最大翻转速度:

2.GPIO的基本结构:

1)I/O端口的基本结构:

 3.STM32引脚的说明:

1)引脚的数量:

2)引脚的作用:

二:相关寄存器的配置

1.每组GPIO端口的寄存器包括:

1) 下图为端口配置低寄存器:

2)下图为端口配置高寄存器:

3)下图为端口输入数据寄存器:

4)下图为端口输出数据寄存器:(非常重要)

5)下图为端口位设置/清除寄存器:

6)端口位清除寄存器:

三.STM32引脚说明:

1.端口复用功能

 2.端口重映射功能

 四:跑马灯硬件连接:

1.重要函数:

1个初始化函数:(选中是哪一个I/O口)

2个读取输入电平函数:

2个读取输出电平函数:

4个设置输出电平函数:

 五:手把手写跑马灯实验


一.GPIO基本原理:

1.GPIO的工作方式:

1) STM32 的 IO 口 可以由软件配置成如下 8 种模式:

1、输入浮空模式

在浮空输入的情况下那两个开关是不打开的 ,此时施密特触发器是打开的,这样电平就会传入输入数据寄存器,以此CPU就可以通过数据寄存器读取到外部输入的高级电平的值。

2、输入上拉模式

此时相较于输入浮空模式,上面的开关是被接通的,拉了一个电阻(大概是30-50K)到VDD ,其余步骤和输入浮空模式相同。

 例:在cmos芯片上,为了防止静电造成的破坏,不用的管脚不能悬空,一般接上拉电阻产生降低阻抗,提供泄荷通路。

3、输入下拉模式

 此时下连上的,上方电阻是不连上的,其余与浮空相似。

 例:为加大输出引脚的驱动能力,有的单片机管脚上也经常使用上拉电阻。

上拉就是将不确定的信号通过一个电阻嵌位在高电平!电阻同时起限流作用!下拉同理!

4、模拟输入模式

 此时以电压的模式输入而不是电平,枢密特触发器也会停止使用,通过模拟输入通道通入CPU。模拟输入是指传统方式的输入,数字输入是输入PCM数字信号,即0、1的二进制数字信号,通过数模转换,转换成模拟信号,经前级放大进入功率放大器,功率放大器还是模拟的。

5、开漏输出模式

 从最左边开始:如果在输出控制电路中输出1,N-MOS是关闭状态,那么高低电平则是由外部上拉或者下拉来决定的。但是如果在输出控制电路那里输出的是0,那么N-MOS板属于开启状态,这是I/O口的电平就会被N-MOS板拉到Vss,这时I/O口输出来的就是低电平。

 注:

  1. 一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。比如加上上拉电阻就可以提供TTL/CMOS电平输出等。(上拉电阻的阻值决定了逻辑电平转换的沿的速度 ,阻值越大,速度越低功耗越小,所以负载电阻的选择要兼顾功耗和速度。)
  2. OPEN-DRAIN提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。
  3. 只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma内)。

6、推挽输出模式

 若输出控制电器输出为1的话,P-MOS管会被导通,N-MOS管就会被截止,在I/O端就会输出1;若输出的是0,那么一切相反。

推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形方法任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小,效率高。输出即可以向负载灌电流。推拉式输出级即提高电路的负载能力,又提高开关速度。

7、推挽式复用功能模式

 通过复用功能相关的复用通道,其余与上个相同。

可以理解为GPIO口被用作第二功能时的配置情况(并非作为通用IO口使用)。

8、开漏复用功能模式

 来自片上的外设模块来决定的,其余与开漏输出模式相同。

可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用)。端口必须配置成复用功能输出模式(推挽或开漏)。


注:上电复位后,GPIO默认为浮空状态,部分特殊功能引脚为特定状态。

 

2)3种最大翻转速度:

   -2MHZ

   -10MHz

   -50MHz

3)每个 IO 口可以自由编程,但 IO 口寄存器必须要按 32 位字被访问。STM32 的很多 IO 口都 是 5V 兼容的,这些 IO 口在与 5V 电平的外设连接的时候很有优势.

2.GPIO的基本结构:

1)I/O端口的基本结构:

注:大部分I/O口都是可以容忍5V的(带FT标识的可以)。没有加FT的不行。

查看源图像

 3.STM32引脚的说明:

1)引脚的数量:

144叫脚的芯片: STM32F103ZET

 -  一共有7组IO

- 每组IO口有16个IO 

- 一共16X7=112个IO      GPIOA,GPIOB---GPIOG(从PA0到PA15

2)引脚的作用:

STM32的大部分引脚除了当GPIO使用外,还可以复用为外设功能引脚(比如串口)。

例如:PA9,PA10默认是I/O口功能,但也可以作为串口来作为发送和接收引脚。也可以作为定时器相应通道的引脚。

二:相关寄存器的配置

1.每组GPIO端口的寄存器包括:

两个32位配置寄存器(GPIOx_CRL ,GPIOx_CRH) ,

两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR),

一个32位置位/ 复位寄存器(GPIOx_BSRR),

一个16位复位寄存器(GPIOx_BRR),

一个32位锁定寄存器(GPIOx_LCKR)。

每个I/O端口位可以自由编程,然而I/O端口寄存器必须按32位字被访问(不允许半字或字节访问) 。每组IO口含下面7个寄存器。也就是7个寄存器,一共可以控制一组GPIO的16个IO口。

        -  GPIOx_CRL :端口配置低寄存器

        - GPIOx_CRH:端口配置高寄存器

        - GPIOx_IDR:端口输入寄存器

        - GPIOx_ODR:端口输出寄存器

        - GPIOx_BSRR:端口位设置/清除寄存器

        - GPIOx_BRR :端口位清除寄存器

        - GPIOx_LCKR:端口配置锁存寄存器

1) 下图为端口配置低寄存器:

 从PA0-PA7一共8个引脚,上下表同时看。

2)下图为端口配置高寄存器:

同低寄存器。

3)下图为端口输入数据寄存器:

4)下图为端口输出数据寄存器:(非常重要)

 设置为1的话输出高电平,输出为0的话,反之。可用来配置上拉还是下拉。

配置为1的话,是上拉;配置为0的话是下拉。

5)下图为端口位设置/清除寄存器:

 用高位,低位;0,1来控制产不产生影响以及是否清除。

6)端口位清除寄存器:

 

三.STM32引脚说明:

1.端口复用功能

STM32的大部分端口都具有复用功能。所谓复用,就是一些端口不仅仅可以做为通用IO口,还可以复用为一些外设引脚,比如PA9,PA10可以复用为STM32的串口1引脚。

--作用:最大限度的利用端口资源.

 2.端口重映射功能

就是可以把某些功能引脚映射到其他引脚。比如串口1默认引脚是PA9,PA10可以通过配置重映射映射到PB6,PB7.

--作用:方便布线.

注:u所有IO口都可以作为中断输入 。

 四:跑马灯硬件连接:

硬件连接图。

 GPIO输出模式:推挽输出。LED1输出的是0,使得两端的压差,导致两个灯的亮;若LED1输出的是1,输出的是高电平,那么久不会有亮的了。

1.重要函数:

1个初始化函数:(选中是哪一个I/O口)

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

作用:初始化一个或者多个IO口(同一组)的工作方式和速度。

              该函数主要是操作GPIO_CRL(CRH)寄存器,在上拉或者下拉的

              时候有设置BSRR或者BRR寄存器

   GPIOx: GPIOA~GPIOG

注意:外设(包括GPIO)在使用之前,几乎都要先使能对应的时钟。

2个读取输入电平函数:

1)uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

作用:读取某个GPIO的输入电平。实际操作的是GPIOx_IDR寄存器。

例如:

  GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5);//读取GPIOA.5的输入电平

2)uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

作用:读取某组GPIO的输入电平。实际操作的是GPIOx_IDR寄存器。

例如:

 GPIO_ReadInputData(GPIOA);//读取GPIOA组中所有io口输入电平

2个读取输出电平函数:

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

4个设置输出电平函数:

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);(在I/O口输出高电平)

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);(在I/O口输出低电平)

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

 五:手把手写跑马灯实验

使能 IO 口时钟。调用函数 RCC_APB2PeriphColckCmd();

     不同的IO组,调用的时钟使能函数不一样。

初始化IO口模式。调用函数GPIO_Init();
操作IO口,输出高低电平。

     GPIO_SetBits();

     GPIO_ResetBits();

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值