首页 > 其他分享 >通过中断捕获引脚高电平持续时间

通过中断捕获引脚高电平持续时间

时间:2024-02-19 21:22:37浏览次数:27  
标签:TIM3 引脚 捕获 高电平 NVIC TIM InitStructure GPIO EXTI

include "stm32f10x.h" // Device header

extern uint16_t NUM;
int flag = 0,times;

void IC_Init(void)
{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//输入模式不需要设置速率
GPIO_Init(GPIOB,&GPIO_InitStructure);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource6);//选择中断的GPIOx 和线路 数字要与输入的GPIO口的数字对应

EXTI_InitTypeDef InitStructure;
InitStructure.EXTI_Line = EXTI_Line6; //与GPIO口的数字对应
InitStructure.EXTI_LineCmd = ENABLE;//开启中断
InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断响应事件 为中断事件
InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;//边沿触发方式
EXTI_Init(&InitStructure);

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//优先级分配
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel =   EXTI9_5_IRQn;//配置NVIC通道
NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;//使能
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;//抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;//响应优先级
NVIC_Init(&NVIC_InitStructure);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
TIM_InternalClockConfig(TIM3);//选择内部时钟

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;//TIM_CKD_DIVx 代表x 72M要被分为多少个
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;//向上计数
TIM_TimeBaseInitStruct.TIM_Period = 1000-1;//TIM_Prescaler装1000次 与CNT CCR同级
TIM_TimeBaseInitStruct.TIM_Prescaler = 72-1;//每产生义一个tips加1,加到72归零,TIM_Period+1
TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;//高级定时器使用 这里给0
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//时钟触发中断

NVIC_InitTypeDef NVIC_InitStructure2;
NVIC_InitStructure2.NVIC_IRQChannel = TIM3_IRQn;//来自TIM3的中断
NVIC_InitStructure2.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStructure2.NVIC_IRQChannelPreemptionPriority = 1;//抢占优先级1
NVIC_InitStructure2.NVIC_IRQChannelSubPriority = 1;//响应优先级1
NVIC_Init(&NVIC_InitStructure2);
/***********IC********************************/

}

void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update) == SET)
{
NUM++;
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
}
}
void EXTI9_5_IRQHandler(void)
{
if(SET == EXTI_GetITStatus(EXTI_Line6))
{
if(flag == 0)
{
NUM=0;flag=1;//0为第一个双边沿,1为第二个双边沿
TIM_SetCounter(TIM3,0);//设置TIM3的CNT为0
TIM_Cmd(TIM3,ENABLE);//开始计时
}
else
{
TIM_Cmd(TIM3,DISABLE);
flag = 0;
times = NUM*1000 +TIM_GetCounter(TIM3);
}
EXTI_ClearITPendingBit(EXTI_Line6);//清空中断标志位
}
}

标签:TIM3,引脚,捕获,高电平,NVIC,TIM,InitStructure,GPIO,EXTI
From: https://www.cnblogs.com/luotianwen/p/18021994

相关文章

  • 09_TIM输入捕获
    TIM输入捕获输入捕获简介频率测量输入捕获通道主从触发模式输入捕获基本结构PWMI基本结构输入捕获模式测频率接线图引脚选择代码IC.c#include"stm32f10x.h"//DeviceheadervoidIC_Init(void){ RCC_APB1PeriphClockCmd(RCC_APB1Per......
  • js 事件冒泡 事件捕获
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><title>test</title>......
  • 【工具】结合tcpdump/wireshark捕获码流快速构造测试场景
    源码如下:CommonHeader.h#ifndefTESTAPP_COMMONHEADER_H#defineTESTAPP_COMMONHEADER_H#include<array>#include<vector>#include<list>#include<queue>#include<stack>#include<set>#include<map>#include<......
  • Day62 异常02:捕获和抛出异常
    异常处理机制(trycatchfinallythrowthrows)抛出异常捕获异常异常处理的五个关键字try、catch、finally、throw、throws1.原始代码异常2.try、catch、finally(监控、捕获、善后)注意上述代码块中可以不要finally但必须有try{}catch{}finally一般用......
  • GPS信号的数字接收处理matlab仿真,包括频率点搜索,捕获跟踪,相关峰检测等步骤
    1.算法运行效果图预览 低信噪比下仿真结果如下:  2.算法运行软件版本matlab2022a 3.算法理论概述        GPS(全球定位系统)信号的数字接收处理是GPS接收机核心技术之一,它涉及到从接收到的卫星信号中提取导航数据和解算出位置信息的一系列处理过程。这个......
  • 捕获异常和异常处理机制
    publicclassDemo01{  publicstaticvoidmain(String[]args){    inta=1;    intb=0;    //ctrl+alt+T    //假设要捕获多个异常:从小到大    try{//监控区域      newDemo01().a();   }catch(Erro......
  • SpringBoot enter door基础_配springBoot项目,读取配置,配置全局异常捕获
    1、Spring是重量级企业开发框架 EnterpriseJavaBean(EJB) 的替代品,Spring为企业级Java开发提供了一种相对简单的方法,通过 依赖注入 和 面向切面编程 ,用简单的 Java对象(PlainOldJavaObject,POJO) 实现了EJB的功能虽然Spring的组件代码是轻量级的,但它的配置却是重......
  • GDB调试之捕获点的使用(十)
    一、什么是捕获点捕获点是一个特殊的断点,命令语法为:catchevent,即捕获到event这个事件的时候,程序就会中断下来。测试代码示例如下:#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>#include<iostream>#include<cstring>#include<th......
  • 捕获事件的指令有哪些
    Laravel是一个流行的PHP框架,它具有出色的可测试性,可以帮助开发人员在更短的时间内编写可靠的代码。但是,即使使用了这个框架,也可能会出现测试覆盖率较低的情况。测试覆盖率是指代码中已由测试案例覆盖的部分比例。测试覆盖率越高,代码质量越高。在本文中,我们将分享几种技巧,帮助您提......
  • Spring中全局捕获数据库唯一约束等异常,返回友好提示给用户
    controller中有如下新增数据的代码@ApiOperation(value="add",notes="新增数据")@PostMapping("add")publicAjaxResultadd(@RequestBodyXxxx){returnAjaxResult.success(xxxService.save(x));}如果想实现数据唯一性检验,并提示用户有如下方法方法一:代码逻辑层面......