GPIO工作必会

目录

GPIO的作用

1、作为输出引脚,控制LED灯的亮灭

GPIO配置

 GPIO输出流程

2、输入中断信号

TBD--外设等复杂操作

输入输出模式

1、4种输入模式

施密特触发器:

2、4种输出模式

操作GPIO


GPIO的作用

General Purpose Input Output,通用输入输出端口,通过写软件来控制

1、作为输出引脚,控制LED灯的亮灭

GPIO电平的控制:最终变成了向这个GPIO的硬件寄存器写入数据,硬件的状态会跟随寄存器的数据改变而改变。

GPIO配置

伪代码:
配置某一个IO口为通用推挽输出模式所需要的GPIO寄存器
{
	1.对应位的MODER配置为01——————————通用输出
	2.对应位的OTYPER配置为0——————————推挽输出
	3.对应位的OSPEEDR配置为(01)—————25Mhz中速(这个不一定,按照自己的需求)
	4.对应位的PUPDR配置为00——————————无上下拉
	5.对应位的ODR    配置为0——————————输出低电平; 配置为1——————————输出高电平
}

 GPIO输出流程

  1. 启用GPIO时钟:首先,需要启用相应GPIO端口的时钟,以便能够对GPIO进行配置和控制。通过在RCC寄存器中启用相应的GPIO时钟。

  2. 配置GPIO引脚:使用GPIO_Init()函数配置GPIO引脚的模式(输出模式)、速度、上拉/下拉等参数。通常需要指定引脚号、模式、速度、上拉/下拉方式等。

  3. 控制GPIO输出:使用HAL_GPIO_WritePin()函数控制GPIO的输出电平,可以将引脚设置为高电平(GPIO_PIN_SET)或低电平(GPIO_PIN_RESET)。

  4. 控制输出电平:根据应用需求,可以定时或根据条件更改GPIO引脚的输出电平,从而控制连接的外部设备或器件。

// 启用GPIO时钟
__HAL_RCC_GPIOB_CLK_ENABLE();

// 配置GPIO引脚
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_0; // 配置为输出引脚
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出模式
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 低速
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

// 控制GPIO输出
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // 设置引脚为高电平

用于将GPIO的输出状态与硬件寄存器的特定位相关联,以实现更底层的控制。可能需要使用指针和位操作来确切地控制寄存器的位。这个操作通常是在需要直接操作硬件寄存器的情况下进行,以执行更精细的控制或配置。

启用GPIO时钟:首先,需要启用相应GPIO端口的时钟,以便能够对GPIO进行配置和控制。通过在RCC寄存器中启用相应的GPIO时钟。

配置GPIO引脚:使用GPIO_Init()函数配置GPIO引脚的模式(输出模式)、速度、上拉/下拉等参数。通常需要指定引脚号、模式、速度、上拉/下拉方式等。

控制GPIO输出:使用HAL_GPIO_WritePin()函数控制GPIO的输出电平,可以将引脚设置为高电平(GPIO_PIN_SET)或低电平(GPIO_PIN_RESET)。

访问硬件寄存器:在需要控制硬件寄存器时,可以通过操纵硬件寄存器的位来实现。硬件寄存器的访问可能需要使用指针和位操作进行。

修改硬件寄存器位:根据需要,将GPIO的输出电平状态与硬件寄存器的特定位关联,以控制硬件逻辑。

2、输入中断信号

通过适当配置GPIO输入中断信号,可以实现灵活的外部事件触发机制。

当满足预设的条件时,比如引脚状态发生变化或特定信号到达时,将触发中断请求,处理器会停止当前执行的任务,转而执行与该中断相关的中断服务程序。

这种机制允许处理器在没有轮询GPIO状态的情况下,即在等待外部事件发生的同时继续执行其他任务。

通过GPIO输入中断信号,可以实现以下功能

  1. 外部事件响应:通过监控GPIO输入引脚状态变化,实现对外部事件的实时响应,例如按键点击、传感器信号变化等。

  2. 节省处理器资源:在等待外部事件时,通过中断方式处理GPIO输入信号,避免了持续轮询GPIO状态,节省了处理器资源。

  3. 实现实时任务调度:通过确定中断优先级和处理顺序,可以实现不同优先级的中断服务程序,实现实时任务的调度和响应。

GPIO输入中断信号的流程通常包括以下步骤:

  1. 初始化GPIO引脚作为输入:首先,需要将相应的GPIO引脚配置为输入模式,以便接收外部信号。通过设置引脚模式为输入模式、上拉/下拉配置等来初始化GPIO引脚。

  2. 配置外部中断触发条件:通过设置外部中断触发条件,确定何种事件触发中断,例如上升沿、下降沿、上升/下降沿、低电平、高电平等。这一步骤通常是通过配置寄存器(比如EXTI寄存器)来实现的。

  3. 注册中断服务程序:编写中断服务程序(中断处理函数),用于处理GPIO输入中断触发后的操作。在初始化时,需要注册相应的中断处理函数,以便在中断发生时执行。

  4. 使能外部中断线(EXTI):通过使能相应的外部中断线(EXTI),使系统能够监测GPIO引脚上的外部事件,并触发中断请求。

  5. 处理中断:当配置的外部中断触发条件满足时,系统会产生中断请求。此时,处理器会暂停当前任务,执行注册的中断服务程序来处理中断事件。

  6. 中断服务程序执行:在中断服务程序中,可以执行与GPIO输入中断相关的操作,比如读取引脚状态、记录事件发生时间、向其他任务发送信号等。

  7. 清除中断标志:在中断服务程序执行完成后,需要清除相应的中断标志,以使处理器能够继续正常执行主任务。

TBD--外设等复杂操作

GPIO除了简单的输入输出之外,还可以做一些相对复杂的操作,例如模拟I2C或SPI数据线、ADC电压检测、输出PWM波形等。

            

这些功能有些可以直接配置成硬件接口,也可以通过软件来模拟波形。

输入输出模式

1、4种输入模式

  • 输入浮空
  • 输入上拉
  • 输入下拉
  • 模拟输入
  1. 输入浮空(Input Floating)

    • 特点:当引脚未连接到外部信号时,处于浮空状态。
    • 应用:适用于接收正常的数字输入信号,典型情况是通过外部设备或传感器驱动GPIO引脚。
  2. 输入上拉(Input Pull-up)

    • 特点:引脚在未连接外部信号时被上拉到高电平(逻辑“1”)。
    • 应用:当外部设备未驱动引脚时,引脚保持高电平。
    • 按下接地,松开高电平,使能内部上拉电阻
  3. 输入下拉(Input Pull-down)

    • 特点:引脚在未连接外部信号时被下拉到低电平(逻辑“0”)。
    • 应用:当外部设备未驱动引脚时,引脚保持低电平。
    • 外部上下拉
    • 内部:按下接地,松开高电平,使能内部上拉电阻
  4. 模拟输入(Analog Input)

    • 特点:允许引脚接收模拟信号,用于模拟输入采样。
    • 特殊要求:可能需要额外的ADC(模数转换器)设置和处理。
    • 得到原始输入

施密特触发器:

 避免抖动

2、4种输出模式

  • 推挽输出
  • 开漏输出
  • 复用推挽输出
  • 复用开漏输出
  1. 推挽输出(Push-Pull Output)

    • 特点:引脚可输出高或低电平,可提供驱动能力。
    • 应用:用于控制外部电路,例如驱动LED、驱动电机等。
    • 想输出1时,把场效应管电压推导VDD,想输出0时,把场效应管电压推到VSS
  2. 开漏输出(Open Drain Output)

    • 特点:引脚只能拉低,拉高时需外部上拉电阻。
    • 应用:通常与外部上拉电阻一起用于实现总线结构,如I2C通信。
    • 双向通信
    • P-MOS悬空
    • 开漏输出步骤,IIC会用
  3. 复用推挽输出(Alternate Function Push-Pull Output)

    • 特点:引脚同时具有复用功能,可以用作其他功能(例如定时器输出)。
    • 应用:在相同引脚上实现多种功能共享,节省IO资源。
  4. 复用开漏输出(Alternate Function Open Drain Output)

    • 特点:引脚即可提供开漏输出,也能兼具复用功能。
    • 应用:兼顾开漏输出的特性和复用功能,适用于特定应用场景。

操作GPIO

配置寄存器CRL(0~7),CRH(8~15)

读写寄存器:IDR/ODR/BSRR

  • 11
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32是一系列由STMicroelectronics公司开发的32位微控制器。掌握STM32的基础知识对于进行嵌入式系统开发至关重要。以下是一些必须掌握的基础知识: 1. Cortex-M内核:STM32微控制器使用了Cortex-M内核,了解Cortex-M内核的架构和特性对于理解STM32的工作原理至关重要。 2. 寄存器编程:掌握使用寄存器编程的方法可以直接操作STM32的寄存器来配置和控制硬件。 3. GPIO:了解GPIO(通用输入输出)的概念和用法,包括如何配置引脚的输入/输出模式、使能/禁用上下拉电阻以及如何读取和写入引脚状态。 4. 中断和优先级:了解中断的概念和使用方法,包括如何配置中断源、中断向量表和中断优先级。 5. 定时器:掌握定时器的使用方法,包括定时器的配置、计数器设置、中断处理等。 6. 串口通信:了解串口通信的原理和使用方法,包括配置串口参数、发送和接收数据等。 7. ADC和DAC:了解模数转换器(ADC)和数模转换器(DAC)的原理和使用方法,包括配置和使用ADC进行模拟信号采样和DAC进行模拟信号输出。 8. PWM:了解脉冲宽度调制(PWM)的原理和使用方法,包括配置和使用PWM输出控制信号。 9. 外设接口:了解STM32微控制器支持的外设接口,如I2C、SPI、CAN等,并掌握它们的配置和使用方法。 10. 调试工具:熟悉使用调试工具,如STM32CubeIDE、ST-Link调试器等,用于程序开发、调试和烧录。 以上是一些基础知识,掌握它们可以帮助你开始进行STM32的开发和项目实践。当然,在实际应用中还会遇到更多的知识点,需要不断学习和实践。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值