STM32八种GPIO模式理解

时隔好久,决定将STM32重新复习一遍,然后转向linux。

话不多说下面就是开始正文

上手STM32第一步就是得会配置工程

配置工程的教程有很多,就不多做笔记了,就列举一下初学过程中比较容易弄错的地方

在stm32的工程库中 stm32f10x_rcc.c 是必须要加的

 

在Define中USE_STDPERIPH_DRIVER,STM32F10X_HD 里面是英文符号的逗号 不是点

我觉得最好将 Use MicroLIB勾选,不然初学会出现一些问题(曾使用printf重定向时没有勾选,然后程序运行着就卡住了,困扰了我半天

然后就是测设工程是否建立成功。

我的测试代码如下

#include "stm32f10x.h"


int main()
{
    u32 i;
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
    
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//LED灯所接的IO口
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_Init(GPIOC,&GPIO_InitStructure);
    while(1)
    {
        GPIO_SetBits(GPIOC,GPIO_Pin_0);
        for(i=0;i<1000000;i++);
        GPIO_ResetBits(GPIOC,GPIO_Pin_0);
        for(i=0;i<1000000;i++);    
    } 
}

GPIO有八种输入输出方式:

浮空输入 GPIO_Mode_IN_FLOATING
上拉GPIO_Mode_IPU
下拉GPIO_Mode_IPD
模拟输入 GPIO_Mode_AIN

开漏输出GPIO_Mode_AF_OD
开漏复用GPIO_Mode_AF_OD
推挽式输出GPIO_Mode_Out_PP
推挽式复用功能GPIO_Mode_AF_PP

stm32 I/O口电路如图 输入驱动器的主要元件是TTL施密特(肖特基)触发器。这个触发器的主要作用是:设定电压阈值,超过/低于该电压,才可通过。

(1)浮空输入:

外部的电平信号通过左边编号1的I/O端口进入STM32,经过编号2的施密特触发器的整形送入编号3的“输入数据寄存器”,在“输入数据寄存器”的另一端,CPU可以随时读出I/O端口的电平状态。

适用场合:按键检测 串口RX1

(2)上拉输入

跟浮空输入模式不同的是上拉输入仅仅是在数据通道上部,接入了一个上拉电阻,并接到设备电压(VDD)。根据STM32的数据手册,这个上拉电阻阻值介于30K~50K欧姆。同样,CPU可以随时在“输入数据寄存器”的另一端,读出I/O端口的电平状态。

该输入模式中,上拉电阻的目的是为了保证在无信号输入时IO口的电平为高电平。同时,当信号输入为低电平时,IO口的电平应该也为低电平。如果没有上拉电阻,在没有外界输入的情况下输入端是悬空的,它的电平是未知的无法保证的,上拉电阻就是为了保证无信号输入时输入端的电平为高电平。同样还有下拉电阻它是为了保证无信号输入时输入端的电平为低电平。

适用场合:

(3)下拉输入

数据通道的下部,接入了一个下拉电阻,并接到电路共地端(VSS)。根据STM32的数据手册,这个下拉电阻阻值也是介于30K~50K欧姆。

适用场合:

(4)模拟输入

模拟通道输入的配置则更加简单,信号从左边的端口进入,从右边的一端直接进入ADC模块。 
这里看到所有的上拉、下拉电阻和施密特触发器,均处于断开状态,因此“输入数据寄存器”将不能反映端口上的电平状态,也就是说,模拟输入配置下,CPU不能在“输入数据寄存器”上读到有效的数据。这也是为什么我们在选择ADC采集时,不能通过直接读取GPIO输入数据寄存器来获得模拟电压值。而是必须读取ADC数据寄存器的值。

适用场合:应用ADC模拟输入,或者低功耗下省电 
 

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值