STM32-深入理解GPIO的8种工作模式

文章目录

一、GPIO中四个关键器件介绍

1.1、保护二极管

1.2、P-MOS管和N-MOS管

1.3、上拉电阻和下拉电阻

1.4、TTL肖特基触发器

二、GPIO的8种工作模式

2.1、模拟输入

2.2、浮空输入 

2.3、下拉输入 

2.4、上拉输入 

2.5、开漏输出

2.6、推挽输出 

2.7、复用开漏输出 

2.8、复用推挽输出 

三、推挽和开漏的总结

3.1、推挽结构和推挽电路

3.2、开漏知识

四、外设的GPIO配置

4.1、高级定时器TIM1/TIM8

4.2、通用定时器TIM2/3/4/5

4.3、USART

4.4、SPI 

4.5、I2S

4.6、I2C

4.7、BxCAN

4.8、USB

4.9、全速USB OTG引脚配置

4.10、SDIO

4.11、ADC/DAC

4.12、FSMC

4.13、其它I/O功能


一、GPIO中四个关键器件介绍

图(1)

1.1、保护二极管

        图(1)中①所示的为两个保护二极管。这两个保护二极管可以防止引脚外部过高或过低的电压输入,当引脚电压高于VDD时,上方的二极管导通,当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。尽管有这样的保护,并不意味着STM32的引脚能直接外接大功率驱动器件,如直接驱动电机,要么电机不转,要么导致芯片烧坏,必须要加大功率及隔离电路驱动。

1.2、P-MOS管和N-MOS管

        图(1)中②所示的为 P-MOS 管和 N-MOS 管。GPIO引脚线路经过两个保护二极管后,向上流向“输入模式”结构,向下流向“输出模式”结构。在输出模式部分,线路经过一个由P-MOS和N-MOS管组成的单元电路。这个结构使GPIO具有了“推挽输出”和“开漏输出”两种模式,这两种模式下面会详细介绍。

1.3、上拉电阻和下拉电阻

        图(1)中③所示的为上拉电阻和下拉电阻。其中VDD为I/O引脚和内部调压器(稳压)的电压,是设备的工作电压,STM32的数据手册为2.0v~3.6v,这里就当3.3V好了,无关紧要。VDD所连的电阻为上拉电阻,当开关打开时,其输出就是高电平。VSS为电路公共地端电压,一般接GND。VSS所连的电阻为下拉电阻,当开关打开时,其输出就是低电平。

1.4、TTL肖特基触发器

        图(1)中④所示的为TTL肖特基触发器。信号经过触发器后,模拟信号转化为0和1的数字信号。但是,当GPIO引脚作为ADC采集电压的输入通道时,用其“模拟输入”功能,此时信号不再经过触发器进行TTL电平转换。ADC外设要采集到的原始的模拟信号。补充:当输入电压高于正向阈值电压,输出为高;当输入电压低于负向阈值电压,输出为低;当输入在正负向阈值电压之间,输出不改变。 

二、GPIO的8种工作模式

GPIO ModeDescription
GPIO_Mode_AIN模拟输入
GPIO_Mode_IN_FLOATING浮空输入
GPIO_Mode_IPD下拉输入
GPIO_Mode_IPU上拉输入
GPIO_Mode_Out_OD开漏输出
GPIO_Mode_Out_PP推挽输出
GPIO_Mode_AF_OD复用开漏输出
GPIO_Mode_AF_PP复用推挽输出

2.1、模拟输入

图(2)

         模拟输入模式(GPIO_Mode_AIN)关闭了TTL肖基特触发器,不接上、下拉电阻,经由另一线路把电压信号传送到片上外设模块。如传送至ADC模块,由ADC采集电压信号。所以使用ADC外设的时候,必须设置为模拟输入模式。在模拟输入模式下,输出缓冲器被禁止,读取输入数据寄存器为0。             补充:类似地,当GPIO引脚用于DAC作为模拟电压输出通道时,此时作为“模拟输出”功能,DAC的模拟信号输出就不经过双MOS管结构,而是直接输出到引脚。

2.2、浮空输入 

图(3)

          浮空输入模式(GPIO_Mode_IN_FLOATING)在芯片内部既没有接上拉,也没有接下拉电阻,经由TTL肖基特触发器输入。配置成这个模式直接用电压表测量其引脚电压为1点几伏,这是个不确定值。由于其输入阻抗较大,一般把这种模式用于标准的通信协议如I2C、USART的接收端。在浮空输入模式下,输出缓冲器被禁止,出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器,对输入数据寄存器的读访问可得到I/O状态。

2.3、下拉输入 

图(4)

          下拉输入模式(GPIO_Mode_IPD),I/O端口的电平信号通过TTL肖基特触发器后,进入输入数据寄存器。在I/O端口悬空(在无信号输入)的情况下,输入端的电平可以保持在低电平;并且在I/O端口输入为高电平的时候,输入端的电平则为高电平。在下拉输入模式下,输出缓冲器被禁止,出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器,对输入数据寄存器的读访问可得到I/O状态。

2.4、上拉输入 

图(5)

        上拉输入模式(GPIO_Mode_IPU),I/O端口的电平信号通过TTL肖基特触发器后,进入输入数据寄存器。但是在I/O端口悬空(在无信号输入)的情况下,输入端的电平可以保持在高电平;并且在I/O端口输入为低电平的时候,输入端的电平则为低电平。 在上拉输入模式下,输出缓冲器被禁止,出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器,对输入数据寄存器的读访问可得到I/O状态。

2.5、开漏输出

图(6)

         开漏输出模式(GPIO_Mode_Out_OD),上方的P-MOS管完全不工作。如果我们控制输出为0,低电平,则P-MOS管关闭,N-MOS管导通,使输出接地,若控制输出为1(它无法直接输出高电平)时,则P-MOS管和N-MOS管都关闭,所以引脚既不输出高电平,也不输出低电平,为高阻态正常使用时必须外部接上拉电阻,等效电路见图(7)。它具有“线与”特性,也就是说,若有很多个开漏模式引脚连接到一起时,只有当所有引脚都输出高阻态,才由上拉电阻提供高电平,此高电平的电压为外部上拉电阻所接的电源的电压。若其中一个引脚为低电平,那线路就相当于短路接地,使得整条线路都为低电平。在开漏输出模式下,施密特触发输入被激活,弱上拉和下拉电阻被禁止,出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器,对输入数据寄存器的读访问可得到I/O状态(注意:I/O端口的电平不一定是输出的电平)。

图(7) 开漏电路

2.6、推挽输出 

图(8)

        推挽输出模式(GPIO_Mode_Out_PP),是根据这两个MOS管的工作方式来命名的。在该结构中输入高电平时,经过反向后,上方的P-MOS导通,下方的N-MOS关闭,对外输出高电平;而在该结构中输入低电平时,经过反向后,N-MOS管导通,P-MOS关闭,对外输出低电平。当引脚高低电平切换时,两个MOS管轮流导通,P管负责灌电流,N管负责拉电流,使其负载能力和开关速度都比普通的方式有很大的提高。推挽输出的低电平为0V,高电平为3.3V,推挽输出模式时的等效电路见图(9)。 在推挽输出模式下,施密特触发输入被激活,弱上拉和下拉电阻被禁止,出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器,对输出数据寄存器的读访问得到最后一次写的值(注意:此时I/O端口的电平一定是输出的电平)。

图(9) 推挽等效电路

2.7、复用开漏输出 

图(10)

          对于相应的复用模式,则是根据GPIO的复用功能来选择的,如果用在IC、SMBUS这些需要线与功能的复用场合,就使用复用开漏模式(GPIO_Mode_AF_OD)。 

        当I/O端口被配置为复用功能时:

  • 在开漏或推挽式配置中,输出缓冲器被打开
  • 内置外设的信号驱动输出缓冲器(复用功能输出)
  • TTL肖基特触发输入被激活
  • 弱上拉和下拉电阻被禁止
  • 在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器
  • 开漏模式时,读输入数据寄存器时可得到I/O口状态
  • 在推挽模式时,读输出数据寄存器时可得到最后一次写的值

2.8、复用推挽输出 

图(11)

         GPIO的引脚用作串口的输出,则使用复用推挽输出模式(注:输出的高低电平的来源,不是让CPU直接写输出数据寄存器,取而代之利用片上外设模块的复用功能输出来决定的)。

三、推挽和开漏的总结

3.1、推挽结构和推挽电路

        推挽结构一般是指两个参数相同的三极管或MOS管分别受两互补信号的控制,总是在一个三极管或MOS管导通的时候另一个截止。高低电平由输出电平决定。

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

        推挽输出模式一般应用在输出电平为0和3.3V而且需要高速切换开关状态的场合。在STM32的应用中,除了必须用开漏模式的场合,一般习惯使用推挽输出模式。

3.2、开漏知识

        开漏输出只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极。适合于做电流型的驱动,其吸收电流的能力相对强(20mA以内)。

        开漏输出一般应用在I2C、SMBUS通信等需要“线与”功能的总线电路中。除此之外,还用在电平不匹配的场合,如需要输出5V的高电平,就可以在外部接一个上拉电阻,上拉电源为5V,并且把GPIO设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出5V的电平,具体见图(12)。

图(12) 

四、外设的GPIO配置

4.1、高级定时器TIM1/TIM8

图(13)

4.2、通用定时器TIM2/3/4/5

图(14)

4.3、USART

图(15)

4.4、SPI 

图(16)

4.5、I2S

图(17)

4.6、I2C

图(18)

4.7、BxCAN

图(19)

4.8、USB

图(20)

 此图内容只适用于小容量、中容量和大容量产品

4.9、全速USB OTG引脚配置
 

图(21)

  

图(22)

  1.  此图内容只适用于互联型产品
  2. 如果另一个共享的外设要使用OTG_FS_VBUS引脚(PA9)或把它作为通用I/O口,必须激活PHY的断电模式(清除OTG_FS_GCCFG寄存器的位16)

4.10、SDIO

图(23)

4.11、ADC/DAC

图(24)

 ADC输入引脚必须配置为模拟输入

4.12、FSMC

图(25)

4.13、其它I/O功能

图(26)

  • 14
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: STM32L051C8T6是一款低功耗的32位微控制器,集成了 ARM Cortex-M0+内核。它是STMicroelectronics公司的产品之一,适用于各消费电子产品和低功耗应用。 在进行STM32L051C8T6代码开发时,需要首先了解其硬件特性和功能。该微控制器具有丰富的外设接口,包括GPIO、SPI、I2C、USART等。此外,它还拥有多个内部模块,如ADC、定时器、RTC等。开发者可以根据具体需求,灵活地配置和使用这些外设和内部模块。 在编写STM32L051C8T6代码时,一般按照以下步骤进行: 1. 硬件初始化:首先,需要对所需的外设进行初始化,通过配置相应的寄存器来设置其工作模式、时钟源、中断等。 2. 中断处理:如果需要使用中断来处理特定事件,可以编写相应的中断处理函数,并在初始化过程中使能中断。 3. 功能实现:根据具体的应用需求,编写相应的功能代码,如数据采集、通信、控制等。可以使用C/C++语言来编写代码,根据需要调用相应的库函数或自行编写函数实现所需功能。 4. 调试和测试:开发完成后,通过连接开发板的调试接口,使用调试器进行代码调试和测试。可以通过单步执行、断点调试等方法来验证代码的正确性和功能的稳定性。 在编写STM32L051C8T6代码的过程中,需要熟悉该微控制器的数据手册和参考手册,了解其寄存器的位域结构和功能说明。同时,也可以参考官方的示例代码和开发工具链的文档,以便更好地理解和使用该微控制器。 总之,STM32L051C8T6代码的编写是一个灵活而有挑战的过程,需要结合具体的应用需求和硬件特性,通过合理的设计和编码来实现所需功能。 ### 回答2: stm32l051c8t6是一款基于ARM Cortex-M0+内核的低功耗微控制器。它具有低功耗和丰富的外设功能,适用于各嵌入式系统应用。 编写stm32l051c8t6代码需要使用ST公司提供的开发工具和软件库。首先,我们需要安装Keil MDK开发工具,并导入STM32Cube软件包来获取相关的库文件和驱动程序。然后,创建一个新的项目并选择stm32l051c8t6作为目标芯片。 在编写代码之前,我们需要了解stm32l051c8t6的外设功能和寄存器设置。根据项目需求和功能要求,可以选择使用各外设,如GPIO、USART、SPI、I2C等。我们可以使用库函数来初始化和配置相应的外设,并使用相应的函数来操作外设的功能。 在编写代码时,我们需要注意操作寄存器的正确设置,例如设置引脚模式和配置外设参数。同时,还需要考虑到低功耗方面的相关设置,如配置睡眠模式和唤醒源。 对于代码的编写风格,可以根据个人偏好和项目要求来决定,但应遵循一些优秀的编码规范和风格。 最后,为了测试代码的功能和正确性,我们可以使用仿真器或者调试器来调试代码,并使用示波器或其他工具来监测外设的输出情况。 总的来说,编写stm32l051c8t6代码需要深入理解该芯片的特性和外设功能,以及掌握相关的开发工具和软件库。通过合理的编程和测试,我们可以实现各功能丰富的嵌入式系统应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风自在 流水潺潺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值