首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在STM32H7上的GPIO上检测上升沿的最短下降沿和上升沿之间的时间

,可以通过以下步骤实现:

  1. 配置GPIO引脚:使用STM32CubeMX或者手动配置,将GPIO引脚设置为输入模式。
  2. 初始化外部中断:使用STM32CubeHAL库或者直接操作寄存器,初始化外部中断,使其与GPIO引脚相连。
  3. 编写中断处理函数:在中断处理函数中,检测上升沿和下降沿的触发,并记录时间戳。
  4. 计算时间差:根据记录的时间戳,计算上升沿和下降沿之间的时间差。

以下是一种可能的实现方式:

代码语言:txt
复制
#include "stm32h7xx.h"

volatile uint32_t start_time = 0;
volatile uint32_t end_time = 0;
volatile uint32_t time_diff = 0;

void EXTI_IRQHandler(void)
{
    if (EXTI->PR1 & EXTI_PR1_PIF0) // 检测引脚0的中断标志位
    {
        if (GPIOA->IDR & GPIO_PIN_0) // 检测引脚0的电平状态
        {
            start_time = DWT->CYCCNT; // 记录上升沿时间戳
        }
        else
        {
            end_time = DWT->CYCCNT; // 记录下降沿时间戳
            time_diff = end_time - start_time; // 计算时间差
        }

        EXTI->PR1 |= EXTI_PR1_PIF0; // 清除引脚0的中断标志位
    }
}

int main(void)
{
    // 初始化GPIO引脚和外部中断
    // ...

    // 初始化DWT(数据观察点和跟踪单元)
    if (!(CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA_Msk))
    {
        CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
        DWT->CYCCNT = 0;
        DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
    }

    while (1)
    {
        // 主循环
        // ...
    }
}

在上述代码中,我们使用了STM32H7的外部中断功能来检测GPIO引脚的状态变化。当引脚0的中断触发时,根据引脚的电平状态记录时间戳。通过DWT寄存器来获取CPU周期计数器的值,从而计算出上升沿和下降沿之间的时间差。

需要注意的是,上述代码只是一个简单的示例,实际应用中可能需要根据具体需求进行修改和优化。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云物联网平台:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云数据库MySQL版:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云音视频处理:https://cloud.tencent.com/product/mps
  • 腾讯云存储(对象存储):https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务:https://cloud.tencent.com/product/tbaas
  • 腾讯云元宇宙:https://cloud.tencent.com/product/mu
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

GPIO使用说明

GPIO与总线连接 例如stm32f103c8几组GPIO就挂载APB2 GPIO引脚功能 1....除此之外,还用在电平不匹配场合,如需要输出5V高电平,就可以在外部接一个拉电阻,拉电源为5V,并且把GPIO设置为开漏模式,当输出高阻态时,由拉电阻电源向外输出5V电平,如下图 (3)...模拟模式 GPIO_MODE_IT_RISING 上升沿触发检测外部中断模式 GPIO_MODE_IT_FALLING 下降沿触发检测外部中断模式 GPIO_MODE_IT_RISING_FALLING...上升/下降沿触发检测外部中断模式 GPIO_MODE_EVT_RISING 上升沿触发检测外部事件模式 GPIO_MODE_EVT_FALLING下降沿触发检测外部事件模式 GPIO_MODE_EVT_RISING_FALLING...|上升/下降沿触发检测外部事件模式 GPIO_speed |定义|说明| |--|--| |GPIO_SPEED_FREQ_LOW|频率范围最高到2MHZ| |GPIO_SPEED_FREQ_MEDIUM

1K20

STM32H7教程】第15章 STM32H7GPIO基础知识(重要)

15.2 GPIO功能简介 STM32H7GPIO特性如下:   输出状态:开漏/推挽 + 拉/下拉电阻。  ...相对于开漏输出模式,推挽输出最大优势是输出高电平时,上升时间快,电压驱动能力强。 ...开漏输出提供了灵活输出方式,但是也有其弱点,就是带来上升沿延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。...所以如果对延时有要求,则建议用下降沿输出。 可以将多个开漏输出连接到一条线上。通过一只拉电阻,不增加任何器件情况下,形成“与逻辑”关系,即“线与”。...15.6 GPIO兼容CMOSTTL电平 CMOSTTL电平兼容问题也是一个比较重要知识点,关于这方面的知识已经论坛进行了总结(由于截图较多,较长,就不整理到教程里面了):http://forum.armfly.com

1.1K30

(十九)STM32——输入捕获

目录 学习目标 成果展示 内容 获取 配置 代码 总结  ---- 学习目标         本节内容我们要介绍是输入捕获,其实也定时器那部分知识是有关系,所谓输入捕获,通俗一点来讲,其实就是通过检测上升沿下降沿来计算你输入持续时间...N 值就是滤波长度,举个简单例子;假设 IC1F[3:0]=0011,并设置IC1映射到通道1,且常上升沿触发。...那么捕获到上升沿时候,再以fck_INT频率,连续采样到8次通道1 电平,如果都是高电平,则说明却是一个有效触发,就会触发输入捕获中断。...我们最后来总结一下,整个过程就是通过检测TIMx_CHx边沿信号,边沿信号发生跳变(比如上升沿/下降沿时候,将当前定时器值(TIMx_CNT)存放到对应捕获/比较寄存器(TIMx_CCRx...获取 关于如何获取所需时间,有同学可能第一时间想到就是在上升沿计数器设为0,然后下降沿读出计数器,就能得到相应时间了,但是这样其实有个小问题,就是有可能有溢出。我们如何解决这个问题呢?

57120

电机控制基础2——定时器捕获单输入脉冲原理

从直观理解,就是要不断检测这个信号,当信号从0变到1时,记录一个时间,再从1变到0时,记录另一个时间,两个时间差就是高电平持续时间了。那具体要怎么编程呢?这就要用到定时器了。...如下图: 定时器CNT计数器不停计数 首先配置定时器输入通道为上升沿捕获,这样当检测到从0到1跳变时,CCR1就会先保存当前CNT值,同时CNT会清零重新开始计数 然后将定时器输入通道为下降沿捕获...00:非反相/上升沿触发 电路对 TIxFP1 上升沿敏感 (复位模式、外部时钟模式或触发模式下执行捕获或触发操作), TIxFP1 未反相 (门控模式或编码器模式下执行触发操作)。...01:反相/下降沿触发 电路对 TIxFP1 下降沿敏感 (复位模式、外部时钟模式或触发模式下执行捕获或触发操作), TIxFP1 反相 (门控模式或编码器模式下执行触发操作)。...11:非反相/上升沿下降沿均触发 电路对 TIxFP1 上升沿下降沿都敏感(复位模式、外部时钟模式或触发模式下执行捕获或触发操作),TIxFP1 未反相(门控模式下执行触发操作)。

1.7K01

SPI接口简介-Piyu Dhaker

来自主机或从机数据时钟上升沿下降沿同步。主机从机可以同时传输数据。SPI接口可以是3线式或4线式。本文重点介绍常用4线SPI接口。 接口 图1. 含主机从机SPI配置。...SPI通信期间,数据发送(串行移出到MOSI/SDO总线上)接收(采样或读入总线(MISO/SDI)数据)同时进行。串行时钟沿同步数据移位采样。...SPI接口允许用户灵活选择时钟上升沿下降沿来采样/或移位数据。欲确定使用SPI接口传输数据位数,请参阅器件数据手册。 时钟极性时钟相位 *SPI中,主机可以选择时钟极性时钟相位。...根据CPHA位状态,使用时钟上升沿下降沿来采样/或移位数据。主机必须根据从机要求选择时钟极性时钟相位。根据CPOLCPHA位选择,有四种SPI模式可用。表1显示了这4种SPI模式。...此模式下时钟相位为1,表示数据在下降沿采样(由橙色虚线显示),并且数据时钟信号 上升沿移出(由蓝色虚线显示)。 *图5给出了SPI模式3时序图。

77010

STM32H7教程】第17章 STM32H7GPIOHAL库API

所有的引脚有弱弱下拉电阻,阻值范围30-50KΩ。其中配置为模拟模式时,下拉被硬件禁止,其它输入、输出复用都可以配置下拉。  ...,下降沿触发检测 */ GPIO_MODE_IT_RISING_FALLING /* 外部中断,双沿触发检测 */ GPIO_MODE_EVT_RISING /* 外部事件模式...,上升沿触发检测 */ GPIO_MODE_EVT_FALLING /* 外部事件模式,下降沿触发检测 */ GPIO_MODE_EVT_RISING_FALLING /* 外部事件模式...,双沿触发检测 */ 成员Pull用于配置拉下拉电阻: GPIO_NOPULL /* 无上拉下拉电阻 */ GPIO_PULLUP /* 带上拉电阻 */ GPIO_PULLDOWN...(6)    如果是用于外部中断/事件,结构体GPIO_InitTypeDef成员Mode可以配置相应模式,相应上升沿下降沿或者双沿触发也可以选择。

1.4K30

建立保持时间及时序简单理解

时钟上升沿出现之前,D值都必须在一段指定时间内保持稳定,否则D触发器无法正常工作。吋钟上升沿之前D需要保持稳定最短时间称为建立时间。...然而,点c在建立时间窗口之内D输入发生改变,接下来相当长一段时间内(几乎整个时钟周期)Q输出电平10之间无法稳定(点d)。...保持时间 时钟上升沿之后一段时间内,D输入值也不允许改变,否则也会造成Q输出得不稳定,这个窗口被称为保持时间。建立时间保持时间在上图中表示为sh。...进行边沿检测时,有时候我们需要检测上升沿(从低到高跳变)、下降沿(由高向低跳变),或任一边沿(任何跳变)。 同步上升沿检测 上升沿检测如图5.38所示。...同步下降沿检测 下降沿检测如图5.39所示。 同步上升/下降沿检测 上升沿下降沿检测如图5.40所示。 异步输入上升沿检测 异步输入上升沿检测如图5.41所示。

1.4K10

电机控制基础3——定时器编码器模式使用与转速计算

11:非反相/上升沿下降沿均触发 电路对 TIxFP1 上升沿下降沿都敏感(复位模式、外部时钟模式或触发模式下执行捕获或触发操作),TIxFP1 未反相(门控模式下执行触发操作)。...下表汇总了可能组合(假设 TI1 TI2 不同时切换)。 ? 注:STM32 编码器接口计数时候,并不是单纯采集某一通道信号上升沿下降沿,而是需要综合另一个通道信号电平。...3.1.1 电机正转(向上计数) 假定电机正转时,编码通道A信号比通道B提前1/4个周期(也即相位提前90度),通道A上升沿下降沿均计数(如下图TI1波形中绿色红色箭头),因为计数方向代表电机转动方向...,所以,正转情况下: 通道A上升沿,通道B为低电平,向上计数,代表电机正转 通道A下降沿,通道B为高电平,向上计数,代表电机正转 ?...这里还以电机正转为例*: 观察下图,编码器开始阶段可依次捕获到:通道A上升沿、通道B上升沿、通道A下降沿、通道B下降沿,所以有: 通道A上升沿,通道B为低电平,向上计数,代表电机正转 通道B上升沿,通道

2.4K22

SPI协议代码

时钟第1个下降沿(游标2处)(切换点)   MOSI数据由1切换为0,,数据时钟下降沿时切换数据。   MISO数据由0切换为1,,数据时钟下降沿时切换数据。  ...◐时钟第2~8个上升沿(采样点),主机MISO采样数据,从机MOSI采样数据。  ◐时钟第2~8个下降沿(切换点),主机MISO切换数据,从机MOSI切换数据。...★从机CS拉低后(CS有下降沿)开始数据接收(SCK上升沿采集MOSI数据)。...在上图中标号2处下降沿处切换数据,上升沿之前保证了MOSI(游标1)处有稳定1bit数据(1),随后7个上升沿也一样分析。...CS下降沿SCK上升沿(从机以CS下降沿为数据接收开始,以SCK上升沿作为每bit数据采样点)。

62210

STM32外部中断(以按键为例)

2、外部中断特性EXTI控制器主要特性如下:● 每个中断/事件都有独立触发屏蔽● 每个中断线都有专用状态位● 支持多达20个软件中断/事件请求● 检测脉冲宽度低于APB2时钟宽度外部信号。...根据需要边沿检测设置2个触发寄存器,同时中断屏蔽寄存器相应位写’1’允许中断请求。当外部中断线上发生了期待边沿时,将产生一个中断请求,对应挂起位也随之被置’1’。...挂起寄存器对应位写’1’,将清除该中断请求。如果需要产生事件,必须先配置好并使能事件线。根据需要边沿检测通过设置2个触发寄存器,同时事件屏蔽寄存器相应位写’1’允许事件请求。...4、外部中断配置步骤●GPIO口需要配置为输入模式● 开启外设中断功能:打开指定GPIO口中断功能;● 配置中断产生电平(边沿,包括上升沿:由低电平变为高电平,下降沿:由高电平变为低电平,双边沿将上升沿下降沿放在一起...配置触发中断边沿信号*/EXTI->FTSR|=1RTSR|=1<<0; //中断线0_上升沿/*4.

63110

教你精确计算 I2C 拉电阻阻值

电阻总线电容产生了一个 RC 延时效应,电容越大信号边沿就越缓,有可能带来信号质量风险。 传输速度越快,信号窗口就越小,上升沿下降沿时间要求更短更陡峭,所以 RC 乘积必须更小。...拉电阻计算 1、拉电阻过小,总线上电流增大,端口输出低电平增大。 2、拉电阻过大,上升沿时间增大,方波可能会变成三角波。 因此计算出一个精确拉电阻阻值是非常重要。...计算上拉电阻阻值,是有明确计算公式: 最大电阻上升沿时间 tr 、总线电容 Cb 、标准上升沿时间 0.8473 有关。...最小电阻电源 Vdd 电压、GPIO 口自己最大输出电压 Vol、 GPIO口自己最大电流 Vol 有关。...tr = 1us 2、快速模式:100~400KHz,上升沿时间 tr = 0.3us 3、高速模式:up to 3.4MHz,上升沿时间 tr = 0.12us 由此公式,假设 Vdd 是 1.8V

7.2K21

三,ESP8266 SPI(基于Lua脚本语言)

引脚)空闲时是低电平 CPHA   = 0;//数据时钟信号(CLK)第1个沿开始数据传输 ?...  SlaveData 里面 第一个上升沿  主机10101010 最高位是 1 所以主机会让MOSI引脚输出高电平                         从机01010101最高位是 0...从机接收MOSI引脚数据,因为是低电平所以从机SlaveData = 0000 0010;  就这样8个上升8个下降沿之后                         MasterData  =...第一个上升沿  (注意是标号为1那个,,,实际是第二个上升沿)                        主机接收MISO引脚数据,因为是低电平所以 MasterData= 0000 0000...其余两种就不说了 其实说白了就是 CPOL控制空闲状态下CLK是高电平还是低电平 CPHA控制数据是第一个沿就开始传输还是第二个沿 其实呢!!

90240

PWM输入输出

TIM_ICPolarity:边沿检测,设置为上升沿下降沿也可以 TIM_ICPrescaler:分频因子,设置为1分频,也就是不分频 TIM_ICSelection:输入通道。...此时,计数器值为两个上升沿之间标准频率次数。 每次上升沿触发输入捕获时,输入捕获通道都会将计数器的当前值存入CCR。再次熟悉,CCR直译叫作:捕获/比较寄存器。...也就是说,测是两个上升沿之间标准频率次数,实现是测周法。 读取频率 时基单元中配置TIM_Period是72分频,也就是说,标准频率为1MHz。...当捕获事件(比如上升沿下降沿)发生时,定时器计数值会被保存在对应CCR寄存器中。 输入捕获模式下,CCR寄存器通常用于存储捕获事件时间戳或脉冲宽度。...求频率时,直接求得是CCR寄存器值,是周期数,实际是“时间”。 要求占空比,可以在线路2捕获下降沿,求出高电平时间”。 与整个周期时间作比,得到就是占空比。

40910

树莓派基础实验6:轻触开关按键实验

有多种方式将GPIO输入导入到程序中,polling( 轮询 )式 interrupt( 中断 )式( edge detection 边缘检测 ),“轮询”式如果程序错误时间读取值,可能会错过输入...这样,就可以设置输入默认值。可以使用硬件或者软件实现上下拉电阻。硬件方式中,常常在输入通道与3.3V(拉)或0V(下拉)之间使用10K电阻。..., GPIO.BOTH (上升沿, 下降沿 或 升降沿), 这样用几乎不占用CPU,如果你只希望确定时间段内查询,可以使用 timeout 参数: # wait for up to 5 seconds...只要检测到指定参数边缘事件(上升沿, 下降沿 或 升降沿)发生时,调用GPIO.event_detected(channel)值就为"ture"(真)。...定义针脚参数初始化设置函数setup(),其中就用到了上面讲解GPIO输入高级应用,添加边缘事件检测函数GPIO.add_event_detect()。 #!

2.8K30

STM32F0单片机快速入门五 GPIO中断

这个功能也很简单,但它牵涉到东西却不少。看一下代码: ? 一篇文章讲了如何翻转GPIO引脚,所以现在我们只关注一下如何用一个引脚触发中断吧。...GPIO中断引脚配置 MCU是如何把一个引脚电平变化一个中断联系起来呢?我们马上想到给每个GPIO引脚分配一个中断向量就好了。当一个引脚电平变化,马上就可以跳转到自己对应中断服务程序。...它除了可以完成中断引脚选择(映射),还可以配置是上升沿还是下降沿触发,也可以屏蔽(Mask)某个引脚。下面的示意图简要显示了这种关系。 ?...EXTI_RTSR (Rising trigger selection register) 0: 禁止上升沿触发。1: 使能上升沿触发。...如果上升沿下降沿都设置为1,那么在上升沿下降沿都会触发中断。 EXTI_PR (Pending register) 0: 没有中断请求。1: 有中断请求。

91130

SPI原理_托里拆利实验原理讲解

当SPI主设备想读/写[从设备]时,它首先拉低[从设备]对应SS线(SS是低电平有效),接着开始发送工作脉冲到时钟线上,相应脉冲时间,[主设备]把信号发到MOSI实现“写”,同时可对MISO采样而实现...CPHA=0,时钟第一个跳变沿上升沿下降沿)进行数据采样。,第2个边沿发送数据 CPHA=1,时钟第二个跳变沿上升沿下降沿)进行数据采样。...Mode1:CPOL=0,CPHA=1:此时空闲态时,SCLK处于低电平,数据发送是第1个边沿,也就是SCLK由低电平到高电平跳变,所以数据采样是在下降沿,数据发送是在上升沿。...Mode2:CPOL=1,CPHA=0:此时空闲态时,SCLK处于高电平,数据采集是第1个边沿,也就是SCLK由高电平到低电平跳变,所以数据采集是在下降沿,数据发送是在上升沿。...Mode3:CPOL=1,CPHA=1:此时空闲态时,SCLK处于高电平,数据发送是第1个边沿,也就是SCLK由高电平到低电平跳变,所以数据采集是在上升沿,数据发送是在下降沿

49010

树莓派基础实验8:振动开关实验

有多种方式将GPIO输入导入到程序中,polling( 轮询 )式 interrupt( 中断 )式( edge detection 边缘检测 ),“轮询”式如果程序错误时间读取值,可能会错过输入...这样,就可以设置输入默认值。可以使用硬件或者软件实现上下拉电阻。硬件方式中,常常在输入通道与3.3V(拉)或0V(下拉)之间使用10K电阻。..., GPIO.BOTH (上升沿, 下降沿 或 升降沿), 这样用几乎不占用CPU,如果你只希望确定时间段内查询,可以使用 timeout 参数: # wait for up to 5 seconds...只要检测到指定参数边缘事件(上升沿, 下降沿 或 升降沿)发生时,调用GPIO.event_detected(channel)值就为"ture"(真)。...定义针脚参数初始化设置函数setup(),其中就用到了上面讲解GPIO输入高级应用,本次实验不使用检测函数GPIO.add_event_detect(),采用“轮询”式,循环中直接查询GPIO.input

1.7K20

STM32单片机-输入捕获、FFT测频

一、硬件连接1、电压信号处理电路仿真2、单片机连接 主控MCU:STM32F103ZET6(STM32介绍),LM293输出连接在PB0检测电压信号频率,如图1.1.1与图1.2.1所示。​...如图1.2.2所示,注意其中TIM3_CH2N是PWM捕获比较输出,TIM3_CH3才是输入捕获。二、程序部分 这里通过STM32输入捕获或FFT转换两种方式实现频率测量,实际工程中都已实现。...计算两次ADC为0时间差,就可以计算出信号频率,这种方法不会受限于信号幅度限制。...因上升沿示波器测试并不陡峭(图1.1.1仿真图也可看出),故取一周波两次下降沿。 注意:后期处理程序必须捕获到两个下降沿前提下,才能作相应处理。采集程序未完成,此时处理会出错。...附录1:测频法计算频率 网上找资料,不保证正确性,没有实际测试过,仅供参考。 通过一定时间检测跳边沿个数可计算出频率 频率=上升沿下降沿个数/统计时间

15210

102-ESP32学习开发(SDK)-GPIO

开漏输入输出 GPIO_MODE_INPUT_OUTPUT 输入输出(如果想让模块即做输入检测又做输出控制,需要设置这个模式) 配置GPIO0作为输入输出模式,检测引脚输出状态 #include...(3000 / portTICK_RATE_MS);//延时约3S } } 配置GPIO0下降沿中断 1,中断类型 GPIO_INTR_DISABLE 禁用GPIO中断 GPIO_INTR_POSEDGE...GPIO中断类型:上升沿 GPIO_INTR_NEGEDGE 下降沿 GPIO_INTR_ANYEDGE 上升沿下降沿 GPIO_INTR_LOW_LEVEL 输入低电平触发 GPIO_INTR_HIGH_LEVEL...} void app_main(void) { //gpio配置结构体 gpio_config_t io_conf; //下降沿中断 io_conf.intr_type...vTaskDelay(1000 / portTICK_RATE_MS); } } 3,其实主要就几句话 4,动作 按键 (GPIO0) 5,提示 按理说下降沿中断,读取到引脚电平只有

47320
领券