首页 > 其他分享 >stm32系列--低电平时间的测量

stm32系列--低电平时间的测量

时间:2024-06-05 16:23:44浏览次数:28  
标签:TIM2 CAPTURE -- NVIC 捕获 低电平 stm32 TIM TIM2CH1

 

TIM_ICInitTypeDef  TIM2_ICInitStructure;
void TIM2_CH1_Cap_Init(u16 arr,u16 psc)
{
        GPIO_InitTypeDef GPIO_InitStructure;
      TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
       NVIC_InitTypeDef NVIC_InitStructure;
    
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);    //使能TIM2时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  //使能GPIOA时钟
        //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  //使能GPIOB时钟

        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;  
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; 
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        GPIO_SetBits(GPIOA,GPIO_Pin_0);                         
        //初始化定时器4 TIM2     
        TIM_TimeBaseStructure.TIM_Period = arr; //设定计数器自动重装值 
        TIM_TimeBaseStructure.TIM_Prescaler =psc;     //预分频器   
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
        TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

        //初始化TIM5输入捕获参数
        TIM2_ICInitStructure.TIM_Channel = TIM_Channel_1; //CC1S=01     选择输入端 IC1映射到TI1上
        TIM2_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling;    //下降沿捕获;zyq
        TIM2_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上
        TIM2_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;     //配置输入分频,不分频 
        TIM2_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置输入滤波器 不滤波
        TIM_ICInit(TIM2, &TIM2_ICInitStructure);

        //中断分组初始化
        NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;  //TIM2中断
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //先占优先级2级
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  //从优先级0级
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
        NVIC_Init(&NVIC_InitStructure);  //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器 

        TIM_ITConfig(TIM2,TIM_IT_Update|TIM_IT_CC1,ENABLE);//允许更新中断 ,允许CC1IE捕获中断    

        TIM_Cmd(TIM2,ENABLE );     //使能定时器4
}
u8  TIM2CH1_CAPTURE_STA=0;    //输入捕获状态                            
u16    TIM2CH1_CAPTURE_VAL;    //输入捕获值
//定时器2中断服务程序     
void TIM2_IRQHandler(void)
{     
     if((TIM2CH1_CAPTURE_STA&0X80)==0)//还未成功捕获    
    {      
        if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
         
        {        
            if(TIM2CH1_CAPTURE_STA&0X40)//已经捕获到低电平了
            {
                if((TIM2CH1_CAPTURE_STA&0X3F)==0X3F)//低电平太长了
                {
                    TIM2CH1_CAPTURE_STA|=0X80;//标记成功捕获了一次
                    TIM2CH1_CAPTURE_VAL=0XFFFF;
                }else TIM2CH1_CAPTURE_STA++;
            }     
        }
    if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)//捕获1发生捕获事件
        {    
            if(TIM2CH1_CAPTURE_STA&0X40)        //捕获到一个上升沿        
            {                  
                TIM2CH1_CAPTURE_STA|=0X80;        //标记成功捕获到一次下降沿
                TIM2CH1_CAPTURE_VAL=TIM_GetCapture1(TIM2);
                   TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Falling); //CC1P=0 设置为下降沿捕获
            }else                                  //还未开始,第一次捕获下降沿
            {
                TIM2CH1_CAPTURE_STA=0;            //清空
                TIM2CH1_CAPTURE_VAL=0;
                 TIM_SetCounter(TIM2,0);
                TIM2CH1_CAPTURE_STA|=0X40;        //标记捕获到了下降沿
                   TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Rising);        //CC1P=1 设置为上升沿捕获
            }            
        }                                                
     }
 
    TIM_ClearITPendingBit(TIM2, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位
 
}
TIM2_CH1_Cap_Init
    TIM2_CH1_Cap_Init(0XFFFF,72-1); //PA0      //CH2 

        if(TIM2CH1_CAPTURE_STA&0X80)//成功捕获到了一次上升沿
        {    
            ch2.temp_time=TIM2CH1_CAPTURE_STA&0X3F;
            ch2.temp_time*=65536;//溢出时间总和
            ch2.temp_time+=TIM2CH1_CAPTURE_VAL;//得到总的高电平时间,以1Mhz的频率计数
            printf("LOW2:%d us\r\n",ch2.temp_time);//打印总的低电平时间
            
     }
main

 

标签:TIM2,CAPTURE,--,NVIC,捕获,低电平,stm32,TIM,TIM2CH1
From: https://www.cnblogs.com/zhouyuqing1024/p/18233237

相关文章

  • 从零开始的.NET项目(一)配置EFCore
    目标框架:.net6.0操作系统:macos编译器:Rider内容:配置EFCore,使用CodeFrist创建mssql数据库,并存入种子数据数据库准备如果使用的是vs编译器的话,其实就不用准备数据库了,直接用vs自带的数据库,嘎嘎好使......
  • windows batch cmd 批处理命令之 系统内置变量
    大部分环境变量, 在powershell中 可以用下面这条命令显示出来lsenv: 绝对路径是指调用绝对的程序位置的路径,例如:startC:\Windows\test.exe相对路径是文件改变路径以后还会按照变量的路径所在位置去调用,例如:start%WINDIR%\test.exe假如把系统安装在了D盘,使用......
  • 内网渗透_远控
    内网渗透_远控ToDeskToDesk_Lite官方最新下载地址:https://dl.todesk.com/windows/ToDesk_Lite.exe利用powershell建立http连接下载todesk_lite.exePSC:\Users\Administrator\Desktop>powershell.exe-cInvoke-WebRequest-Uri"https://dl.todesk.com/windows/ToDesk_L......
  • JavaDoc生成文档
    javaDoc命令是用来生成自己API文档的参数信息:@auchor:作者名@version:版本号@since:指明需要最早使用的jdk版本@param:参数名@return:返回值情况@throws:异常抛出情况//主要生成的参数如:/***@author林伟填*@version1.0*@since1.8*/publiccla......
  • 心诺安 x TapData:快速搭建云中数仓,助力电商企业实施“以用户为中心的”精细化运营
    使用TapData,化繁为简,摆脱手动搭建、维护数据管道的诸多烦扰,轻量代替OGG、DSG等同步工具,「CDC+流处理+数据集成」组合拳,加速仓内数据流转,帮助企业将真正具有业务价值的数据作用到实处,将“实时数仓”方法论落进现实。TapData持续迭代产品能力,优化用户体验的同时,也在不断探......
  • 基于阿里云服务网格流量泳道的全链路流量管理(三):无侵入式的宽松模式泳道
    作者:尹航在前文《基于阿里云服务网格流量泳道的全链路流量管理(一):严格模式流量泳道》、《基于阿里云服务网格流量泳道的全链路流量管理(二):宽松模式流量泳道》中,我们介绍了流量泳道的概念、使用流量泳道进行全链路灰度管理的方案,以及阿里云服务网格ASM提供的严格模式与宽松模式的......
  • APP安全评估报告:直面移动应用安全威胁,守护用户数据安全
    随着移动互联网的飞速发展,移动应用程序(APP)已深入到我们日常生活的方方面面。然而,与此同时,APP安全问题也日益凸显,成为威胁用户隐私和财产安全的重大隐患。以下是几个典型的APP安全威胁案例:数据泄露:•2021年,AmazonRingApp的安全漏洞被曝光,导致用户数据泄露,包括家庭住址等敏感......
  • Docker Compose
    目录一、DockerCompose概述1、DockerCompose是什么2、DockerCompose核心概念3、DockerCompose使用步骤4、Docker与DockerCompose文件版本对应关系二、DockerCompose安装与卸载1、二进制包安装1.1、下载DockerComposeV2版本1.2、添加可执行权限1.3、设置软链接1.4......
  • 正则表达式学习(3)——语法
    普通字符[abc]匹配中括号的所有字符[^abc]匹配除了中括号的所有字符[A-Z]匹配A-Z的大写字母区间内的字符[a-z]匹配a-z的小写字母区间内的字符[0-9]匹配0-9的数字.匹配除了换行、回车(\n,\r)的单个字符,等价于[^\n\r]\s是匹配所有空白符,包括换行\S非空白符,不包括换......
  • 面向对象设计方法Review-02.抽象数据类型
    结构化开发方法基本思想:自顶向下,逐步求精,过程抽象,模块化技术概念:结构化程序设计:按照一定的原则与原理,组织编写正确且易读的程序的软件技术。结构化分析设计:数据流图、数据字典、模块结构图。优势:合理性(管理复杂性的有效手段:分解,抽象,层次)、正确性(依据规约,完成任务)程序&......